Skip to content

Commit 819729d

Browse files
authored
Merge pull request #1416 from transformerlab/fix/closing-queue-task-modal
Close QueueTaskModal only when provider launch request returns
2 parents 2cabc60 + 4214185 commit 819729d

2 files changed

Lines changed: 48 additions & 2 deletions

File tree

src/renderer/components/Experiment/Tasks/QueueTaskModal.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,42 @@ export default function QueueTaskModal({
103103
);
104104
const [sweepMetric, setSweepMetric] = React.useState('eval/loss');
105105
const [lowerIsBetter, setLowerIsBetter] = React.useState(true);
106+
const loadingMessages = React.useMemo(
107+
() => [
108+
'Contacting compute provider…',
109+
'Reserving resources…',
110+
'Preparing environment…',
111+
'Submitting job configuration…',
112+
'Waiting for job ID…',
113+
],
114+
[],
115+
);
116+
const [loadingMessageIndex, setLoadingMessageIndex] = React.useState(0);
117+
118+
React.useEffect(() => {
119+
if (!open || !isSubmitting || loadingMessages.length === 0) {
120+
return;
121+
}
122+
123+
// Reset to first message whenever a new submission starts
124+
setLoadingMessageIndex(0);
125+
126+
const interval = window.setInterval(() => {
127+
setLoadingMessageIndex((prev) => {
128+
const lastIndex = loadingMessages.length - 1;
129+
// Once we reach the final message ("Waiting for job ID…"),
130+
// stay there instead of looping back to the beginning.
131+
if (prev >= lastIndex) {
132+
return lastIndex;
133+
}
134+
return prev + 1;
135+
});
136+
}, 1500);
137+
138+
return () => {
139+
window.clearInterval(interval);
140+
};
141+
}, [open, isSubmitting, loadingMessages]);
106142

107143
// Fetch available models and datasets from the API
108144
const { data: modelsData } = useSWR(
@@ -1170,6 +1206,11 @@ export default function QueueTaskModal({
11701206
>
11711207
Submit
11721208
</Button>
1209+
{isSubmitting && (
1210+
<Typography level="body-sm" sx={{ ml: 1 }}>
1211+
{loadingMessages[loadingMessageIndex]}
1212+
</Typography>
1213+
)}
11731214
</DialogActions>
11741215
</ModalDialog>
11751216
</Modal>

src/renderer/components/Experiment/Tasks/Tasks.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -844,8 +844,7 @@ export default function Tasks({ subtype }: { subtype?: string }) {
844844
const handleQueueSubmit = async (config: Record<string, any>) => {
845845
if (!experimentInfo?.id || !taskBeingQueued) return;
846846

847-
// Close modal and start submission
848-
setQueueModalOpen(false);
847+
// Keep modal open while submission is in progress
849848
setIsSubmitting(true);
850849

851850
const task = taskBeingQueued;
@@ -968,7 +967,10 @@ export default function Tasks({ subtype }: { subtype?: string }) {
968967
type: 'success',
969968
message: 'Provider cluster launch initiated.',
970969
});
970+
setQueueModalOpen(false);
971971
await Promise.all([jobsMutate(), templatesMutate()]);
972+
// Close the queue modal only after the launch succeeds
973+
setTaskBeingQueued(null);
972974
} else {
973975
// FastAPI HTTPException uses 'detail' field, but some responses may use 'message'
974976
const message =
@@ -988,6 +990,9 @@ export default function Tasks({ subtype }: { subtype?: string }) {
988990
});
989991
} finally {
990992
setIsSubmitting(false);
993+
// Ensure the queue modal closes when the launch request finishes,
994+
// regardless of success or failure.
995+
setQueueModalOpen(false);
991996
setTaskBeingQueued(null);
992997
}
993998
};

0 commit comments

Comments
 (0)