import React, { useState, useEffect } from 'react' import DatasetSelector from './DatasetSelector' import LeaderboardTable from './LeaderboardTable' import LeaderboardChart from './LeaderboardChart' import ModelFilter from './ModelFilter' import API from '../API' import LoadingSpinner from './LoadingSpinner' const LeaderboardPage: React.FC = () => { const datasetNames = [ 'voxpopuli_1k/audio', 'ravdess_1k/audio', 'val2014_1k/image', 'sav_val_full/video', ] const [selectedDatasetName, setSelectedDatasetName] = useState(datasetNames[0]) const [models, setModels] = useState([]) const [selectedModels, setSelectedModels] = useState>(new Set()) const [loading, setLoading] = useState(true) const [benchmarkData, setBenchmarkData] = useState(null) // Fetch available models when dataset changes useEffect(() => { setLoading(true) API.fetchStaticFile(`data/${selectedDatasetName}?dataset_type=benchmark`) .then((response) => { const data = JSON.parse(response) setBenchmarkData(data) const rows = data['rows'] const allKeys: string[] = Array.from(new Set(rows.flatMap((row: any) => Object.keys(row)))) // Remove 'metric' from headers if it exists const headers = allKeys.filter((key) => key !== 'metric') setModels(headers) // Initialize all models as selected setSelectedModels(new Set(headers)) setLoading(false) }) .catch((err) => { console.error('Failed to fetch models:', err) setLoading(false) }) }, [selectedDatasetName]) return (
{loading ? ( ) : ( <> {models.length > 0 && ( )}
)}
) } export default LeaderboardPage