Skip to content

Commit dc29ddc

Browse files
alexkuzmikclaude
andcommitted
fix(experiments): move column dedup to table display layer only
Keep dynamicOutputColumns intact in the shared hook so filters and column visibility state are unaffected. Apply the dedup filter only when building outputColumnsData for table rendering. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0339208 commit dc29ddc

2 files changed

Lines changed: 25 additions & 21 deletions

File tree

apps/opik-frontend/src/v2/pages-shared/experiments/useExperimentItemsData.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,14 @@ const useExperimentItemsData = ({
146146
}, [data]);
147147

148148
const dynamicOutputColumns = useMemo(() => {
149-
const datasetColumnNames = new Set(
150-
dynamicDatasetColumns.map((c) => c.label),
151-
);
152149
return (experimentsOutputData?.columns ?? [])
153-
.filter((c) => !datasetColumnNames.has(c.name))
154150
.sort((c1, c2) => c1.name.localeCompare(c2.name))
155151
.map<DynamicColumn>((c) => ({
156152
id: `${EXPERIMENT_ITEM_OUTPUT_PREFIX}.${c.name}`,
157153
label: c.name,
158154
columnType: mapDynamicColumnTypesToColumnType(c.types),
159155
}));
160-
}, [experimentsOutputData, dynamicDatasetColumns]);
156+
}, [experimentsOutputData]);
161157

162158
const dynamicScoresColumns = useMemo(() => {
163159
return (feedbackScoresData?.scores ?? [])

apps/opik-frontend/src/v2/pages/CompareExperimentsPage/ExperimentItemsTab/ExperimentItemsTab.tsx

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -273,24 +273,31 @@ const ExperimentItemsTab: React.FunctionComponent<ExperimentItemsTabProps> = ({
273273
];
274274
}, [dynamicDatasetColumns, experimentsCount, sortableColumns]);
275275

276+
const datasetColumnLabels = useMemo(
277+
() => new Set(dynamicDatasetColumns.map((c) => c.label)),
278+
[dynamicDatasetColumns],
279+
);
280+
276281
const outputColumnsData = useMemo(() => {
277282
return [
278-
...dynamicOutputColumns.map(
279-
({ label, id, columnType }) =>
280-
({
281-
id,
282-
label,
283-
type: columnType,
284-
cell: CompareExperimentsOutputCell as never,
285-
customMeta: {
286-
experiments,
287-
experimentsIds,
288-
outputKey: label,
289-
openTrace: setTraceId,
290-
},
291-
...(columnType === COLUMN_TYPE.dictionary && { size: 400 }),
292-
}) as ColumnData<ExperimentsCompare>,
293-
),
283+
...dynamicOutputColumns
284+
.filter((c) => !datasetColumnLabels.has(c.label))
285+
.map(
286+
({ label, id, columnType }) =>
287+
({
288+
id,
289+
label,
290+
type: columnType,
291+
cell: CompareExperimentsOutputCell as never,
292+
customMeta: {
293+
experiments,
294+
experimentsIds,
295+
outputKey: label,
296+
openTrace: setTraceId,
297+
},
298+
...(columnType === COLUMN_TYPE.dictionary && { size: 400 }),
299+
}) as ColumnData<ExperimentsCompare>,
300+
),
294301
{
295302
id: COLUMN_DURATION_ID,
296303
label: "Duration",
@@ -343,6 +350,7 @@ const ExperimentItemsTab: React.FunctionComponent<ExperimentItemsTabProps> = ({
343350
} as ColumnData<ExperimentsCompare>,
344351
];
345352
}, [
353+
datasetColumnLabels,
346354
dynamicOutputColumns,
347355
experiments,
348356
experimentsIds,

0 commit comments

Comments
 (0)