Spaces:
Sleeping
Sleeping
File size: 1,686 Bytes
1af45d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
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 };
} |