"use client" import { useState, useEffect } from "react" import AnalyticsDashboard from "@/components/analytics-dashboard" import { Navigation } from "@/components/navigation" import { PageHeader } from "@/components/page-header" interface Evaluation { id: string name: string organization: string overallScore: number modality: string[] submittedDate: string categoryEvaluations?: { [categoryId: string]: { benchmarkAnswers?: { [questionId: string]: string } processAnswers?: { [questionId: string]: string } } } } const loadEvaluationData = async (): Promise => { const evaluationFiles = [ "/evaluations/gpt-4-turbo.json", "/evaluations/claude-3-sonnet.json", "/evaluations/gemini-pro.json", "/evaluations/fraud-detector.json", ] const additionalFiles = [] for (let i = 1; i <= 10; i++) { additionalFiles.push(`/evaluations/eval-${Date.now() - i * 86400000}.json`) } const allFiles = [...evaluationFiles, ...additionalFiles] const evaluations: Evaluation[] = [] for (const file of allFiles) { try { const response = await fetch(file) if (!response.ok) continue const data = await response.json() // Calculate overall score based on completion percentage let overallScore = 0 if (data.categoryEvaluations) { const allCategories = Object.keys(data.categoryEvaluations) const categoryScores = allCategories.map(categoryId => { const categoryData = data.categoryEvaluations[categoryId] if (!categoryData) return 0 // Count total questions and answered questions const benchmarkAnswers = categoryData.benchmarkAnswers || {} const processAnswers = categoryData.processAnswers || {} const allAnswers = { ...benchmarkAnswers, ...processAnswers } const totalQuestions = Object.keys(allAnswers).length if (totalQuestions === 0) return 0 // Count answered questions (not N/A, null, undefined, or empty) const answeredQuestions = Object.values(allAnswers).filter( (answer: any) => answer && answer !== "N/A" && String(answer).trim() !== "" ).length return (answeredQuestions / totalQuestions) * 100 }) overallScore = categoryScores.length > 0 ? categoryScores.reduce((sum, score) => sum + score, 0) / categoryScores.length : 0 } const evaluation: Evaluation = { id: data.id || `eval-${Date.now()}`, name: data.systemName || "Unknown System", organization: data.provider || "Unknown Provider", overallScore, modality: [...(data.inputModalities || ["Text"]), ...(data.outputModalities || ["Text"])], submittedDate: data.evaluationDate || new Date().toISOString().split("T")[0], categoryEvaluations: data.categoryEvaluations } evaluations.push(evaluation) } catch (error) { console.error(`Failed to load evaluation from ${file}:`, error) } } return evaluations } export default function AnalyticsPage() { const { theme, setTheme } = useTheme() const [evaluations, setEvaluations] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { const loadData = async () => { try { const data = await loadEvaluationData() setEvaluations(data) } catch (error) { console.error("Failed to load evaluation data:", error) } finally { setLoading(false) } } loadData() }, []) if (loading) { return (

Loading analytics...

) } return (

Analytics & Leaderboards

Explore evaluation completeness across models and categories

) }