diff --git a/studio/frontend/src/features/export/components/export-dialog.tsx b/studio/frontend/src/features/export/components/export-dialog.tsx index 401be3ff4..176b10a52 100644 --- a/studio/frontend/src/features/export/components/export-dialog.tsx +++ b/studio/frontend/src/features/export/components/export-dialog.tsx @@ -272,12 +272,13 @@ export function ExportDialog({ exportSuccess, exportOutputPath, }: ExportDialogProps) { - // Live log capture is only meaningful for export methods that run - // a slow subprocess operation with interesting stdout: merged and - // gguf. LoRA adapter export is a fast disk write and would just - // show a blank panel, so we hide it there. + // Live log capture is useful for any export path executed by the + // backend worker, including LoRA adapter-only export. const showLogPanel = - exportMethod === "merged" || exportMethod === "gguf"; + exportMethod === "merged" || + exportMethod === "gguf" || + exportMethod === "lora"; + const showCompletionScreen = exportSuccess && !showLogPanel; const { lines: logLines, connected: logConnected, error: logError } = useExportLogs(exporting && showLogPanel, exportMethod, open); @@ -314,7 +315,7 @@ export function ExportDialog({ className={showLogPanel ? "sm:max-w-2xl" : "sm:max-w-lg"} onInteractOutside={(e) => { if (exporting) e.preventDefault(); }} > - {exportSuccess ? ( + {showCompletionScreen ? ( <>
@@ -460,6 +461,27 @@ export function ExportDialog({ )} + {/* Success banner for log-driven exports. + Keep users on the log screen after completion so they can + inspect conversion output before closing. */} + {exportSuccess && showLogPanel && ( +
+ +
+ + {destination === "hub" + ? "Export finished and pushed to Hugging Face Hub." + : "Export finished successfully."} + + {exportOutputPath ? ( + + {exportOutputPath} + + ) : null} +
+
+ )} + {/* Error banner */} {exportError && (
@@ -577,14 +599,16 @@ export function ExportDialog({ onClick={() => onOpenChange(false)} disabled={exporting} > - Cancel + {exportSuccess ? "Done" : "Cancel"} -