import { getDb } from "@/lib/db"; import { get as dbGet, all } from "@/lib/db/helpers"; import { latestScoresForSubmissions } from "@/lib/data/metrics"; import type { LeaderboardSnapshot, LeaderboardEntry, RadarEntry } from "@/lib/db/schema"; export const DEFAULT_RADAR_METRICS = [ "tri_view_consistency", "task_alignment", "physical_3d_coherence", "motion_quality", "temporal_consistency", "visual_quality", ]; export const PUBLIC_LEADERBOARD_LIMIT = 10_000; export function latestSnapshot(snapshotParam?: string | null): LeaderboardSnapshot | null { const db = getDb(); if (snapshotParam && snapshotParam !== "latest") { return ( dbGet(db.prepare("SELECT * FROM leaderboard_snapshots WHERE id = ?"), snapshotParam) || dbGet(db.prepare("SELECT * FROM leaderboard_snapshots WHERE label = ?"), snapshotParam) ); } return dbGet( db.prepare("SELECT * FROM leaderboard_snapshots ORDER BY is_latest DESC, snapshot_time DESC, id DESC LIMIT 1") ); } export function getSnapshotHistory(): LeaderboardSnapshot[] { return all( getDb().prepare("SELECT * FROM leaderboard_snapshots ORDER BY snapshot_time DESC, id DESC") ); } export function getLeaderboard( snapshotParam?: string | null, limit = PUBLIC_LEADERBOARD_LIMIT ): { snapshot: LeaderboardSnapshot | null; entries: LeaderboardEntry[]; } { const db = getDb(); const snapshot = latestSnapshot(snapshotParam); if (!snapshot) return { snapshot: null, entries: [] }; const safeLimit = Math.max(1, Math.min(limit, PUBLIC_LEADERBOARD_LIMIT)); const rawEntries = db .prepare( `SELECT e.rank, e.status_label, e.updated_label, e.submission_id, t.id AS team_id, t.slug AS team_slug, t.name AS team_name, t.affiliation, t.strengths, mo.id AS model_id, mo.slug AS model_slug, mo.name AS model_name, s.version_label, s.status AS submission_status, s.dataset_split, s.submitted_at, sr.normalized_value, sr.percentile, sr.raw_value FROM leaderboard_snapshot_entries e JOIN submissions s ON s.id = e.submission_id JOIN models mo ON mo.id = s.model_id JOIN teams t ON t.id = mo.team_id JOIN score_records sr ON sr.id = e.score_record_id WHERE e.snapshot_id = ? ORDER BY e.rank LIMIT ?` ) .all(snapshot.id, safeLimit) as Array>; const submissionIds = rawEntries.map((e) => e.submission_id as number); const scoresBySubmission = latestScoresForSubmissions(submissionIds); const entries: LeaderboardEntry[] = rawEntries.map((entry) => ({ rank: entry.rank as number, statusLabel: entry.status_label as string | null, updatedLabel: entry.updated_label as string | null, team: { id: entry.team_id as number, slug: entry.team_slug as string, name: entry.team_name as string, affiliation: entry.affiliation as string | null, strengths: entry.strengths as string | null, }, model: { id: entry.model_id as number, slug: entry.model_slug as string, name: entry.model_name as string, }, submission: { id: entry.submission_id as number, versionLabel: entry.version_label as string, status: entry.submission_status as string, datasetSplit: entry.dataset_split as string | null, submittedAt: entry.submitted_at as string, }, score: { rawValue: entry.raw_value as number | null, normalizedValue: entry.normalized_value as number | null, percentile: entry.percentile as number | null, }, metrics: scoresBySubmission.get(entry.submission_id as number) || {}, })); return { snapshot, entries }; } export function getRadarData( metricCodes?: string[], top = 8 ): { metricCodes: string[]; entries: RadarEntry[] } { const codes = metricCodes?.length ? metricCodes : DEFAULT_RADAR_METRICS; const board = getLeaderboard("latest"); const entries = board.entries.slice(0, top).map((entry) => ({ rank: entry.rank, model: entry.model, team: entry.team, score: entry.score, axes: codes.map((code) => { const metric = entry.metrics[code]; return { code, label: metric ? metric.displayName : code, value: metric?.percentile ?? null }; }), })); return { metricCodes: codes, entries }; } export function rerankSnapshot(snapshotId: number): void { const db = getDb(); const rows = db .prepare( `SELECT e.id, sr.raw_value FROM leaderboard_snapshot_entries e JOIN score_records sr ON sr.id = e.score_record_id WHERE e.snapshot_id = ? ORDER BY sr.raw_value DESC, e.id` ) .all(snapshotId) as Array<{ id: number; raw_value: number | null }>; for (const row of rows) { db.prepare("UPDATE leaderboard_snapshot_entries SET rank = ? WHERE id = ?").run(-row.id, row.id); } rows.forEach((_row, index) => { db.prepare("UPDATE leaderboard_snapshot_entries SET rank = ? WHERE id = ?").run(index + 1, rows[index].id); }); } export function getModelScores(modelId: string): { model: Record | null; submission: Record | null; scores: Array>; } { const db = getDb(); const model = db.prepare( `SELECT mo.*, t.name AS team_name FROM models mo JOIN teams t ON t.id = mo.team_id WHERE mo.id = ? OR mo.slug = ?` ).get(modelId, modelId) as Record | null; if (!model) return { model: null, submission: null, scores: [] }; const modelIdNum = model.id as number; const submission = db.prepare( "SELECT * FROM submissions WHERE model_id = ? ORDER BY submitted_at DESC, id DESC LIMIT 1" ).get(modelIdNum) as Record | null; if (!submission) return { model, submission: null, scores: [] }; const subId = submission.id as number; const scores = db.prepare( `SELECT m.code, m.display_name, m.category, sr.raw_value, sr.normalized_value, sr.percentile, sr.recorded_at FROM score_records sr JOIN metrics m ON m.id = sr.metric_id JOIN (SELECT metric_id, MAX(id) AS latest_id FROM score_records WHERE submission_id = ? GROUP BY metric_id) latest ON latest.latest_id = sr.id ORDER BY m.sort_order` ).all(subId) as Array>; return { model, submission, scores }; }