gilbertyiga
Update space
1af45d7
import { useMemo } from 'react';
import { ChartRow, AllModelsData, ModelMetrics } from '../types';
export function useChartData(
data: AllModelsData | null,
selectedModel: string,
selectedModels: string[],
selectedMetric: string,
comparisonMode: boolean,
metrics: string[]
) {
const barChartData: ChartRow[] = useMemo(() => {
if (!data || (!selectedModel && selectedModels.length === 0)) return [];
const languagePairs = selectedModel && data[selectedModel]
? Object.keys(data[selectedModel]).filter(k => k !== 'averages')
: [];
return languagePairs.map(pair => {
const row: any = { name: pair.toUpperCase() };
if (comparisonMode) {
selectedModels.forEach(model => {
row[model] = data[model]?.[pair]?.[selectedMetric as keyof ModelMetrics] ?? 0;
});
} else {
row[selectedMetric] = data[selectedModel]?.[pair]?.[selectedMetric as keyof ModelMetrics] ?? 0;
}
return row;
});
}, [data, selectedModel, selectedModels, selectedMetric, comparisonMode]);
const radarData: ChartRow[] = useMemo(() => {
if (!data || (!selectedModel && selectedModels.length === 0)) return [];
return metrics.map(metric => {
const point: any = { metric: metric.toUpperCase() };
if (comparisonMode) {
selectedModels.forEach(model => {
point[model] = data[model]?.averages?.[metric as keyof ModelMetrics] ?? 0;
});
} else {
point.value = data[selectedModel]?.averages?.[metric as keyof ModelMetrics] ?? 0;
}
return point;
});
}, [data, selectedModel, selectedModels, comparisonMode]);
return { barChartData, radarData };
}