import json from pathlib import Path import gradio as gr import pandas as pd TITLE = 'EASI Leaderboard' DATA_PATH = Path("leaderboard.csv") META_PATH = Path("benchmark.json") DISPLAY_TEXT_LIMIT = 96 df = pd.read_csv(DATA_PATH) if "score" in df.columns: df["score"] = pd.to_numeric(df["score"], errors="coerce") meta = {} if META_PATH.exists(): try: meta = json.loads(META_PATH.read_text(encoding="utf-8")) except Exception: meta = {} def metric_narrative(): likely_metrics = (((meta.get("analysis") or {}).get("likely_metrics")) or []) if likely_metrics: return ( "This benchmark is ranked by the primary `score` column (descending). " "Reported benchmark metrics include: " + ", ".join([str(x) for x in likely_metrics]) + "." ) known_non_metrics = { "model_name", "score", "source_title", "source_url", "notes", } metric_like = [c for c in df.columns if c not in known_non_metrics] if metric_like: return ( "This benchmark is ranked by the primary `score` column (descending). " "Table columns include: " + ", ".join(metric_like) + "." ) return "This benchmark is ranked by the primary `score` column (descending)." def render(query, top_k): x = df.copy() if query.strip(): x = x[x["model_name"].astype(str).str.contains(query.strip(), case=False, na=False)] if "score" in x.columns: x = x.sort_values(by=["score"], ascending=False, na_position="last") x = x.head(int(top_k)).reset_index(drop=True) x = compact_for_display(x) x.insert(0, "display_rank", x.index + 1) return x def compact_for_display(frame): out = frame.copy() for col in out.columns: if out[col].dtype != object: continue out[col] = out[col].apply(truncate_cell) return out def truncate_cell(value): if value is None: return value text = str(value) if len(text) <= DISPLAY_TEXT_LIMIT: return text return text[: DISPLAY_TEXT_LIMIT - 3] + "..." with gr.Blocks(title=TITLE) as demo: gr.Markdown(f"# {TITLE}") gr.Markdown(metric_narrative()) gr.Markdown(f"Rows: {len(df)}") with gr.Row(): gr.DownloadButton("Download CSV", value=str(DATA_PATH)) if Path("leaderboard.json").exists(): gr.DownloadButton("Download JSON", value="leaderboard.json") with gr.Row(): query = gr.Textbox(label="Model contains") top_k = gr.Slider(minimum=5, maximum=500, step=1, value=100, label="Top K") table = gr.Dataframe( value=render("", 100), interactive=False, wrap=False, row_count=(20, "fixed"), ) query.change(render, [query, top_k], table) top_k.change(render, [query, top_k], table) demo.launch()