From 1c5af1221e2f47c7682347a5ea0bd276f700daba Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Thu, 28 May 2026 11:10:10 -0700 Subject: [PATCH 01/36] added upload notebook modal logic --- .../component/menu/menu.component.html | 122 ++++++++++ .../component/menu/menu.component.ts | 217 +++++++++++++++++- .../component/workspace.component.html | 21 +- .../component/workspace.component.scss | 33 +++ .../component/workspace.component.ts | 48 +++- .../tool_popup_diagram.png | Bin 0 -> 119292 bytes 6 files changed, 433 insertions(+), 8 deletions(-) create mode 100644 frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index a21e4d56429..48a65b473ef 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -149,6 +149,16 @@ nz-icon nzType="info-circle"> + @@ -456,3 +466,115 @@ + + +
+
+ Notebook to Workflow +
+ + +

+ This tool converts a Python Jupyter Notebook into a Texera workflow using LLM capabilities. After you submit a + notebook, the LLM service will generate a corresponding Texera workflow. The conversion time depends on the + notebook’s complexity and can take 1–5 minutes. Once the process is complete, the workflow workspace will reload + with: +

+
    +
  1. + The generated workflow ready to use (Note: you will still need to upload the dataset and connect it to the + workflow). +
  2. +
  3. A floating Jupyter window containing the uploaded notebook for reference.
  4. +
+

+ Feel free to navigate away from this tab while you wait for the workflow to generate. Please do not close the + window. +

+
+ + + + Upload Python Jupyter Notebook + + +
+ + + + + + Selected file: {{ importForm.get('file')?.value?.name }} + +
+
+
+ + + + Select Model Type + + + + + + + + + + + + + + + + + + API Key + + + + + +
+
diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 6375fbcee4e..3cb60766204 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -17,9 +17,21 @@ * under the License. */ -import { DatePipe, Location, NgIf, NgFor, NgTemplateOutlet } from "@angular/common"; -import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from "@angular/core"; +import { DatePipe, Location, NgIf, NgFor, NgTemplateOutlet, AsyncPipe, NgOptimizedImage } from "@angular/common"; +import { + Component, + ElementRef, + Input, + OnDestroy, + OnInit, + ViewChild, + Output, + EventEmitter, + TemplateRef, + ViewContainerRef, +} from "@angular/core"; import { Router, RouterLink } from "@angular/router"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { UserService } from "../../../common/service/user/user.service"; import { DEFAULT_WORKFLOW_NAME, @@ -33,7 +45,7 @@ import { WorkflowActionService } from "../../service/workflow-graph/model/workfl import { ExecutionState } from "../../types/execute-workflow.interface"; import { WorkflowWebsocketService } from "../../service/workflow-websocket/workflow-websocket.service"; import { WorkflowResultExportService } from "../../service/workflow-result-export/workflow-result-export.service"; -import { catchError, debounceTime, filter, mergeMap, tap } from "rxjs/operators"; +import { catchError, debounceTime, filter, mergeMap, switchMap, tap } from "rxjs/operators"; import { UntilDestroy, untilDestroyed } from "@ngneat/until-destroy"; import { WorkflowUtilService } from "../../service/workflow-graph/util/workflow-util.service"; import { WorkflowVersionService } from "../../../dashboard/service/user/workflow-version/workflow-version.service"; @@ -43,7 +55,7 @@ import { saveAs } from "file-saver"; import { NotificationService } from "src/app/common/service/notification/notification.service"; import { OperatorMenuService } from "../../service/operator-menu/operator-menu.service"; import { CoeditorPresenceService } from "../../service/workflow-graph/model/coeditor-presence.service"; -import { firstValueFrom, of, Subscription, timer } from "rxjs"; +import { firstValueFrom, map, of, Subscription, timer } from "rxjs"; import { isDefined } from "../../../common/util/predicate"; import { NzModalService } from "ng-zorro-antd/modal"; import { ResultExportationComponent } from "../result-exportation/result-exportation.component"; @@ -74,6 +86,13 @@ import { NzPopoverDirective } from "ng-zorro-antd/popover"; import { NzSwitchComponent } from "ng-zorro-antd/switch"; import { NzBadgeComponent } from "ng-zorro-antd/badge"; import { NzTooltipDirective } from "ng-zorro-antd/tooltip"; +import { JupyterPanelService } from "../../service/jupyter-panel/jupyter-panel.service"; +import { v4 as uuidv4 } from "uuid"; +import { Notebook } from "../../service/notebook-migration/migration-llm"; +import { NotebookMigrationService } from "../../service/notebook-migration/notebook-migration.service"; +import { NzFormModule } from "ng-zorro-antd/form"; +import { NzSelectModule } from "ng-zorro-antd/select"; +import { ReactiveFormsModule } from "@angular/forms"; /** * MenuComponent is the top level menu bar that shows @@ -122,6 +141,11 @@ import { NzTooltipDirective } from "ng-zorro-antd/tooltip"; NzTooltipDirective, DatePipe, NzSpaceCompactComponent, + NzFormModule, + AsyncPipe, + NzSelectModule, + ReactiveFormsModule, + NgOptimizedImage, ], }) export class MenuComponent implements OnInit, OnDestroy { @@ -147,6 +171,8 @@ export class MenuComponent implements OnInit, OnDestroy { @Input() public currentExecutionName: string = ""; // reset executionName @Input() public particularVersionDate: string = ""; // placeholder for the metadata information of a particular workflow version @ViewChild("workflowNameInput") workflowNameInput: ElementRef | undefined; + // Emit an event to parent component (workspace) when AI generation starts or stops + @Output() public setWaitingForLLM = new EventEmitter(); // variable bound with HTML to decide if the running spinner should show public runButtonText = "Run"; @@ -167,6 +193,9 @@ export class MenuComponent implements OnInit, OnDestroy { @ViewChild(ComputingUnitSelectionComponent) computingUnitSelectionComponent!: ComputingUnitSelectionComponent; + public importForm: FormGroup; + @ViewChild("importNotebookModal", { static: true }) importModalTpl!: TemplateRef; + constructor( public executeWorkflowService: ExecuteWorkflowService, public workflowActionService: WorkflowActionService, @@ -189,7 +218,12 @@ export class MenuComponent implements OnInit, OnDestroy { private panelService: PanelService, private computingUnitStatusService: ComputingUnitStatusService, protected config: GuiConfigService, - private router: Router + private router: Router, + private fb: FormBuilder, + private modal: NzModalService, + private viewContainerRef: ViewContainerRef, + private jupyterPanelService: JupyterPanelService, + private notebookMigrationService: NotebookMigrationService ) { workflowWebsocketService .subscribeToEvent("ExecutionDurationUpdateEvent") @@ -219,6 +253,13 @@ export class MenuComponent implements OnInit, OnDestroy { // Subscribe to computing unit this.subscribeToComputingUnitSelection(); this.subscribeToComputingUnitStatus(); + + this.importForm = this.fb.group({ + description: [""], + file: [null, Validators.required], + model: [""], + apiKey: [""], + }); } public ngOnInit(): void { @@ -594,6 +635,172 @@ export class MenuComponent implements OnInit, OnDestroy { this.workflowActionService.deleteOperatorsAndLinks(allOperatorIDs); } + public get pythonNotebookMigrationEnabled(): boolean { + return this.config.env.pythonNotebookMigrationEnabled; + } + + openImportNotebookModal(): void { + const models$ = this.notebookMigrationService.getAvailableModels().pipe( + tap({ + error: () => this.notificationService.error("Failed to fetch models"), + }) + ); + + const modalRef = this.modal.create({ + nzTitle: "AI Generate Workflow from Python Notebook", + nzContent: this.importModalTpl, + nzViewContainerRef: this.viewContainerRef, + nzWidth: 700, + nzData: { + models$: models$, + }, + nzFooter: [ + { + label: "Cancel", + onClick: () => { + modalRef.close(); + }, + }, + { + label: "Submit", + type: "primary", + disabled: () => !this.importForm.valid, + onClick: () => { + const file: NzUploadFile = this.importForm.get("file")?.value; + const model: string = this.importForm.get("model")?.value; + const apiKey: string = this.importForm.get("apiKey")?.value; + this.onClickImportNotebook(file, model, apiKey); + modalRef.close(); // close after submit too + }, + }, + ], + }); + } + + public beforeUpload = (file: NzUploadFile) => { + this.importForm.patchValue({ file }); + this.importForm.get("file")?.markAsDirty(); + this.importForm.get("file")?.updateValueAndValidity(); + return false; // prevent auto upload + }; + + public onClickImportNotebook = (file: NzUploadFile, model: string, apiKey: string): boolean => { + const reader = new FileReader(); + + // Check if the file is a Jupyter notebook based on its extension + const fileExtension = file.name.split(".").pop()?.toLowerCase(); + if (fileExtension !== "ipynb") { + this.notificationService.error("Please upload a valid Jupyter Notebook (.ipynb) file."); + return false; + } + + this.setWaitingForLLM.emit(true); // start loading + + // Read the notebook file as text + reader.readAsText(file as any); + reader.onload = async () => { + try { + const result = reader.result; + if (typeof result !== "string") { + throw new Error("File content is not a valid string."); + } + + // Parse the content of the .ipynb file (it's in JSON format) + const notebookContent = JSON.parse(result) as Notebook; + + // Validate the notebook structure + if (!notebookContent || !Array.isArray(notebookContent.cells)) { + throw new Error("Invalid notebook structure."); + } + + // Add UUID's to each cell in the notebook + for (const cell of notebookContent.cells) { + if (!cell.metadata) { + cell.metadata = {}; + } + cell.metadata.uuid = uuidv4(); + } + + // Send Notebook JSON to pod to open in jupyterlab + await this.notebookMigrationService.sendNotebookToJupyter(notebookContent); + + // Get workflow and mapping from LLM + await this.notebookMigrationService + .sendToAIGenerateWorkflow(notebookContent, model, apiKey) + .then(result => { + if (result) { + const { workflowContent, mappingContent } = result; + + const fileExtensionIndex = file.name.lastIndexOf("."); + var workflowName: string; + if (fileExtensionIndex === -1) { + workflowName = file.name; + } else { + workflowName = file.name.substring(0, fileExtensionIndex); + } + if (workflowName.trim() === "") { + workflowName = DEFAULT_WORKFLOW_NAME; + } + + const workflow: Workflow = { + content: workflowContent, + name: `${workflowName}_GENERATED_BY_LLM`, + isPublished: 0, + description: undefined, + wid: undefined, + creationTime: undefined, + lastModifiedTime: undefined, + readonly: false, + }; + + this.workflowPersistService + .persistWorkflow(workflow) + .pipe( + switchMap((updatedWorkflow: Workflow) => { + const mappingID = "mapping_wid_" + updatedWorkflow.wid; + + this.notebookMigrationService.setMapping(mappingID, mappingContent); + + return this.notebookMigrationService + .storeNotebookAndMapping(updatedWorkflow.wid, 1, mappingContent, notebookContent) + .pipe(map(() => updatedWorkflow)); + }), + untilDestroyed(this) + ) + .subscribe({ + next: updatedWorkflow => { + this.workflowActionService.reloadWorkflow(updatedWorkflow, true); + this.jupyterPanelService.openPanel("JupyterNotebookPanel"); + this.notificationService.success("Successfully generated workflow and mapping from notebook."); + }, + error: (err: unknown) => { + this.notificationService.error("Failed to import notebook, check console for detailed error"); + console.error("Import notebook failed:", err); + }, + complete: () => { + this.setWaitingForLLM.emit(false); + }, + }); + } else { + console.error("Result is undefined"); + } + }) + .catch(error => { + this.notificationService.error("Error while communicating with LLM, check console for details"); + console.error("Error while fetching data from LLM: ", error); + }) + .finally(() => { + this.setWaitingForLLM.emit(false); // stop loading + }); + } catch (error) { + this.notificationService.error("Failed to import the notebook."); + console.error(error); + } + }; + + return false; // Prevent automatic upload handling + }; + public onClickImportWorkflow = (file: NzUploadFile): boolean => { const reader = new FileReader(); reader.readAsText(file as any); diff --git a/frontend/src/app/workspace/component/workspace.component.html b/frontend/src/app/workspace/component/workspace.component.html index c54446fb318..1ad2592e96b 100644 --- a/frontend/src/app/workspace/component/workspace.component.html +++ b/frontend/src/app/workspace/component/workspace.component.html @@ -21,7 +21,22 @@ + nzTip="Loading workflow..."> + + +
+ + +
+
Waiting for LLM response...
+
Estimated time 1-3 minutes
+
Do not close this tab
+
Elapsed time: {{ formattedElapsedTime }}
+
@@ -29,8 +44,10 @@ + [pid]="pid" + (setWaitingForLLM)="onWaitingForLLMChanged($event)"> + { + this.updateElapsedTime(); + }, 1000); + } + + stopTimer() { + clearInterval(this.timerInterval); + this.timerInterval = null; + this.startTime = null; + } + + updateElapsedTime() { + this.cdRef.detectChanges(); + } + + get formattedElapsedTime(): string { + if (!this.startTime) return "00:00"; + const diff = Date.now() - this.startTime; + const minutes = Math.floor(diff / 60000); + const seconds = Math.floor((diff % 60000) / 1000); + return `${minutes}:${seconds.toString().padStart(2, "0")}`; + } } diff --git a/frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png b/frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..438cebc88c9585245470182c85afa37031c1658e GIT binary patch literal 119292 zcmeFYbyQT{`#x*~QX(y-ARx_vbSWSqr6S!OL-!Da0@5LZbVwuJ9U`40HFU!aT|*5F z@E#sN-}OBIzyJPbty!!Y&OT?)-gjKrb>BPWow6+c!zT}K-MWP@FDL!s)~yG2w{G2D zz=_c2JqpY#cQS4w{De3;bM&L1D|mmpDkX`t?T-{p~sTl#k<=*9Q~zyp=xWagi@Ko+>?(E;p2l;Hycn94lpFVj8y0 z+;~sS2kIh;*@IEUlyY?C4_j`Nl1ks(klVBUJojbC2QiPjSeZ{ur6hYZ`{n+;3fb zH$A}kb4yA7@0L^KtkzG^9y>kXCtZ`c#k_#iuatXzr{%h0GKGx_!9&!EJ7`5bn7S2M21$KJ+5!MFxJ|nqwNg4e0 zf&F%o9DBRkf6cx}yxb1Vcn!7Sdy~VrkqlV>^vBW?i1$Wp8=hd1)OoI(?7uEn_4C`I zr@n_TN7%%!+(Ilp7jq0IMe)#?w-+`@Pd#!pKu>?zYg{7hYI}FQI^yF5-v`yx-eP`P z!tLK^X1r`2BRAlFQvbPMq7Yjs8o9-`Kcf6vsOwL&vv_l(d$xNN!O^zvE5V{4fHRAy zYYv!fMY7hAXq4sDefyR=&T&O`G|n3YGSWPaJ>L29Z$z+ih5ts4PVDbuI9RsuxxHVx zGtocxYl4i(*AX{>vXA!_<`{Ve9!)0ug_NFlhM1nT7Il< z$Eu>WQ0RrlM924)lg3#U9tLbfH4SOCVsdR<=5k-`u`Km`NNK9bw{W+Q$3Op#JK9Pw z5eMCQ$jbU`CbLTxSwi#GAG9o6zzj~RqcrSS=7hi>;Kv(r-KU&1ve~Ht0{?xw=3?75 zbYSFIgm~+rQ>CEAAyGjE5mB^TR#j18{DOgutF4LgT>kCU`V-9iolM)L|NMATt|85C z9cO;VI4{?|UqZ~0PkA4|rDUe3uW04t@AR-b=c$Q%S*t8!Vk|L~I3{5>d-X?r6Z(JQ zZuJwt`y0o%ma1QqJL@0XN=s*__6=Y=&#w}ZteP{zn?YU-xa!|?!)NIJV>`$XdgN;% z0vb$ly!6jnJo@B#NT!2>scQHGx)proqMrLk zN1O8?vv6RX7d+1kONKz0yraz`>(oQxy|Gjqj*L>>Zcnur& zEEYtL%>wyz6no4`4ITBmO_ss_oq(d;?|a~h>G%> z6uxn@qM!4<=SfaAV`?9!HD%wZit&{*J(;5b!8-3ez!o7$%;1JBDGHmL4s)fLf)g-cL)R_AX!-$!sv1 zbaCL@)lWy0Vb1wQR<{gC^3%N6sxmgDrepsx{%HRcMr?4nzXeChaj;hZ$+4w!&*~@R7`$3{sOgCv^CHsk~Nqic%GILn>_U5 zZgJ*{+@AE`)j|hEJTs-HHgPDXTc#jc1|S0Ui>vd6D6J<|Q5&Ppcga(Pg?)f;dv0$` z)sk0MXFvWl?BC$9Q_nCORK@ZaGhneu;5n9QW~Rx;P?&s|qHOa{A0^L46#+859AHYkZ`1SH0b7!wL-!CHR3Rmxyea;vSMLJUU_wZ* z92~sz>DWK_>w8%Pz-&%--BpH6R@_>B2FkAH1TQCjF04#}?`sab21tu$-#z^GOP{80 zL&4-fb0PwBz(1A$G1YrAOTkv?zTb6H-K1U>YWAIRvIx75mgz~mW~*k`^i$J}V}mDM zTb6z{Sm0kWzaKeqkUERXkg1BP;v{Q()o1&dU{=sZ78=q%b@E zu5r4{c;|Vql!fBd!I2~yj}nD^@z7Bce?vQ}32jl|n&cy?nulS&-U0~*Sh∈qQD% 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 literal 0 HcmV?d00001 From 62307606f1b8e4d40bdb8b375844346df644ee84 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Wed, 24 Jun 2026 10:23:35 -0700 Subject: [PATCH 02/36] remove unused api key input, auth via jwt --- .../workspace/component/menu/menu.component.html | 14 -------------- .../app/workspace/component/menu/menu.component.ts | 8 +++----- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index 43b6258e10f..519223044e0 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -562,19 +562,5 @@ - - - - API Key - - - - - diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 6f62a4146a6..33ec07e2737 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -253,7 +253,6 @@ export class MenuComponent implements OnInit, OnDestroy { description: [""], file: [null, Validators.required], model: [""], - apiKey: [""], }); } @@ -658,8 +657,7 @@ export class MenuComponent implements OnInit, OnDestroy { onClick: () => { const file: NzUploadFile = this.importForm.get("file")?.value; const model: string = this.importForm.get("model")?.value; - const apiKey: string = this.importForm.get("apiKey")?.value; - this.onClickImportNotebook(file, model, apiKey); + this.onClickImportNotebook(file, model); modalRef.close(); // close after submit too }, }, @@ -674,7 +672,7 @@ export class MenuComponent implements OnInit, OnDestroy { return false; // prevent auto upload }; - public onClickImportNotebook = (file: NzUploadFile, model: string, apiKey: string): boolean => { + public onClickImportNotebook = (file: NzUploadFile, model: string): boolean => { const reader = new FileReader(); // Check if the file is a Jupyter notebook based on its extension @@ -716,7 +714,7 @@ export class MenuComponent implements OnInit, OnDestroy { // Get workflow and mapping from LLM await this.notebookMigrationService - .sendToAIGenerateWorkflow(notebookContent, model, apiKey) + .sendToAIGenerateWorkflow(notebookContent, model) .then(result => { if (result) { const { workflowContent, mappingContent } = result; From ea6a8f9e20c2d6f75989bfc89dff0e88f06b5c6e Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Thu, 23 Jul 2026 15:20:36 -0700 Subject: [PATCH 03/36] use @if control flow for the llm spinner text instead of ngIf --- .../workspace/component/workspace.component.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/workspace/component/workspace.component.html b/frontend/src/app/workspace/component/workspace.component.html index 1ad2592e96b..b9efccc96f9 100644 --- a/frontend/src/app/workspace/component/workspace.component.html +++ b/frontend/src/app/workspace/component/workspace.component.html @@ -29,14 +29,14 @@ [nzSize]="'large'" [nzSpinning]="isWaitingForLLM"> -
-
Waiting for LLM response...
-
Estimated time 1-3 minutes
-
Do not close this tab
-
Elapsed time: {{ formattedElapsedTime }}
-
+ @if (isWaitingForLLM) { +
+
Waiting for LLM response...
+
Estimated time 1-3 minutes
+
Do not close this tab
+
Elapsed time: {{ formattedElapsedTime }}
+
+ }
From 29029186b2dc0cf8b2c39153715b516ae6ae7d87 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 24 Jul 2026 13:55:06 -0700 Subject: [PATCH 04/36] add expand jupyter panel button to top menu bar --- .../component/menu/menu.component.html | 10 +++++ .../component/menu/menu.component.scss | 6 +++ .../component/menu/menu.component.spec.ts | 33 +++++++++++++++ .../component/menu/menu.component.ts | 13 ++++++ .../notebook_migration_tool/jupyter-logo.svg | 42 +++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 frontend/src/assets/notebook_migration_tool/jupyter-logo.svg diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index 519223044e0..8eab9537997 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -159,6 +159,16 @@ nz-icon nzType="robot"> + diff --git a/frontend/src/app/workspace/component/menu/menu.component.scss b/frontend/src/app/workspace/component/menu/menu.component.scss index 414a1c9cef6..1ec134e971e 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.scss +++ b/frontend/src/app/workspace/component/menu/menu.component.scss @@ -190,3 +190,9 @@ texera-coeditor-user-icon { ::ng-deep .layers-dropdown { user-select: none; } + +.jupyter-notebook-icon { + height: 1.1em; + width: auto; + vertical-align: -0.2em; +} diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts b/frontend/src/app/workspace/component/menu/menu.component.spec.ts index caa86bf614d..570758c6f25 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts @@ -50,6 +50,9 @@ import { WorkflowContent } from "../../../common/type/workflow"; import { Router } from "@angular/router"; import { ReportGenerationService } from "../../service/report-generation/report-generation.service"; import { USER_WORKFLOW } from "../../../app-routing.constant"; +import { JupyterPanelService } from "../../service/jupyter-panel/jupyter-panel.service"; +import { GuiConfigService } from "../../../common/service/gui-config.service"; +import { MockGuiConfigService } from "../../../common/service/gui-config.service.mock"; import type { Mocked } from "vitest"; vi.mock("file-saver", () => ({ saveAs: vi.fn() })); @@ -114,6 +117,36 @@ describe("MenuComponent", () => { expect(component).toBeTruthy(); }); + describe("expand jupyter notebook panel", () => { + it("onClickExpandJupyterNotebookPanel delegates to JupyterPanelService", () => { + const openSpy = vi + .spyOn(TestBed.inject(JupyterPanelService), "openJupyterNotebookPanel") + .mockImplementation(() => {}); + + component.onClickExpandJupyterNotebookPanel(); + + expect(openSpy).toHaveBeenCalled(); + }); + + it("shows the expand-jupyter button only when the flag is on and a notebook exists", () => { + const button = () => fixture.nativeElement.querySelector('button[title="Expand Jupyter Notebook"]'); + // commonTestProviders' MockGuiConfigService defaults the flag to false, and no notebook exists. + expect(button()).toBeNull(); + + (TestBed.inject(GuiConfigService) as unknown as MockGuiConfigService).setConfig({ + pythonNotebookMigrationEnabled: true, + }); + fixture.detectChanges(); + // Flag on but the current workflow still has no notebook -> hidden. + expect(button()).toBeNull(); + + (TestBed.inject(JupyterPanelService) as any).jupyterNotebookExists$ = of(true); + fixture.detectChanges(); + // Flag on and a notebook exists -> shown. + expect(button()).not.toBeNull(); + }); + }); + describe("getRunButtonBehavior", () => { it("returns 'Invalid Workflow' when the workflow is invalid", () => { component.isWorkflowValid = false; diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index c172148a95b..9e285bb0ce8 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -628,6 +628,19 @@ export class MenuComponent implements OnInit, OnDestroy { return this.config.env.pythonNotebookMigrationEnabled; } + // Emits whether the current workflow has an associated Jupyter notebook, used to + // show the expand button only when there is a notebook to expand. + public get jupyterNotebookExists$() { + return this.jupyterPanelService.jupyterNotebookExists$; + } + + /** + * Expand and redisplay the Jupyter notebook panel. + */ + public onClickExpandJupyterNotebookPanel(): void { + this.jupyterPanelService.openJupyterNotebookPanel(); + } + openImportNotebookModal(): void { const models$ = this.notebookMigrationService.getAvailableModels().pipe( tap({ diff --git a/frontend/src/assets/notebook_migration_tool/jupyter-logo.svg b/frontend/src/assets/notebook_migration_tool/jupyter-logo.svg new file mode 100644 index 00000000000..4a63571eb56 --- /dev/null +++ b/frontend/src/assets/notebook_migration_tool/jupyter-logo.svg @@ -0,0 +1,42 @@ + +logo-8.svg +Created using Figma 0.90 + + + + + + + + + + + From 350a20572a3b93125c530e48e9a13fee28724feb Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 24 Jul 2026 13:55:34 -0700 Subject: [PATCH 05/36] formatting --- .../app/workspace/component/workspace.component.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/workspace/component/workspace.component.html b/frontend/src/app/workspace/component/workspace.component.html index b9efccc96f9..989b8f3c5e2 100644 --- a/frontend/src/app/workspace/component/workspace.component.html +++ b/frontend/src/app/workspace/component/workspace.component.html @@ -30,12 +30,12 @@ [nzSpinning]="isWaitingForLLM"> @if (isWaitingForLLM) { -
-
Waiting for LLM response...
-
Estimated time 1-3 minutes
-
Do not close this tab
-
Elapsed time: {{ formattedElapsedTime }}
-
+
+
Waiting for LLM response...
+
Estimated time 1-3 minutes
+
Do not close this tab
+
Elapsed time: {{ formattedElapsedTime }}
+
}
From 809f996c232b097b85ed697d6ed28be7c293d88f Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:33:20 -0700 Subject: [PATCH 06/36] clear LLM spinner on notebook read and pre-generation errors --- frontend/src/app/workspace/component/menu/menu.component.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 9e285bb0ce8..1d07a05ad6f 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -796,9 +796,15 @@ export class MenuComponent implements OnInit, OnDestroy { } catch (error) { this.notificationService.error("Failed to import the notebook."); console.error(error); + this.setWaitingForLLM.emit(false); } }; + reader.onerror = () => { + this.notificationService.error("Failed to read the notebook file."); + this.setWaitingForLLM.emit(false); + }; + return false; // Prevent automatic upload handling }; From 3a8aa2bd9efaf5c029e1e988025c0972869e70c4 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:42:05 -0700 Subject: [PATCH 07/36] clear LLM spinner only after workflow persist pipeline settles --- frontend/src/app/workspace/component/menu/menu.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 1d07a05ad6f..6904cc56cdb 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -777,6 +777,7 @@ export class MenuComponent implements OnInit, OnDestroy { error: (err: unknown) => { this.notificationService.error("Failed to import notebook, check console for detailed error"); console.error("Import notebook failed:", err); + this.setWaitingForLLM.emit(false); }, complete: () => { this.setWaitingForLLM.emit(false); @@ -784,14 +785,13 @@ export class MenuComponent implements OnInit, OnDestroy { }); } else { console.error("Result is undefined"); + this.setWaitingForLLM.emit(false); } }) .catch(error => { this.notificationService.error("Error while communicating with LLM, check console for details"); console.error("Error while fetching data from LLM: ", error); - }) - .finally(() => { - this.setWaitingForLLM.emit(false); // stop loading + this.setWaitingForLLM.emit(false); }); } catch (error) { this.notificationService.error("Failed to import the notebook."); From 3ed3c221bdd8d4d79b60105b2a998197813dad7b Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:47:31 -0700 Subject: [PATCH 08/36] stop elapsed-time timer on workspace destroy --- frontend/src/app/workspace/component/workspace.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/workspace/component/workspace.component.ts b/frontend/src/app/workspace/component/workspace.component.ts index 47bfec81655..62ba5a40f8b 100644 --- a/frontend/src/app/workspace/component/workspace.component.ts +++ b/frontend/src/app/workspace/component/workspace.component.ts @@ -205,6 +205,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { // re-entered workflow starts clean instead of reusing the previous one. this.computingUnitStatusService.disconnect(); this.resetWorkflowSessionState(); + this.stopTimer(); } /** From eda133706625fd2de33a4656c80deb94ac725665 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:50:19 -0700 Subject: [PATCH 09/36] show no-models state instead of empty model dropdown on fetch failure --- .../src/app/workspace/component/menu/menu.component.html | 7 +++++++ .../src/app/workspace/component/menu/menu.component.ts | 6 +----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index 8eab9537997..a5a71c75f58 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -553,6 +553,7 @@ @@ -561,6 +562,12 @@ [nzValue]="model.name" [nzLabel]="model.name"> + + + diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 6904cc56cdb..bd9d76c29c7 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -642,11 +642,7 @@ export class MenuComponent implements OnInit, OnDestroy { } openImportNotebookModal(): void { - const models$ = this.notebookMigrationService.getAvailableModels().pipe( - tap({ - error: () => this.notificationService.error("Failed to fetch models"), - }) - ); + const models$ = this.notebookMigrationService.getAvailableModels(); const modalRef = this.modal.create({ nzTitle: "AI Generate Workflow from Python Notebook", From 8cd5afa3c9c69085a9a887a1bd65ce41e6085d52 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:51:47 -0700 Subject: [PATCH 10/36] require model selection before submitting notebook import --- frontend/src/app/workspace/component/menu/menu.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index bd9d76c29c7..5090529227e 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -252,7 +252,7 @@ export class MenuComponent implements OnInit, OnDestroy { this.importForm = this.fb.group({ description: [""], file: [null, Validators.required], - model: [""], + model: ["", Validators.required], }); } From 07f3213df0e04e3c32310e97dc61204f58e6f51e Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:55:24 -0700 Subject: [PATCH 11/36] reuse existing ChangeDetectorRef in workspace timer --- frontend/src/app/workspace/component/workspace.component.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/workspace/component/workspace.component.ts b/frontend/src/app/workspace/component/workspace.component.ts index 62ba5a40f8b..f16899af6f2 100644 --- a/frontend/src/app/workspace/component/workspace.component.ts +++ b/frontend/src/app/workspace/component/workspace.component.ts @@ -136,8 +136,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { private changeDetectorRef: ChangeDetectorRef, private computingUnitStatusService: ComputingUnitStatusService, private executeWorkflowService: ExecuteWorkflowService, - private workflowResultService: WorkflowResultService, - private cdRef: ChangeDetectorRef + private workflowResultService: WorkflowResultService ) {} ngOnInit() { @@ -389,7 +388,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { } updateElapsedTime() { - this.cdRef.detectChanges(); + this.changeDetectorRef.detectChanges(); } get formattedElapsedTime(): string { From f8ca5428ccbe2f6bfbc6b4a7caa40635f95be47e Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:57:17 -0700 Subject: [PATCH 12/36] notify user when notebook generation returns no workflow --- frontend/src/app/workspace/component/menu/menu.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 5090529227e..ad606c200a8 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -780,6 +780,7 @@ export class MenuComponent implements OnInit, OnDestroy { }, }); } else { + this.notificationService.error("No workflow was generated from the notebook."); console.error("Result is undefined"); this.setWaitingForLLM.emit(false); } From 0875a7862075ac3d18b523dc87a0174cabd90d69 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 13:59:18 -0700 Subject: [PATCH 13/36] use let instead of var for workflowName --- frontend/src/app/workspace/component/menu/menu.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index ad606c200a8..73017b1b27a 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -729,7 +729,7 @@ export class MenuComponent implements OnInit, OnDestroy { const { workflowContent, mappingContent } = result; const fileExtensionIndex = file.name.lastIndexOf("."); - var workflowName: string; + let workflowName: string; if (fileExtensionIndex === -1) { workflowName = file.name; } else { From f7ca73d4d26d697843292fa969e81c9984d2aa7c Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 14:01:51 -0700 Subject: [PATCH 14/36] type timerInterval and guard clearInterval against null --- frontend/src/app/workspace/component/workspace.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/workspace/component/workspace.component.ts b/frontend/src/app/workspace/component/workspace.component.ts index f16899af6f2..3ef0d4d3730 100644 --- a/frontend/src/app/workspace/component/workspace.component.ts +++ b/frontend/src/app/workspace/component/workspace.component.ts @@ -95,7 +95,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { public isLoading: boolean = false; // variable to track whether we are waiting for AI to finish generating (whether a loading icon should show) public isWaitingForLLM = false; - private timerInterval: any; + private timerInterval: ReturnType | null = null; private startTime: number | null = null; @ViewChild("codeEditor", { read: ViewContainerRef }) codeEditorViewRef!: ViewContainerRef; @@ -382,7 +382,9 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { } stopTimer() { - clearInterval(this.timerInterval); + if (this.timerInterval !== null) { + clearInterval(this.timerInterval); + } this.timerInterval = null; this.startTime = null; } From 0b5ee0439e2a97bad3928272e735d284f4bf5d5b Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 14:03:25 -0700 Subject: [PATCH 15/36] remove unused description control from notebook import form --- frontend/src/app/workspace/component/menu/menu.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 73017b1b27a..bb76df02c2a 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -250,7 +250,6 @@ export class MenuComponent implements OnInit, OnDestroy { this.subscribeToComputingUnitStatus(); this.importForm = this.fb.group({ - description: [""], file: [null, Validators.required], model: ["", Validators.required], }); From bb68d62a87780441523a0a6d33bd4b8e16f7fb76 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 14:05:42 -0700 Subject: [PATCH 16/36] make elapsed-time default match single-digit minute format --- frontend/src/app/workspace/component/workspace.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/workspace.component.ts b/frontend/src/app/workspace/component/workspace.component.ts index 3ef0d4d3730..8e0b94e7590 100644 --- a/frontend/src/app/workspace/component/workspace.component.ts +++ b/frontend/src/app/workspace/component/workspace.component.ts @@ -394,7 +394,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { } get formattedElapsedTime(): string { - if (!this.startTime) return "00:00"; + if (!this.startTime) return "0:00"; const diff = Date.now() - this.startTime; const minutes = Math.floor(diff / 60000); const seconds = Math.floor((diff % 60000) / 1000); From 1419ec548e39744bc6d053e19da103792bc6bcef Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 14:11:54 -0700 Subject: [PATCH 17/36] move notebook import modal inline styles into scss classes --- .../component/menu/menu.component.html | 41 ++++++---------- .../component/menu/menu.component.scss | 48 +++++++++++++++++++ 2 files changed, 63 insertions(+), 26 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index a5a71c75f58..c612946ec7e 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -483,38 +483,29 @@
-
+
Notebook to Workflow + height="479" />
-

+

This tool converts a Python Jupyter Notebook into a Texera workflow using LLM capabilities. After you submit a notebook, the LLM service will generate a corresponding Texera workflow. The conversion time depends on the notebook’s complexity and can take 1–5 minutes. Once the process is complete, the workflow workspace will reload with:

-
    +
    1. The generated workflow ready to use (Note: you will still need to upload the dataset and connect it to the workflow).
    2. A floating Jupyter window containing the uploaded notebook for reference.
    -

    +

    Feel free to navigate away from this tab while you wait for the workflow to generate. Please do not close the window.

    @@ -522,16 +513,14 @@ - Upload Python Jupyter Notebook + Upload Python Jupyter Notebook -
    +
    -
    + +

    This tool converts a Python Jupyter Notebook into a Texera workflow using LLM capabilities. After you submit a diff --git a/frontend/src/app/workspace/component/menu/menu.component.scss b/frontend/src/app/workspace/component/menu/menu.component.scss index d567972c67d..2fffeb8e369 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.scss +++ b/frontend/src/app/workspace/component/menu/menu.component.scss @@ -243,4 +243,9 @@ texera-coeditor-user-icon { &-select { width: 50%; } + + &-warning { + display: block; + margin-bottom: 12px; + } } diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts b/frontend/src/app/workspace/component/menu/menu.component.spec.ts index c29fe7a7c9b..84d4089fe05 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts @@ -49,7 +49,7 @@ import type { ComputingUnitSelectionComponent } from "../power-button/computing- import { WorkflowContent } from "../../../common/type/workflow"; import { Router } from "@angular/router"; import { ReportGenerationService } from "../../service/report-generation/report-generation.service"; -import { USER_WORKFLOW } from "../../../app-routing.constant"; +import { USER_WORKFLOW, USER_WORKSPACE } from "../../../app-routing.constant"; import { JupyterPanelService } from "../../service/jupyter-panel/jupyter-panel.service"; import { NotebookMigrationService } from "../../service/notebook-migration/notebook-migration.service"; import { NzUploadFile } from "ng-zorro-antd/upload"; @@ -922,6 +922,50 @@ describe("MenuComponent", () => { expect(notebookMigrationService.getAvailableModels).toHaveBeenCalledTimes(1); }); + // Opens the modal, returns its Submit button's onClick and the modal ref so tests can + // drive the submit path (which is where the overwrite confirmation lives). + function openModalAndGetSubmit(): { submit: () => void; modalRef: NzModalRef } { + vi.spyOn(notebookMigrationService, "getAvailableModels").mockReturnValue(of([])); + const modalRef = { close: vi.fn() } as unknown as NzModalRef; + const createSpy = vi.spyOn(modalService, "create").mockReturnValue(modalRef); + component.openImportNotebookModal(); + const config = createSpy.mock.calls[0][0] as ModalOptions; + const submit = (config.nzFooter as { label: string; onClick: () => void }[]).find(b => b.label === "Submit")!; + return { submit: submit.onClick, modalRef }; + } + + it("Submit imports directly (no confirmation) when the current workflow is empty", () => { + const importSpy = vi.spyOn(component, "onClickImportNotebook").mockReturnValue(false); + const confirmSpy = vi.spyOn(modalService, "confirm").mockImplementation(() => ({}) as NzModalRef); + + const { submit, modalRef } = openModalAndGetSubmit(); + submit(); + + expect(confirmSpy).not.toHaveBeenCalled(); + expect(importSpy).toHaveBeenCalledTimes(1); + expect(modalRef.close).toHaveBeenCalled(); + }); + + it("Submit confirms before overwriting a non-empty workflow, and imports only on confirm", () => { + workflowActionService.addOperator(mockScanPredicate, mockPoint); + const importSpy = vi.spyOn(component, "onClickImportNotebook").mockReturnValue(false); + const confirmSpy = vi.spyOn(modalService, "confirm").mockImplementation(() => ({}) as NzModalRef); + + const { submit, modalRef } = openModalAndGetSubmit(); + submit(); + + // Confirmation is shown; the import has not started and the modal is still open. + expect(confirmSpy).toHaveBeenCalledTimes(1); + expect(importSpy).not.toHaveBeenCalled(); + expect(modalRef.close).not.toHaveBeenCalled(); + + // Confirming ("Overwrite") starts the import and closes the modal. + const confirmConfig = confirmSpy.mock.calls[0][0] as { nzOnOk: () => void }; + confirmConfig.nzOnOk(); + expect(importSpy).toHaveBeenCalledTimes(1); + expect(modalRef.close).toHaveBeenCalled(); + }); + it("beforeUpload stores the file on the form and prevents auto-upload", () => { const file = { name: "x.ipynb" } as NzUploadFile; @@ -942,46 +986,10 @@ describe("MenuComponent", () => { expect(emitSpy).not.toHaveBeenCalledWith(true); }); - it("on success: reloads the workflow, opens the jupyter panel, and toggles the loading flag on then off", async () => { - const persistedWorkflow = { - wid: 99, - name: "my_nb_GENERATED_BY_LLM", - content: { operators: [], links: [], commentBoxes: [], settings: {} } as unknown as WorkflowContent, - isPublished: 0, - readonly: false, - } as any; - - vi.spyOn(notebookMigrationService, "sendNotebookToJupyter").mockResolvedValue(undefined as any); - vi.spyOn(notebookMigrationService, "sendToAIGenerateWorkflow").mockResolvedValue({ - workflowContent: persistedWorkflow.content, - mappingContent: { some: "mapping" } as any, - }); - vi.spyOn(notebookMigrationService, "setMapping").mockImplementation(() => {}); - vi.spyOn(notebookMigrationService, "storeNotebookAndMapping").mockReturnValue( - of({ success: true, message: "ok" }) as any - ); - vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of(persistedWorkflow)); - const reloadSpy = vi.spyOn(workflowActionService, "reloadWorkflow").mockImplementation(() => {}); - // openPanel (not openJupyterNotebookPanel) is used deliberately: reloadWorkflow's - // synchronous wid-change handler deletes the just-stored mapping, so the hasMapping - // gate in openJupyterNotebookPanel would spuriously fail. See the component comment. - const openPanelSpy = vi.spyOn(jupyterPanelService, "openPanel").mockImplementation(() => {}); - const successSpy = vi.spyOn(notificationService, "success").mockImplementation(() => {}); - const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); - - component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); - - await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); - - expect(emitSpy).toHaveBeenCalledWith(true); - expect(reloadSpy).toHaveBeenCalledWith(persistedWorkflow, true); - expect(openPanelSpy).toHaveBeenCalledWith("JupyterNotebookPanel"); - expect(successSpy).toHaveBeenCalled(); - }); - - // The guarded wid reuse avoids leaving the empty "Untitled workflow" behind as - // a duplicate: an empty current workflow is overwritten in place, while a - // non-empty one is preserved and the generated workflow is created separately. + // Import always overwrites the current workflow: it reuses the current wid so + // persistWorkflow updates that row in place. When the current workflow was never + // saved (no wid) a new row is created and the wid changes, which routes the notebook + // send + panel open through JupyterPanelService.init() instead of doing it here. function stubGenerationServices() { vi.spyOn(notebookMigrationService, "sendNotebookToJupyter").mockResolvedValue(undefined as any); vi.spyOn(notebookMigrationService, "sendToAIGenerateWorkflow").mockResolvedValue({ @@ -993,11 +1001,13 @@ describe("MenuComponent", () => { vi.spyOn(workflowActionService, "reloadWorkflow").mockImplementation(() => {}); vi.spyOn(jupyterPanelService, "openPanel").mockImplementation(() => {}); vi.spyOn(notificationService, "success").mockImplementation(() => {}); + // The new-row branch updates the URL via Location.go; stub it out. + vi.spyOn(location, "go").mockImplementation(() => {}); } - it("reuses the current workflow's wid (overwrite in place) when the current workflow is empty", async () => { + it("overwrites the saved current workflow in place, reloads it, and opens the panel itself", async () => { stubGenerationServices(); - // Empty graph (no operators/comment boxes) + an existing wid -> overwrite it. + // Saved current workflow (wid 7); persist keeps the same wid, so the wid does not change. vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: 7 } as any); const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 7 } as any)); const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); @@ -1005,21 +1015,35 @@ describe("MenuComponent", () => { component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); - expect(persistSpy).toHaveBeenCalledTimes(1); + expect(emitSpy).toHaveBeenCalledWith(true); + // Reuses the current wid so the row is overwritten in place, and reloads on the live canvas. expect(persistSpy.mock.calls[0][0].wid).toBe(7); + expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 7 }, true); + // wid unchanged: we send the notebook + open the panel ourselves (init() does not react). + expect(notebookMigrationService.sendNotebookToJupyter).toHaveBeenCalled(); + expect(jupyterPanelService.openPanel).toHaveBeenCalledWith("JupyterNotebookPanel"); + // Stayed on the same workflow, so the URL is not changed. + expect(location.go).not.toHaveBeenCalled(); }); - it("creates a new workflow (undefined wid) when the current workflow has operators", async () => { + it("creates a new row and points the URL at it when the current workflow was never saved", async () => { stubGenerationServices(); - workflowActionService.addOperator(mockScanPredicate, mockPoint); + // Current workflow has no wid; persist returns a new wid, so the wid changes. + vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: undefined } as any); const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 99 } as any)); const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); - expect(persistSpy).toHaveBeenCalledTimes(1); + // No current wid -> the backend inserts a new row. expect(persistSpy.mock.calls[0][0].wid).toBeUndefined(); + expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 99 }, true); + expect(location.go).toHaveBeenCalledWith(`${USER_WORKSPACE}/99`); + // wid changed: JupyterPanelService.init() sends the notebook + opens the panel, not us, + // so the "sent to Jupyter" toast fires only once. + expect(notebookMigrationService.sendNotebookToJupyter).not.toHaveBeenCalled(); + expect(jupyterPanelService.openPanel).not.toHaveBeenCalled(); }); it("on LLM error: surfaces an error notification and clears the loading flag", async () => { diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index cc40bfa9d8b..0ad426fd5e0 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -62,7 +62,7 @@ import { ResultExportationComponent } from "../result-exportation/result-exporta import { ReportGenerationService } from "../../service/report-generation/report-generation.service"; import { ShareAccessComponent } from "src/app/dashboard/component/user/share-access/share-access.component"; import { PanelService } from "../../service/panel/panel.service"; -import { USER_WORKFLOW } from "../../../app-routing.constant"; +import { USER_WORKFLOW, USER_WORKSPACE } from "../../../app-routing.constant"; import { ComputingUnitStatusService } from "../../../common/service/computing-unit/computing-unit-status/computing-unit-status.service"; import { ComputingUnitState } from "../../../common/type/computing-unit-connection.interface"; import { ComputingUnitSelectionComponent } from "../power-button/computing-unit-selection.component"; @@ -92,6 +92,7 @@ import { Notebook } from "../../service/notebook-migration/migration-llm"; import { NotebookMigrationService } from "../../service/notebook-migration/notebook-migration.service"; import { NzFormModule } from "ng-zorro-antd/form"; import { NzSelectModule } from "ng-zorro-antd/select"; +import { NzAlertModule } from "ng-zorro-antd/alert"; import { ReactiveFormsModule } from "@angular/forms"; /** @@ -144,6 +145,7 @@ import { ReactiveFormsModule } from "@angular/forms"; NzFormModule, AsyncPipe, NzSelectModule, + NzAlertModule, ReactiveFormsModule, NgOptimizedImage, ], @@ -665,8 +667,28 @@ export class MenuComponent implements OnInit, OnDestroy { onClick: () => { const file: NzUploadFile = this.importForm.get("file")?.value; const model: string = this.importForm.get("model")?.value; - this.onClickImportNotebook(file, model); - modalRef.close(); // close after submit too + const startImport = () => { + this.onClickImportNotebook(file, model); + modalRef.close(); + }; + // Generating overwrites the currently open workflow. Confirm first only when + // there is actual content to replace; a fresh empty workflow needs no prompt. + const graph = this.workflowActionService.getTexeraGraph(); + const currentWorkflowHasContent = + graph.getAllOperators().length > 0 || graph.getAllCommentBoxes().length > 0; + if (currentWorkflowHasContent) { + this.modal.confirm({ + nzTitle: "Overwrite current workflow?", + nzContent: + "Generating will replace the contents of the workflow you have open. " + + "The previous version is kept in this workflow's version history.", + nzOkText: "Overwrite", + nzOkDanger: true, + nzOnOk: startImport, + }); + } else { + startImport(); + } }, }, ], @@ -717,9 +739,6 @@ export class MenuComponent implements OnInit, OnDestroy { cell.metadata.uuid = uuidv4(); } - // Send Notebook JSON to pod to open in jupyterlab - await this.notebookMigrationService.sendNotebookToJupyter(notebookContent); - // Get workflow and mapping from LLM await this.notebookMigrationService .sendToAIGenerateWorkflow(notebookContent, model) @@ -738,17 +757,12 @@ export class MenuComponent implements OnInit, OnDestroy { workflowName = DEFAULT_WORKFLOW_NAME; } - // Overwrite the current workflow only when it is empty (the common - // case: a freshly opened "Untitled workflow"). Reusing its wid makes - // persistWorkflow update that row in place instead of inserting a new - // one, which would otherwise leave the empty workflow behind as a - // duplicate. If the current workflow has any content, keep wid - // undefined so the generated workflow is created separately and the - // user's existing work is not clobbered. - const currentGraph = this.workflowActionService.getTexeraGraph(); - const currentWorkflowEmpty = - currentGraph.getAllOperators().length === 0 && currentGraph.getAllCommentBoxes().length === 0; - const reuseWid = currentWorkflowEmpty ? this.workflowActionService.getWorkflow().wid : undefined; + // Always overwrite the current workflow: reuse its wid so persistWorkflow + // updates that row in place instead of inserting a new one (which would leave + // a duplicate behind). Read it now, after generation, so a wid assigned by + // auto-persist during the wait is picked up. If the current workflow was never + // saved, wid is undefined and a new row is created (there is nothing to overwrite). + const reuseWid = this.workflowActionService.getWorkflow().wid; const workflow: Workflow = { content: workflowContent, @@ -777,14 +791,27 @@ export class MenuComponent implements OnInit, OnDestroy { ) .subscribe({ next: updatedWorkflow => { - this.workflowActionService.reloadWorkflow(updatedWorkflow, true); - // Use openPanel, not openJupyterNotebookPanel, here on purpose: reloadWorkflow - // above changes the wid, and JupyterPanelService.init()'s synchronous - // wid-change handler runs closeJupyterNotebookPanel(), which deletes the - // mapping we just stored. openJupyterNotebookPanel() gates on hasMapping and - // would therefore fail with a spurious warning; openPanel opens unconditionally. - this.jupyterPanelService.openPanel("JupyterNotebookPanel"); this.notificationService.success("Successfully generated workflow and mapping from notebook."); + // Reload the generated workflow onto the current (already live) canvas so it + // renders immediately; we never remount the workspace. + this.workflowActionService.reloadWorkflow(updatedWorkflow, true); + if (reuseWid === updatedWorkflow.wid) { + // Overwrote the current workflow in place: the wid did not change, so + // JupyterPanelService.init() does not react. Send the notebook to Jupyter + // and open the panel ourselves. Use openPanel, not openJupyterNotebookPanel: + // init()'s wid-change handler is not involved and openPanel opens + // unconditionally without the hasMapping gate. + this.notebookMigrationService + .sendNotebookToJupyter(notebookContent) + .then(() => this.jupyterPanelService.openPanel("JupyterNotebookPanel")); + } else { + // The current workflow had never been saved, so a new row was created and the + // wid changed. reloadWorkflow's synchronous wid change drives init() to fetch + // the stored notebook/mapping, send it to Jupyter, and open the panel, so we + // do not do that here (doing so would double the "sent to Jupyter" toast). + // Point the URL at the generated workflow. + this.location.go(`${USER_WORKSPACE}/${updatedWorkflow.wid}`); + } }, error: (err: unknown) => { this.notificationService.error("Failed to import notebook, check console for detailed error"); From d2c22315675d6fa8ccc48fee76b3e88b1cfde924 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 28 Jul 2026 16:05:40 -0700 Subject: [PATCH 24/36] refine notebook import modal layout --- .../component/menu/menu.component.html | 4 ++-- .../component/menu/menu.component.scss | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index aec22d236b3..514021bb2c2 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -481,6 +481,7 @@ #importNotebookModal let-data>

    @@ -495,8 +496,7 @@ class="import-modal-warning" nzType="warning" nzShowIcon - nzMessage="This replaces your current workflow" - nzDescription="Generating will overwrite the contents of the workflow you have open. The previous version is kept in this workflow's version history."> + nzMessage="Generating overwrites your current workflow; the previous version is kept in version history.">

    diff --git a/frontend/src/app/workspace/component/menu/menu.component.scss b/frontend/src/app/workspace/component/menu/menu.component.scss index 2fffeb8e369..2bbc4ffc58b 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.scss +++ b/frontend/src/app/workspace/component/menu/menu.component.scss @@ -198,6 +198,11 @@ texera-coeditor-user-icon { } .import-modal { + // Tighten the default form-item spacing so the modal fits without scrolling. + &-form nz-form-item { + margin-bottom: 12px; + } + &-diagram { text-align: center; margin-bottom: 12px; @@ -211,23 +216,24 @@ texera-coeditor-user-icon { &-text { margin: 0; - font-size: 16px; + font-size: 15px; + line-height: 1.4; font-weight: 500; user-select: text; } &-list { - margin-top: 4px; - margin-bottom: 0; + margin: 4px 0 0; padding-left: 20px; - font-size: 16px; + font-size: 15px; + line-height: 1.4; font-weight: 500; user-select: text; } &-label { - font-size: 16px; - font-weight: 900; + font-size: 14px; + font-weight: 700; } &-upload-row { From 8493f972989536eec7603a2f3172396411afdcc0 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 31 Jul 2026 14:29:12 -0700 Subject: [PATCH 25/36] auto layout generated workflow after notebook import --- .../app/workspace/component/menu/menu.component.spec.ts | 9 ++++++--- .../src/app/workspace/component/menu/menu.component.ts | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts b/frontend/src/app/workspace/component/menu/menu.component.spec.ts index 84d4089fe05..b8e37428b2a 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts @@ -1010,15 +1010,18 @@ describe("MenuComponent", () => { // Saved current workflow (wid 7); persist keeps the same wid, so the wid does not change. vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: 7 } as any); const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 7 } as any)); + const autoLayoutSpy = vi.spyOn(component, "onClickAutoLayout").mockImplementation(() => {}); const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); expect(emitSpy).toHaveBeenCalledWith(true); - // Reuses the current wid so the row is overwritten in place, and reloads on the live canvas. + // Reuses the current wid so the row is overwritten in place; reloads synchronously on the + // live canvas and tidies the layout. expect(persistSpy.mock.calls[0][0].wid).toBe(7); - expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 7 }, true); + expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 7 }, false); + expect(autoLayoutSpy).toHaveBeenCalled(); // wid unchanged: we send the notebook + open the panel ourselves (init() does not react). expect(notebookMigrationService.sendNotebookToJupyter).toHaveBeenCalled(); expect(jupyterPanelService.openPanel).toHaveBeenCalledWith("JupyterNotebookPanel"); @@ -1038,7 +1041,7 @@ describe("MenuComponent", () => { // No current wid -> the backend inserts a new row. expect(persistSpy.mock.calls[0][0].wid).toBeUndefined(); - expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 99 }, true); + expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 99 }, false); expect(location.go).toHaveBeenCalledWith(`${USER_WORKSPACE}/99`); // wid changed: JupyterPanelService.init() sends the notebook + opens the panel, not us, // so the "sent to Jupyter" toast fires only once. diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 0ad426fd5e0..bdf7ccdde76 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -793,8 +793,11 @@ export class MenuComponent implements OnInit, OnDestroy { next: updatedWorkflow => { this.notificationService.success("Successfully generated workflow and mapping from notebook."); // Reload the generated workflow onto the current (already live) canvas so it - // renders immediately; we never remount the workspace. - this.workflowActionService.reloadWorkflow(updatedWorkflow, true); + // renders immediately; we never remount the workspace. Render synchronously + // (asyncRendering = false) so the operators exist before auto-layout runs. + this.workflowActionService.reloadWorkflow(updatedWorkflow, false); + // Tidy the LLM-generated layout; the position changes get auto-persisted. + this.onClickAutoLayout(); if (reuseWid === updatedWorkflow.wid) { // Overwrote the current workflow in place: the wid did not change, so // JupyterPanelService.init() does not react. Send the notebook to Jupyter From 672feb2b749d0be5bd2850884926af4ea4d3365c Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 31 Jul 2026 15:11:47 -0700 Subject: [PATCH 26/36] register jupyter panel component in workspace imports and drop duplicate panel element --- frontend/src/app/workspace/component/workspace.component.html | 1 - frontend/src/app/workspace/component/workspace.component.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/workspace.component.html b/frontend/src/app/workspace/component/workspace.component.html index e264c27b819..5a8ff99a526 100644 --- a/frontend/src/app/workspace/component/workspace.component.html +++ b/frontend/src/app/workspace/component/workspace.component.html @@ -47,7 +47,6 @@ [pid]="pid" (setWaitingForLLM)="onWaitingForLLMChanged($event)"> - Date: Fri, 31 Jul 2026 15:26:15 -0700 Subject: [PATCH 27/36] add jupyter logo license header exclude and license-binary attribution --- .licenserc.yaml | 1 + frontend/LICENSE-binary | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.licenserc.yaml b/.licenserc.yaml index 4ce2a448843..a9fcde7e3b9 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -51,6 +51,7 @@ header: - 'frontend/src/assets/svg/operator-view-result.svg' - 'frontend/src/assets/svg/operator-reuse-cache-invalid.svg' - 'frontend/src/assets/svg/operator-reuse-cache-valid.svg' + - 'frontend/src/assets/notebook_migration_tool/jupyter-logo.svg' - 'frontend/src/app/common/type/proto/org/apache/texera/amber/core/virtualidentity.ts' - 'frontend/src/app/common/type/proto/org/apache/texera/amber/core/workflow.ts' - 'frontend/src/app/common/type/proto/google/protobuf/descriptor.ts' diff --git a/frontend/LICENSE-binary b/frontend/LICENSE-binary index 59a2701336e..b1ebc338a4b 100644 --- a/frontend/LICENSE-binary +++ b/frontend/LICENSE-binary @@ -358,6 +358,11 @@ Angular / npm packages: - parchment@3.0.0 - quill@2.0.3 +Third-party assets: + - Project Jupyter logo + frontend/src/assets/notebook_migration_tool/jupyter-logo.svg + https://github.com/jupyter/design + -------------------------------------------------------------------------------- Dependencies under the ISC License -------------------------------------------------------------------------------- From bb929a879f66510e7e199e6fcb64756dad640430 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Fri, 31 Jul 2026 15:50:39 -0700 Subject: [PATCH 28/36] attribute material symbols icons and colored jupyter logo used in the import diagram --- frontend/LICENSE-binary | 6 ++++++ .../tool_popup_diagram.png | Bin 119292 -> 61744 bytes 2 files changed, 6 insertions(+) diff --git a/frontend/LICENSE-binary b/frontend/LICENSE-binary index b1ebc338a4b..bb7bde31bf3 100644 --- a/frontend/LICENSE-binary +++ b/frontend/LICENSE-binary @@ -224,6 +224,11 @@ Angular / npm packages: - jschardet@3.1.3 - rxjs@7.8.2 +Third-party assets: + - Google Material Symbols icons (psychology, smart_toy) + frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png + https://github.com/google/material-design-icons + -------------------------------------------------------------------------------- Dependencies under the MIT License -------------------------------------------------------------------------------- @@ -361,6 +366,7 @@ Angular / npm packages: Third-party assets: - Project Jupyter logo frontend/src/assets/notebook_migration_tool/jupyter-logo.svg + frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png https://github.com/jupyter/design -------------------------------------------------------------------------------- diff --git a/frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png b/frontend/src/assets/notebook_migration_tool/tool_popup_diagram.png index 438cebc88c9585245470182c85afa37031c1658e..d17ed923fd95ee893b391ee266024f5403acd0c3 100644 GIT binary patch literal 61744 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%0D5+Dg=axj3R5al%fY)6b`5?Ux%AvZi zouMq4KNm6?H9ow9=dQm!#%%nc!rwkN~P400yobMi%Zdqy|ev z9UWS`Y&sH_bj6i{Y;Dfk$q;_|0G6d^1UYX;M#dq>%CYO{7R7epD3NdXRyiPMx;*l= zcGP+U0**>TpOz2s7H7sKe*&1T!Q3#TRGX^VtORrEBCVyiKQiKE&1B*ThH&i4?0X6= zq{+qP@-K{ESJO}SLwMfaccW-8B{u=|-!(uUSd-40Xd;0YEUAc#^eM|x6s;_d`Q%|9 zc${5txcO1O7Ha>taZ29?!CB=P1(FsKK(2bvsak3fxNGo`MU+p>_^2bPC~)&d$jtMJ z9k`=xtof7`Petux53`80guSBdx2e4Y4*ctb_GtrNBs?YX@FNUs?;sx>Ji<|DP<(pW zIQ<5P_e?5YbPFYcP#*lI^!t&eKmCkM1C)Y7eGf50U+;m)^l1t9xxs4@qR2aKd_q9$ zK@3)o!*A*WDOA2`x!o#+W8;-4E1kos zr0Q|SD~1}8aMz^)1a3^9w@7evG0eAH{|}jjEIHohaOE8y{G?3nux(igL1$W5#8LG{ z(b%n#4o%(O2dO|e@TPHvN~jKJlk9b!N1_7o&{%JaDc;&!SG`RM2|>THvM5&8DyM1dOF_q@tuTApp5#yz&bw zk5=+T*lpIoeN6qjRMx8{c(V-rfGS|PyEYxzdJ305dJa$?ziYX^OSid9dC)O>_j9=P z;ETmbx5l(_^ZlHLdo|KE71jyW*!C**(4YA1N%x znOyC|S4JeF?p3vA(g#r%8<5ey2Jez(6kdQ;YxN0sWmP3>ri=1SA}zX~BEjBG<7QtD ziGa>i;?`DLs300?PY457rKalv3-U(Ud4t?EvbOR8OI9Dx#$T(h)i();0`shqUxmj= zeeMb`SeELB%k2{$OCAb+e8R^XOtVy8%eggxzGU0-!oLs80-1Y>8{2d`hWh6}Oa8Zn z4oA{R&ll?)DYMfp!!vT-P>T$=9o9LW3F2lI2n%c3_}bFxscDqn8R?vi!f1Z00|spA zD%Rmbz3gz?z8u^J9O1y)R7Y;g!YhrwM8PUohz=a`_%&;m+D7fc@MKvT@j8j#qQHJ( zxZJlCnDXu}BX}di2x2)QS!S8i$#WOxekl0+Yx>^qyueM;8GFNmANukLq=CrtYkmOZ zbK|nByHkHCn`t&;7uu2!9?2dv)MA_t>{jPj&%wV6Cl_JqNGIzC6dW6LgQu5OkL5SN zLlLr@_+GbMw@gU0r~cIz7L|(+{^q9C?sceWjns~0pS=2HkukA>!I6#4Hscx;DlR7| z25K#98m(;DWgJEZNFZDWU*+iB|7S#dV>_idQS~WYSm0|x+9MIQbNOtdd}`=?Ot_Kv z&$$?}!HM$F22$3DWIpxclb~u^@rX@5C;L5mj{w{UW_E4n;_mYwtr<1LmR;IsOiOtA z@eCdvZd_jPWyeIJ0ga_*%F<_naX4Z`mtcb?cP6KBnA9i!u8-+Yb^(`$_~vWYk7*Qt zSvD!>iF*B|-#!Txbx}#@CH~4S_Dba z9p!shYx71njJiAb;aWPE0{}k8oqso$ycOf+%%X3H$Wk%gZ5}DsxdwtP(GzVRnZDlDesC-ClCl#>YMIQ z&+>8{?&2xZ%uTa3wT_wjd7g6ll|^a3O{jEpp1OEUoBh!{SE^mC%R=r@B$9DCte^b% zG>~3VGIx~`NfxE0ooRHIplx(m?B=RkjX`pq*o!r&nwJ$htcpkhbl;cJGsbx*ltP(L zh4eQs_~=DVhI_epW0l5g-0Kz0>g{uN-OvVQ-GGUyVDR*z6J?SPjWpT~8A?x|?IT#; z#~}XyTliC5kihCHLJd=`^(Ok{bZEJ}>nMpN>xBdCd zUU2iROcZ}pG;zvTY=!zam3))j6qy6H;|)Q|{S-es@m9@HzWx-9hh>i`}OC*LWqF)M}V6AR!SK;491nq~x$XEt712 z@KPMNKcSy#BuVv+uZe+qj)%5|99z*`T(^F5Nl2C>Zx_8L_5zqMwZMg_kevd#lGI;S zNkHFmLL@}lF&e)P)x>2W;y1GKUP~IWjBDCF&4;!C~2msa&x!+c5m zXbUU%tSiZpt! z@>843lb{;sz74$&<@m`fOLZaM18#q4x?hguGiIm?K4>q}QD9VL>07Fi6~7TSL|g{h zmb@F+JB+w6w_;L4cSAKKHS*pQpMbzfQVAHUkE&CDb!_8OZGb-sSW3 ziy;sf=0+kt&8*+gdw#<)M-GKsp6`=P^|+cGQ?;o)?EToy{-5A$6sPP2Qx54|fo@QbsFcV2_TEnhu7sKQtO&>G zY0LB#R)3DayAtmd9p}Gu@f#G;jeyg8K7QxRSR9*JGR4yVN%&)v(RjPZmew&46KD=U zrs|%oT#A3Mp8H5Br&HZvyv$awm%mlX%dbvXm_%qkI7tvcfwc}_s>viB zmba;zKJC{vpmd`n{Fg`Az+BsTU3Pm7Andk(O#m&bu(`{hMOt2tBITh3|1(V}R&9dE zZ{`o3?2QucYYsjKt8gJ8e;6b3!NhXLsTMr z(UXwH$jHQ0!zaK=0>L?WTH?(@E@tA~ee7Qa5im;mzQAli zO-;=KI^L?kQh4mGOp6*0?7qVK9oA&c6S$}_CdYrjfwm>pf31B7#HGt1l~WjL10uux z*T(0;Cb4#nrz>s^34OC~8dF+LRD);DD$aT&O?2+PZ$f$2qUL?MkyDlf8j;{oh7bLB z7qK)*P#X zTkj<~kF5NA7W&Vsss=?D0JSMAdwl^lxX$3PPnJeH1jLKln*u1hBXo7ILfq&~ZRrXP z>9I`>>yuR3*rp(%1N&@S1M_FVaJER<9Km_zbxL$INulsn`YS648W%Ugqpp95?srIj zK=(hRqhj-%2pJly^N(7HTYgYHimvd1D?fu_a&9k zAPEe6gvOb4?=cZb5#$`im5PB3gY|;vH!sgNduHGPp6rc!;CqB&aZGD|;Q5ubccFBE^nt2k452oa6=fo54;_1+NN_T2cxOD znD@5e@5_c+BZnm}t^DBKE;5(p{OL_UP#fA0m1IJcmS-&~{ScgWEF&E>=!$YPL4#;T zTH47qeZZZJ{t50oNm04@sF90JE4SX;zj5{c$|D-_BCVjz@tf)LnGkFeyjco5vnEj- z!V$O?&Bcp+-Y~5gMI3~JASB&51b*q_2T^1nKTv*G0A9TrWF6{qU3|{q^qiv2QTr~+ z6l&(kLrK@qgKwV-kLf_G;K1o@*A-G0fS5rZZ#N9qf&F+xJ-puuE`i5j6m9X))iU$_ z5@QMljEQdy^Nl}RwpAB<{rEiP7M{Fk=QHV?^eAY_Hi94qUw$@)1K-1V*1f3zzDoxK ze@dy}o`1Yx-=zO5z4+8X3M#3(a{exANfW>*fTB7s-~GE`z4u8X5BwJ+cgLOoePjSN z5;bUrQWE~(2R=(9g+8N2*7oh`KU(2D1L&6%3?2WE2ZqpNaC*8uqlf-o)qh^K=uGUA YeUEZ|*r_2#MFxLVm9!KK<#B}n1BJ0>(*OVf literal 119292 zcmeFYbyQT{`#x*~QX(y-ARx_vbSWSqr6S!OL-!Da0@5LZbVwuJ9U`40HFU!aT|*5F z@E#sN-}OBIzyJPbty!!Y&OT?)-gjKrb>BPWow6+c!zT}K-MWP@FDL!s)~yG2w{G2D zz=_c2JqpY#cQS4w{De3;bM&L1D|mmpDkX`t?T-{p~sTl#k<=*9Q~zyp=xWagi@Ko+>?(E;p2l;Hycn94lpFVj8y0 z+;~sS2kIh;*@IEUlyY?C4_j`Nl1ks(klVBUJojbC2QiPjSeZ{ur6hYZ`{n+;3fb zH$A}kb4yA7@0L^KtkzG^9y>kXCtZ`c#k_#iuatXzr{%h0GKGx_!9&!EJ7`5bn7S2M21$KJ+5!MFxJ|nqwNg4e0 zf&F%o9DBRkf6cx}yxb1Vcn!7Sdy~VrkqlV>^vBW?i1$Wp8=hd1)OoI(?7uEn_4C`I zr@n_TN7%%!+(Ilp7jq0IMe)#?w-+`@Pd#!pKu>?zYg{7hYI}FQI^yF5-v`yx-eP`P z!tLK^X1r`2BRAlFQvbPMq7Yjs8o9-`Kcf6vsOwL&vv_l(d$xNN!O^zvE5V{4fHRAy zYYv!fMY7hAXq4sDefyR=&T&O`G|n3YGSWPaJ>L29Z$z+ih5ts4PVDbuI9RsuxxHVx zGtocxYl4i(*AX{>vXA!_<`{Ve9!)0ug_NFlhM1nT7Il< z$Eu>WQ0RrlM924)lg3#U9tLbfH4SOCVsdR<=5k-`u`Km`NNK9bw{W+Q$3Op#JK9Pw z5eMCQ$jbU`CbLTxSwi#GAG9o6zzj~RqcrSS=7hi>;Kv(r-KU&1ve~Ht0{?xw=3?75 zbYSFIgm~+rQ>CEAAyGjE5mB^TR#j18{DOgutF4LgT>kCU`V-9iolM)L|NMATt|85C z9cO;VI4{?|UqZ~0PkA4|rDUe3uW04t@AR-b=c$Q%S*t8!Vk|L~I3{5>d-X?r6Z(JQ zZuJwt`y0o%ma1QqJL@0XN=s*__6=Y=&#w}ZteP{zn?YU-xa!|?!)NIJV>`$XdgN;% z0vb$ly!6jnJo@B#NT!2>scQHGx)proqMrLk zN1O8?vv6RX7d+1kONKz0yraz`>(oQxy|Gjqj*L>>Zcnur& zEEYtL%>wyz6no4`4ITBmO_ss_oq(d;?|a~h>G%> z6uxn@qM!4<=SfaAV`?9!HD%wZit&{*J(;5b!8-3ez!o7$%;1JBDGHmL4s)fLf)g-cL)R_AX!-$!sv1 zbaCL@)lWy0Vb1wQR<{gC^3%N6sxmgDrepsx{%HRcMr?4nzXeChaj;hZ$+4w!&*~@R7`$3{sOgCv^CHsk~Nqic%GILn>_U5 zZgJ*{+@AE`)j|hEJTs-HHgPDXTc#jc1|S0Ui>vd6D6J<|Q5&Ppcga(Pg?)f;dv0$` z)sk0MXFvWl?BC$9Q_nCORK@ZaGhneu;5n9QW~Rx;P?&s|qHOa{A0^L46#+859AHYkZ`1SH0b7!wL-!CHR3Rmxyea;vSMLJUU_wZ* z92~sz>DWK_>w8%Pz-&%--BpH6R@_>B2FkAH1TQCjF04#}?`sab21tu$-#z^GOP{80 zL&4-fb0PwBz(1A$G1YrAOTkv?zTb6H-K1U>YWAIRvIx75mgz~mW~*k`^i$J}V}mDM zTb6z{Sm0kWzaKeqkUERXkg1BP;v{Q()o1&dU{=sZ78=q%b@E zu5r4{c;|Vql!fBd!I2~yj}nD^@z7Bce?vQ}32jl|n&cy?nulS&-U0~*Sh∈qQD% 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 From 79981015a72b0a390409cac5d865be27e9070309 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 12:26:01 -0700 Subject: [PATCH 29/36] add test cases for coverage --- .../component/menu/menu.component.spec.ts | 226 +++++++++++++++++- 1 file changed, 225 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts b/frontend/src/app/workspace/component/menu/menu.component.spec.ts index b8e37428b2a..bad80094cfd 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts @@ -38,7 +38,10 @@ import { WorkflowActionService } from "../../service/workflow-graph/model/workfl import { ValidationWorkflowService, ValidationOutput } from "../../service/validation/validation-workflow.service"; import { PanelService } from "../../service/panel/panel.service"; import { WorkflowVersionService } from "../../../dashboard/service/user/workflow-version/workflow-version.service"; -import { WorkflowPersistService } from "../../../common/service/workflow-persist/workflow-persist.service"; +import { + WorkflowPersistService, + DEFAULT_WORKFLOW_NAME, +} from "../../../common/service/workflow-persist/workflow-persist.service"; import { NotificationService } from "../../../common/service/notification/notification.service"; import { ExecutionState } from "../../types/execute-workflow.interface"; import { ComputingUnitState } from "../../../common/type/computing-unit-connection.interface"; @@ -1078,5 +1081,226 @@ describe("MenuComponent", () => { expect(errorSpy).toHaveBeenCalledWith("Failed to import the notebook."); expect(jupyterSpy).not.toHaveBeenCalled(); }); + + it("falls back to the default workflow name when the file has no base name", async () => { + stubGenerationServices(); + vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: 7 } as any); + const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 7 } as any)); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + // A file named ".ipynb" has an empty base name, so the default name is used. + component.onClickImportNotebook(ipynbFile(validNotebook, ".ipynb"), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + + expect(persistSpy.mock.calls[0][0].name).toBe(`${DEFAULT_WORKFLOW_NAME}_GENERATED_BY_LLM`); + }); + + it("uses the whole file name when it has no dot", async () => { + stubGenerationServices(); + vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: 7 } as any); + const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 7 } as any)); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + // A file named "ipynb" (no dot) passes the extension check and has no extension to strip, + // so the whole name becomes the base name. + component.onClickImportNotebook(ipynbFile(validNotebook, "ipynb"), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + + expect(persistSpy.mock.calls[0][0].name).toBe("ipynb_GENERATED_BY_LLM"); + }); + + it("tags code cells that arrive without a metadata object", async () => { + stubGenerationServices(); + const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 5 } as any)); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + const notebookWithoutCellMetadata = { + cells: [{ cell_type: "code", source: "x = 1" }], + metadata: {}, + nbformat: 4, + }; + component.onClickImportNotebook(ipynbFile(notebookWithoutCellMetadata), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + + expect(persistSpy).toHaveBeenCalledTimes(1); + }); + + it("on persist failure: surfaces an error notification and clears the loading flag", async () => { + vi.spyOn(console, "error").mockImplementation(() => {}); + vi.spyOn(notebookMigrationService, "sendToAIGenerateWorkflow").mockResolvedValue({ + workflowContent: { operators: [], links: [], commentBoxes: [], settings: {} } as unknown as WorkflowContent, + mappingContent: {} as any, + }); + vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(throwError(() => new Error("db down"))); + const errorSpy = vi.spyOn(notificationService, "error").mockImplementation(() => {}); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + + expect(errorSpy).toHaveBeenCalledWith("Failed to import notebook, check console for detailed error"); + }); + + it("on file read error: surfaces an error and clears the loading flag", async () => { + const errorSpy = vi.spyOn(notificationService, "error").mockImplementation(() => {}); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + // Swap in a FileReader that errors instead of loading, so reader.onerror runs. + const RealFileReader = globalThis.FileReader; + class FakeFileReader { + onerror: ((e: unknown) => void) | null = null; + onload: (() => void) | null = null; + readAsText(): void { + setTimeout(() => this.onerror?.(new Error("read fail")), 0); + } + } + (globalThis as any).FileReader = FakeFileReader; + try { + component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); + await vi.waitFor(() => expect(errorSpy).toHaveBeenCalledWith("Failed to read the notebook file.")); + expect(emitSpy).toHaveBeenCalledWith(false); + } finally { + (globalThis as any).FileReader = RealFileReader; + } + }); + + it("Cancel closes the modal", () => { + vi.spyOn(notebookMigrationService, "getAvailableModels").mockReturnValue(of([])); + const modalRef = { close: vi.fn() } as unknown as NzModalRef; + const createSpy = vi.spyOn(modalService, "create").mockReturnValue(modalRef); + + component.openImportNotebookModal(); + const config = createSpy.mock.calls[0][0] as ModalOptions; + const cancel = (config.nzFooter as { label: string; onClick: () => void }[]).find(b => b.label === "Cancel")!; + cancel.onClick(); + + expect(modalRef.close).toHaveBeenCalled(); + }); + + it("Submit is disabled until the form has both a file and a model", () => { + vi.spyOn(notebookMigrationService, "getAvailableModels").mockReturnValue(of([])); + const modalRef = { close: vi.fn() } as unknown as NzModalRef; + const createSpy = vi.spyOn(modalService, "create").mockReturnValue(modalRef); + + component.openImportNotebookModal(); + const config = createSpy.mock.calls[0][0] as ModalOptions; + const submit = (config.nzFooter as { label: string; disabled: () => boolean }[]).find(b => b.label === "Submit")!; + + // Empty form -> disabled. + component.importForm.reset({ file: null, model: "" }); + expect(submit.disabled()).toBe(true); + + // Both required controls filled -> enabled. + component.importForm.setValue({ file: { name: "x.ipynb" } as NzUploadFile, model: "gpt-4" }); + expect(submit.disabled()).toBe(false); + }); + + it("on non-string file content: surfaces an error and clears the loading flag", async () => { + vi.spyOn(console, "error").mockImplementation(() => {}); + const errorSpy = vi.spyOn(notificationService, "error").mockImplementation(() => {}); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + // Swap in a FileReader that loads a non-string result, so the string guard throws. + const RealFileReader = globalThis.FileReader; + class FakeFileReader { + result: unknown = null; + onerror: (() => void) | null = null; + onload: (() => void) | null = null; + readAsText(): void { + setTimeout(() => this.onload?.(), 0); + } + } + (globalThis as any).FileReader = FakeFileReader; + try { + component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + expect(errorSpy).toHaveBeenCalledWith("Failed to import the notebook."); + } finally { + (globalThis as any).FileReader = RealFileReader; + } + }); + + it("when the LLM returns no result: surfaces an error, clears the loading flag, and never persists", async () => { + vi.spyOn(console, "error").mockImplementation(() => {}); + vi.spyOn(notebookMigrationService, "sendToAIGenerateWorkflow").mockResolvedValue(undefined as any); + const persistSpy = vi.spyOn(workflowPersistService, "persistWorkflow"); + const errorSpy = vi.spyOn(notificationService, "error").mockImplementation(() => {}); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + + expect(errorSpy).toHaveBeenCalledWith("No workflow was generated from the notebook."); + expect(persistSpy).not.toHaveBeenCalled(); + }); + }); + + // The import modal body is an passed to NzModal as nzContent, so it is + // never rendered by the component's own change detection. Render it directly through the + // component's ViewContainerRef (the same context NzModal supplies: nzData as $implicit) + // to exercise the form markup and the three model-select states. + describe("import modal template", () => { + // Renders #importNotebookModal with the given models$ observable and returns the view. + function renderModal(models$: unknown) { + const vcr = (component as any).viewContainerRef; + const viewRef = vcr.createEmbeddedView(component.importModalTpl, { $implicit: { models$ } }); + viewRef.detectChanges(); + return viewRef; + } + + // Finds the first element matching selector across the view's root nodes and their subtrees. + function query(viewRef: any, selector: string): Element | null { + for (const node of viewRef.rootNodes as Node[]) { + if (node.nodeType !== Node.ELEMENT_NODE) continue; + const el = node as Element; + if (el.matches(selector)) return el; + const found = el.querySelector(selector); + if (found) return found; + } + return null; + } + + function text(viewRef: any): string { + return (viewRef.rootNodes as Node[]).map(n => n.textContent ?? "").join(""); + } + + it("renders the warning, diagram, and a usable model select once models load", () => { + const viewRef = renderModal(of([{ name: "gpt-4" }])); + try { + expect(query(viewRef, ".import-modal-warning")).not.toBeNull(); + expect(query(viewRef, "img[alt='Notebook to Workflow']")).not.toBeNull(); + expect(query(viewRef, "nz-select")).not.toBeNull(); + expect(text(viewRef)).toContain("Select a model"); + } finally { + viewRef.destroy(); + } + }); + + it("shows the disabled 'no models available' select when the list is empty", () => { + const viewRef = renderModal(of([])); + try { + expect(text(viewRef)).toContain("No models available"); + } finally { + viewRef.destroy(); + } + }); + + it("shows the loading select while models have not resolved yet", () => { + // A subject that never emits keeps the async pipe pending, so the loading branch renders. + const viewRef = renderModal(new Subject()); + try { + expect(text(viewRef)).toContain("Loading models..."); + } finally { + viewRef.destroy(); + } + }); + + it("shows the selected file name once a file is on the form", () => { + component.importForm.patchValue({ file: { name: "demo.ipynb" } }); + const viewRef = renderModal(of([{ name: "gpt-4" }])); + try { + expect(text(viewRef)).toContain("Selected file: demo.ipynb"); + } finally { + viewRef.destroy(); + } + }); }); }); From 8002ab186c9f9e30654b6b2d970f8129bbcd6fc6 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:22:39 -0700 Subject: [PATCH 30/36] reuse the single injected modal service in menu component --- frontend/src/app/workspace/component/menu/menu.component.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index bdf7ccdde76..50a754f763a 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -220,7 +220,6 @@ export class MenuComponent implements OnInit, OnDestroy { protected config: GuiConfigService, private router: Router, private fb: FormBuilder, - private modal: NzModalService, private viewContainerRef: ViewContainerRef, private jupyterPanelService: JupyterPanelService, private notebookMigrationService: NotebookMigrationService @@ -645,7 +644,7 @@ export class MenuComponent implements OnInit, OnDestroy { openImportNotebookModal(): void { const models$ = this.notebookMigrationService.getAvailableModels(); - const modalRef = this.modal.create({ + const modalRef = this.modalService.create({ nzTitle: "AI Generate Workflow from Python Notebook", nzContent: this.importModalTpl, nzViewContainerRef: this.viewContainerRef, @@ -677,7 +676,7 @@ export class MenuComponent implements OnInit, OnDestroy { const currentWorkflowHasContent = graph.getAllOperators().length > 0 || graph.getAllCommentBoxes().length > 0; if (currentWorkflowHasContent) { - this.modal.confirm({ + this.modalService.confirm({ nzTitle: "Overwrite current workflow?", nzContent: "Generating will replace the contents of the workflow you have open. " + From b4db78fecb8135867583a2c91b1ff1999962bb25 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:26:27 -0700 Subject: [PATCH 31/36] clear any running elapsed-time interval before starting a new one --- .../component/workspace.component.spec.ts | 18 ++++++++++++++++++ .../workspace/component/workspace.component.ts | 1 + 2 files changed, 19 insertions(+) diff --git a/frontend/src/app/workspace/component/workspace.component.spec.ts b/frontend/src/app/workspace/component/workspace.component.spec.ts index 2c95d5f67a2..d930af601fd 100644 --- a/frontend/src/app/workspace/component/workspace.component.spec.ts +++ b/frontend/src/app/workspace/component/workspace.component.spec.ts @@ -542,5 +542,23 @@ describe("WorkspaceComponent", () => { expect(clearSpy).toHaveBeenCalled(); }); + + it("clears the previous interval when the timer is started again without stopping", async () => { + vi.useFakeTimers(); + await createFixture(); + fixture.detectChanges(); + + const clearSpy = vi.spyOn(globalThis, "clearInterval"); + + component.onWaitingForLLMChanged(true); + const firstInterval = (component as any).timerInterval; + + // A second start (e.g. a double click) must not leave the first interval running. + component.onWaitingForLLMChanged(true); + const secondInterval = (component as any).timerInterval; + + expect(secondInterval).not.toBe(firstInterval); + expect(clearSpy).toHaveBeenCalledWith(firstInterval); + }); }); }); diff --git a/frontend/src/app/workspace/component/workspace.component.ts b/frontend/src/app/workspace/component/workspace.component.ts index 7235d62b107..bdc0cdb8a9b 100644 --- a/frontend/src/app/workspace/component/workspace.component.ts +++ b/frontend/src/app/workspace/component/workspace.component.ts @@ -374,6 +374,7 @@ export class WorkspaceComponent implements AfterViewInit, OnInit, OnDestroy { } startTimer() { + this.stopTimer(); // clear any interval already running so repeated starts don't stack this.startTime = Date.now(); this.updateElapsedTime(); this.timerInterval = setInterval(() => { From b4b1aa4fda15d0f3cb566d0108d87c81567ce342 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:34:23 -0700 Subject: [PATCH 32/36] stop the workspace host from constraining the jupyter panel stacking order and open the jupyter notebook panel at a fixed offset instead of a host-relative percentage --- .../jupyter-notebook-panel.component.scss | 5 ++--- .../src/app/workspace/component/workspace.component.scss | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/workspace/component/jupyter-notebook-panel/jupyter-notebook-panel.component.scss b/frontend/src/app/workspace/component/jupyter-notebook-panel/jupyter-notebook-panel.component.scss index 8d8bb0631f9..d395480f2db 100644 --- a/frontend/src/app/workspace/component/jupyter-notebook-panel/jupyter-notebook-panel.component.scss +++ b/frontend/src/app/workspace/component/jupyter-notebook-panel/jupyter-notebook-panel.component.scss @@ -19,9 +19,8 @@ .draggable-panel { position: absolute; - top: 50%; - left: 50%; - margin-top: 200px; + top: 100px; + left: 200px; width: 660px; height: 400px; background-color: #fff; diff --git a/frontend/src/app/workspace/component/workspace.component.scss b/frontend/src/app/workspace/component/workspace.component.scss index 56d7a73a54b..012fa3dfead 100644 --- a/frontend/src/app/workspace/component/workspace.component.scss +++ b/frontend/src/app/workspace/component/workspace.component.scss @@ -35,9 +35,6 @@ texera-jupyter-notebook-panel { position: absolute; top: 0; left: 0; - z-index: 1; - width: 100%; - background-color: white; } texera-mini-map { From 8ee0fdac142f5f8c624513cc4bb552d949bdb4a6 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:36:24 -0700 Subject: [PATCH 33/36] align the llm spinner time estimate with the import modal --- frontend/src/app/workspace/component/workspace.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/workspace.component.html b/frontend/src/app/workspace/component/workspace.component.html index 5a8ff99a526..78155285d4d 100644 --- a/frontend/src/app/workspace/component/workspace.component.html +++ b/frontend/src/app/workspace/component/workspace.component.html @@ -32,7 +32,7 @@ @if (isWaitingForLLM) {

    From a87878031a5837b8c32519e64891f5e113dc5ccd Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:37:22 -0700 Subject: [PATCH 34/36] remove unused Subscription import from menu component --- frontend/src/app/workspace/component/menu/menu.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index 50a754f763a..ccc52e3f7e2 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -55,7 +55,7 @@ import { saveAs } from "file-saver"; import { NotificationService } from "src/app/common/service/notification/notification.service"; import { OperatorMenuService } from "../../service/operator-menu/operator-menu.service"; import { CoeditorPresenceService } from "../../service/workflow-graph/model/coeditor-presence.service"; -import { EMPTY, firstValueFrom, of, timer, map, Subscription } from "rxjs"; +import { EMPTY, firstValueFrom, of, timer, map } from "rxjs"; import { isDefined } from "../../../common/util/predicate"; import { NzModalService } from "ng-zorro-antd/modal"; import { ResultExportationComponent } from "../result-exportation/result-exportation.component"; From d374180449e298f51a8c6f9ca0eb42287db1c686 Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:44:44 -0700 Subject: [PATCH 35/36] open the jupyter panel only when the notebook send to jupyter succeeds --- .../component/menu/menu.component.spec.ts | 23 ++++++++++++++++++- .../component/menu/menu.component.ts | 12 +++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.spec.ts b/frontend/src/app/workspace/component/menu/menu.component.spec.ts index bad80094cfd..719a7e2db83 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.spec.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.spec.ts @@ -994,7 +994,8 @@ describe("MenuComponent", () => { // saved (no wid) a new row is created and the wid changes, which routes the notebook // send + panel open through JupyterPanelService.init() instead of doing it here. function stubGenerationServices() { - vi.spyOn(notebookMigrationService, "sendNotebookToJupyter").mockResolvedValue(undefined as any); + // 1 == the notebook reached Jupyter; the in-place path opens the panel only on 1. + vi.spyOn(notebookMigrationService, "sendNotebookToJupyter").mockResolvedValue(1 as any); vi.spyOn(notebookMigrationService, "sendToAIGenerateWorkflow").mockResolvedValue({ workflowContent: { operators: [], links: [], commentBoxes: [], settings: {} } as unknown as WorkflowContent, mappingContent: {} as any, @@ -1032,6 +1033,26 @@ describe("MenuComponent", () => { expect(location.go).not.toHaveBeenCalled(); }); + it("does not open the panel when the notebook fails to reach Jupyter", async () => { + stubGenerationServices(); + // sendNotebookToJupyter resolves 0 on failure (it toasts the error itself). + vi.spyOn(notebookMigrationService, "sendNotebookToJupyter").mockResolvedValue(0 as any); + vi.spyOn(workflowActionService, "getWorkflow").mockReturnValue({ wid: 7 } as any); + vi.spyOn(workflowPersistService, "persistWorkflow").mockReturnValue(of({ wid: 7 } as any)); + vi.spyOn(component, "onClickAutoLayout").mockImplementation(() => {}); + const emitSpy = vi.spyOn(component.setWaitingForLLM, "emit"); + + component.onClickImportNotebook(ipynbFile(validNotebook), "gpt-4"); + await vi.waitFor(() => expect(emitSpy).toHaveBeenCalledWith(false)); + // Let the sendNotebookToJupyter().then(...) microtask settle before asserting. + await Promise.resolve(); + + // The reload still happened, but the panel stays closed since the send failed. + expect(notebookMigrationService.sendNotebookToJupyter).toHaveBeenCalled(); + expect(workflowActionService.reloadWorkflow).toHaveBeenCalledWith({ wid: 7 }, false); + expect(jupyterPanelService.openPanel).not.toHaveBeenCalled(); + }); + it("creates a new row and points the URL at it when the current workflow was never saved", async () => { stubGenerationServices(); // Current workflow has no wid; persist returns a new wid, so the wid changes. diff --git a/frontend/src/app/workspace/component/menu/menu.component.ts b/frontend/src/app/workspace/component/menu/menu.component.ts index ccc52e3f7e2..b8169e0594d 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.ts +++ b/frontend/src/app/workspace/component/menu/menu.component.ts @@ -803,9 +803,15 @@ export class MenuComponent implements OnInit, OnDestroy { // and open the panel ourselves. Use openPanel, not openJupyterNotebookPanel: // init()'s wid-change handler is not involved and openPanel opens // unconditionally without the hasMapping gate. - this.notebookMigrationService - .sendNotebookToJupyter(notebookContent) - .then(() => this.jupyterPanelService.openPanel("JupyterNotebookPanel")); + // sendNotebookToJupyter never rejects: it resolves 1 on success and 0 on + // failure (it toasts the error itself). Open the panel only on success so we + // do not float it over a blank iframe, matching the init()-driven path which + // opens only when fetchNotebookAndMapping reports the send succeeded. + this.notebookMigrationService.sendNotebookToJupyter(notebookContent).then(result => { + if (result == 1) { + this.jupyterPanelService.openPanel("JupyterNotebookPanel"); + } + }); } else { // The current workflow had never been saved, so a new row was created and the // wid changed. reloadWorkflow's synchronous wid change drives init() to fetch From e48d9ad3350b1a52c40e42d4fddb2b8bc549ca6c Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Mon, 3 Aug 2026 14:56:23 -0700 Subject: [PATCH 36/36] disable the ai-generate button while a conversion is in flight --- .../component/menu/menu.component.html | 2 +- .../component/menu/menu.component.spec.ts | 29 +++++++++++++++++++ .../component/menu/menu.component.ts | 22 +++++++++----- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/workspace/component/menu/menu.component.html b/frontend/src/app/workspace/component/menu/menu.component.html index 514021bb2c2..d15ed0b0270 100644 --- a/frontend/src/app/workspace/component/menu/menu.component.html +++ b/frontend/src/app/workspace/component/menu/menu.component.html @@ -152,7 +152,7 @@