import React, { useState, useMemo } from 'react'; import { useResults } from './hooks/useResults'; import ModelSelector from './components/ModelSelector'; import MetricCard from './components/MetricCard'; import BarChartView from './components/BarChartView'; import RadarView from './components/RadarView'; import LineTrendView from './components/LineTrendView'; import ComparisonTable from './components/ComparisonTable'; import AddModelForm from './components/AddModelForm'; import { ChartRow, ModelMetrics } from './types'; const colors = ['#4F46E5', '#059669', '#DC2626', '#7C3AED', '#EA580C', '#0891B2']; const metrics = ['bleu','chrf','cer','wer','rouge1','rouge2','rougeL','quality_score']; function App() { const { data, error } = useResults(); const [selectedMetric, setSelectedMetric] = useState(metrics[0]); const [selectedModel, setSelectedModel] = useState(''); const [selectedModels, setSelectedModels] = useState([]); const [comparisonMode, setComparisonMode] = useState(false); const [viewMode, setViewMode] = useState<'overview' | 'detailed'>('overview'); const [activeTab, setActiveTab] = useState<'dashboard' | 'addModel' | 'comparison'>('dashboard'); const [newModelName, setNewModelName] = useState(''); const [isEvaluating, setIsEvaluating] = useState(false); const modelNames = data ? Object.keys(data) : []; const languagePairs = data && selectedModel && data[selectedModel] ? Object.keys(data[selectedModel]).filter(k => k !== 'averages') : []; const barChartData: ChartRow[] = useMemo(() => { if (!data || !selectedModel || !data[selectedModel]) return []; return languagePairs.map(pair => { const row: any = { name: pair.toUpperCase() }; if (comparisonMode) { selectedModels.forEach((m, i) => { row[m] = data[m]?.[pair]?.[selectedMetric as keyof ModelMetrics] ?? 0; }); } else { row[selectedMetric] = data[selectedModel]?.[pair]?.[selectedMetric as keyof ModelMetrics] ?? 0; } return row; }); }, [data, languagePairs, selectedMetric, comparisonMode, selectedModels]); const radarData: ChartRow[] = useMemo(() => { if (!data || !selectedModel || !data[selectedModel]) return []; return metrics.map(metric => { const point: any = { metric: metric.toUpperCase() }; if (comparisonMode) { selectedModels.forEach((m, i) => { point[m] = data[m]?.averages?.[metric as keyof ModelMetrics] ?? 0; }); } else { point.value = data[selectedModel]?.averages?.[metric as keyof ModelMetrics] ?? 0; } return point; }); }, [data, selectedModel, selectedModels, comparisonMode]); if (error) return
Error: {error}
; if (!data) return
Loading...
; return (
{/* Main Navigation Tabs */}

Translation Leaderboard

{/* Content Based on Active Tab */}
{activeTab === 'dashboard' && (

Dashboard

{/* Toggle Button for Comparison Mode */}
setSelectedModels(prev => prev.includes(m) ? prev.filter(x => x !== m) : [...prev, m] ) } />
{/* Summary cards */} {!comparisonMode ? ( <> {data[selectedModel]?.averages && ( )} {/* Other cards */} ) : ( selectedModels.map((m, i) => ( data[m]?.averages && ( ) )) )}
{viewMode === 'overview' ? ( <> ) : ( <> )}
)} {activeTab === 'addModel' && (

Add a New Model

{ // Add evaluation logic here }} />
)} {activeTab === 'comparison' && (

Comparison

setSelectedModels(prev => prev.includes(m) ? prev.filter(x => x !== m) : [...prev, m] ) } />
)}
); } export default App;