|
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 }; |
|
} |