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 LanguageLevelTable from './components/LanguageLevelTable'; import { ChartRow, ModelMetrics } from './types'; import axios from 'axios'; 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 [evaluationError, setEvaluationError] = useState(null); const handleEvaluate = async () => { if (!newModelName.trim()) { setEvaluationError('Model name cannot be empty.'); return; } setIsEvaluating(true); setEvaluationError(null); try { const response = await axios.post('http://localhost:8000/evaluate', { model_name: newModelName, }); // Handle success alert(`Evaluation successful! Metrics: ${JSON.stringify(response.data.metrics)}`); setNewModelName(''); // Clear the input field } catch (error: any) { // Handle error setEvaluationError(error.response?.data?.detail || 'An error occurred during evaluation.'); } finally { setIsEvaluating(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

{evaluationError &&

{evaluationError}

}
)} {activeTab === 'comparison' && (

Comparison

setSelectedModels(prev => prev.includes(m) ? prev.filter(x => x !== m) : [...prev, m] ) } />
)} {activeTab === 'dashboard' && (

Dashboard

)} {activeTab === 'comparison' && (

Comparison

)}
); } export default App;