Spaces:
Sleeping
Sleeping
| 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 }; | |
| } |