From fac51bc64d6474869256f305cb2c5ac9ba26c373 Mon Sep 17 00:00:00 2001 From: adibarra <93070681+adibarra@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:17:08 -0500 Subject: [PATCH] filter stale config data when parallelism settings change between runs --- .../inference/hooks/useChartData.ts | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/inference/hooks/useChartData.ts b/packages/app/src/components/inference/hooks/useChartData.ts index c87f5f4..3c8854f 100644 --- a/packages/app/src/components/inference/hooks/useChartData.ts +++ b/packages/app/src/components/inference/hooks/useChartData.ts @@ -121,9 +121,25 @@ export function useChartData( if (!allRows || !sequenceIslOsl) return []; const seqFilter = (r: { isl: number; osl: number }) => r.isl === sequenceIslOsl.isl && r.osl === sequenceIslOsl.osl; - const mainRows = allRows - .filter(seqFilter) - .map((r) => (selectedRunDate ? { ...r, date: selectedRunDate, actualDate: r.date } : r)); + const seqFiltered = allRows.filter(seqFilter); + + // For each (hw, framework, spec_method, disagg, precision) group, keep only + // rows from the most recent date. When parallelism settings change between runs, + // old config_ids create stale data points under the same legend line — drop them. + const maxDatePerGroup = new Map(); + for (const r of seqFiltered) { + const key = `${r.hardware}|${r.framework}|${r.spec_method}|${r.disagg}|${r.precision}`; + const cur = maxDatePerGroup.get(key); + if (!cur || r.date > cur) maxDatePerGroup.set(key, r.date); + } + const deduped = seqFiltered.filter((r) => { + const key = `${r.hardware}|${r.framework}|${r.spec_method}|${r.disagg}|${r.precision}`; + return r.date === maxDatePerGroup.get(key); + }); + + const mainRows = deduped.map((r) => + selectedRunDate ? { ...r, date: selectedRunDate, actualDate: r.date } : r, + ); if (comparisonDates.length === 0) return mainRows; const extraRows = comparisonQueries.flatMap((q, i) => (q.data ?? [])