yigagilbert commited on
Commit
627ee08
·
verified ·
1 Parent(s): 7ef5f7b

Upload LanguageLevelTable.tsx

Browse files
frontend/src/components/LanguageLevelTable.tsx ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { FC, useState } from 'react';
2
+ import { AllModelsData, ModelMetrics } from '../types';
3
+
4
+ interface Props {
5
+ data: AllModelsData;
6
+ selectedModels: string[];
7
+ metrics: string[];
8
+ colors: string[];
9
+ }
10
+
11
+ const LanguageLevelTable: FC<Props> = ({ data, selectedModels, metrics, colors }) => {
12
+ const [selectedLanguage, setSelectedLanguage] = useState<string | null>(null);
13
+ const [selectedMetric, setSelectedMetric] = useState<string>(metrics[0]);
14
+
15
+ const languagePairs = selectedModels.length
16
+ ? Object.keys(data[selectedModels[0]] || {}).filter(k => k !== 'averages')
17
+ : [];
18
+
19
+ const filteredData = selectedLanguage
20
+ ? languagePairs.filter(pair => pair === selectedLanguage)
21
+ : languagePairs;
22
+
23
+ return (
24
+ <div className="bg-white rounded-xl shadow-lg p-6 mb-8">
25
+ <h2 className="text-2xl font-bold text-gray-800 mb-6">Language-Level Table</h2>
26
+
27
+ {/* Filters */}
28
+ <div className="flex space-x-4 mb-4">
29
+ <select
30
+ value={selectedLanguage || ''}
31
+ onChange={e => setSelectedLanguage(e.target.value || null)}
32
+ className="px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
33
+ >
34
+ <option value="">All Languages</option>
35
+ {languagePairs.map(pair => (
36
+ <option key={pair} value={pair}>
37
+ {pair.toUpperCase()}
38
+ </option>
39
+ ))}
40
+ </select>
41
+
42
+ <select
43
+ value={selectedMetric}
44
+ onChange={e => setSelectedMetric(e.target.value)}
45
+ className="px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500"
46
+ >
47
+ {metrics.map(metric => (
48
+ <option key={metric} value={metric}>
49
+ {metric.toUpperCase()}
50
+ </option>
51
+ ))}
52
+ </select>
53
+ </div>
54
+
55
+ {/* Table */}
56
+ <div className="overflow-x-auto">
57
+ <table className="w-full text-sm">
58
+ <thead>
59
+ <tr className="border-b border-gray-200">
60
+ <th className="text-left py-3 px-4 font-semibold">Language Pair</th>
61
+ {selectedModels.map((model, index) => (
62
+ <th
63
+ key={model}
64
+ className="text-center py-3 px-4 font-semibold"
65
+ style={{ color: colors[index % colors.length] }}
66
+ >
67
+ {model}
68
+ </th>
69
+ ))}
70
+ </tr>
71
+ </thead>
72
+ <tbody>
73
+ {filteredData.map(pair => (
74
+ <tr key={pair} className="border-b border-gray-100 hover:bg-gray-50">
75
+ <td className="py-3 px-4 font-medium">{pair.toUpperCase()}</td>
76
+ {selectedModels.map(model => (
77
+ <td key={model} className="text-center py-3 px-4">
78
+ {data[model]?.[pair]?.[selectedMetric as keyof ModelMetrics]?.toFixed(3) || '-'}
79
+ </td>
80
+ ))}
81
+ </tr>
82
+ ))}
83
+ </tbody>
84
+ </table>
85
+ </div>
86
+ </div>
87
+ );
88
+ };
89
+
90
+ export default LanguageLevelTable;