fixed bug with inferenceJobsByCategory returning lists that would switch order

This commit is contained in:
Victor committed 2024-07-31 20:00:57 -07:00
1 parent 1b75d21bd0
commit ca471b9078
2 files changed
+37 -20

No files matched your search

@@ -13,13 +13,12 @@ interface Props {
export default function InferenceJobsModal({
handleClose,
jobType: inJobType = -1,
jobType = -1,
showModalHeader = true,
...rest
}: Props) {
const { clearJobs, clearJobsStatus, someJobsAreDone } = useInferenceJobs();
const { t } = useLocalize("InferenceJobs");
const selectedType = 0;
const failures = (fail = "") => {
switch (fail) {
default:
@@ -42,7 +41,7 @@ export default function InferenceJobsModal({
onSelect: () => {
if (handleClose) handleClose();
},
...(selectedType > -1 ? { jobType: selectedType } : {}),
...(jobType > -1 ? { jobType } : {}),
showHeader: false,
showJobQueue: false,
showNoJobs: true,
@@ -94,10 +94,26 @@ export default function useInferenceJobsPolling({
updatedJob: InferenceJob,
frontendJobType: FrontendInferenceJobType
) => {
categoryMap.set(frontendJobType, [
...(categoryMap.get(frontendJobType) || []),
updatedJob,
]);
const categoryArray = categoryMap.get(frontendJobType) || [];
if (user) {
categoryMap.set(frontendJobType, [
...categoryArray,
updatedJob,
]);
} else {
const inArray = categoryArray.find((job,i) => job.jobToken === updatedJob.jobToken );
if (!inArray) {
categoryMap.set(frontendJobType, [
updatedJob,
...categoryArray,
]);
} else {
categoryMap.set(frontendJobType,categoryArray.map((job,i) => job.jobToken === updatedJob.jobToken ? updatedJob : job) )
}
}
};
const updateState = (
@@ -134,11 +150,11 @@ export default function useInferenceJobsPolling({
}
});
const noSessionJobs = async (currentQueue: InferenceJob[]) => {
let categoryMap = new Map(newJobCategoryMap());
const updatedJobs = await Promise.all(
const noSessionJobs = async (currentQueue: InferenceJob[], currentCategoryMap: CategoryMap) => {
let categoryMap = new Map(currentCategoryMap);
Promise.all(
currentQueue.map(async (job: InferenceJob) => {
return GetJobStatus(job.jobToken, {}).then(
return await GetJobStatus(job.jobToken, {}).then(
(res: GetJobStatusResponse) => {
const updatedJob = InferenceJob.fromResponse(
res.state!,
@@ -149,20 +165,23 @@ export default function useInferenceJobsPolling({
}
);
})
);
).then((updatedJobs) => {
if (updatedJobs.length) {
updateState(updatedJobs, categoryMap)
}
});
updateState(updatedJobs, categoryMap);
};
const onTick = async ({
eventProps: { inferenceJobs: currentQueue },
eventProps: { inferenceJobs: currentQueue, byCategory: currentCategoryMap },
}: {
eventProps: { inferenceJobs: InferenceJob[] };
eventProps: { inferenceJobs: InferenceJob[], byCategory: CategoryMap };
}) => {
if (user) {
sessionJobs();
} else if (inferenceJobs && inferenceJobs.length) {
noSessionJobs(currentQueue);
noSessionJobs(currentQueue, currentCategoryMap);
}
};
@@ -170,7 +189,7 @@ export default function useInferenceJobsPolling({
jobToken: string,
frontendJobType: FrontendInferenceJobType
) => {
onTick({ eventProps: { inferenceJobs: [] } });
onTick({ eventProps: { byCategory, inferenceJobs: [] } });
if (user) {
// reserving this space for later uses
} else {
@@ -188,10 +207,9 @@ export default function useInferenceJobsPolling({
clearJobsStatusSet(FetchStatus.in_progress);
DismissFinishedJobs("", {}).then((res: DismissFinishedJobsResponse) => {
if (res.success) {
onTick({ eventProps: { inferenceJobs: [] } });
onTick({ eventProps: { byCategory: newJobCategoryMap(), inferenceJobs: [] } });
keepAliveSet(true);
clearJobsStatusSet(FetchStatus.ready);
console.log("🗑️ Finish jobs cleared");
}
});
}
@@ -202,7 +220,7 @@ export default function useInferenceJobsPolling({
inferenceJobs.some(job => !jobStateCanChange(job.jobState));
useInterval({
eventProps: { inferenceJobs },
eventProps: { byCategory, inferenceJobs },
interval,
onTick,
locked: !keepAlive,