From ca471b90780a76eb5782d66249b2ba569b098aaf Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 31 Jul 2024 19:57:07 -0700 Subject: [PATCH] fixed bug with inferenceJobsByCategory returning lists that would switch order --- .../InferenceJobsModal/InferenceJobsModal.tsx | 5 +- .../src/hooks/useInferenceJobsPolling.tsx | 52 +++++++++++++------ 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/website/packages/fakeyou.com/src/components/modals/InferenceJobsModal/InferenceJobsModal.tsx b/src/website/packages/fakeyou.com/src/components/modals/InferenceJobsModal/InferenceJobsModal.tsx index c29f836b49..f081017515 100644 --- a/src/website/packages/fakeyou.com/src/components/modals/InferenceJobsModal/InferenceJobsModal.tsx +++ b/src/website/packages/fakeyou.com/src/components/modals/InferenceJobsModal/InferenceJobsModal.tsx @@ -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, diff --git a/src/website/packages/fakeyou.com/src/hooks/useInferenceJobsPolling.tsx b/src/website/packages/fakeyou.com/src/hooks/useInferenceJobsPolling.tsx index 2b916c9b39..8eb9d51192 100644 --- a/src/website/packages/fakeyou.com/src/hooks/useInferenceJobsPolling.tsx +++ b/src/website/packages/fakeyou.com/src/hooks/useInferenceJobsPolling.tsx @@ -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,