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