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