Spaces:
Running
Running
Add CREF
#4
by AndiA - opened
This view is limited to 50 files because it contains too many changes. See the raw diff here.
- CLAUDE.md +4 -1
- benchmarks.py +55 -0
- cref/README.md +5 -0
- cref/__init__.py +0 -0
- cref/charts.py +148 -0
- cref/controls.py +73 -0
- cref/data/v1/leaderboard/all_samples/history/2026-07-04.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-07-11.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-07-18.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-07-25.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-08-01.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-08-08.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-08-15.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-08-22.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-08-29.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-09-05.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-09-12.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-09-19.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-09-26.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-10-03.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-10-10.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-10-17.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-10-24.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-10-31.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-11-01.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-11-02.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-11-03.json +0 -0
- cref/data/v1/leaderboard/all_samples/history/2026-11-04.json +0 -0
- cref/data/v1/leaderboard/all_samples/latest.json +0 -0
- cref/data/v1/leaderboard/history/2026-07-04.json +0 -0
- cref/data/v1/leaderboard/history/2026-07-11.json +0 -0
- cref/data/v1/leaderboard/history/2026-07-18.json +0 -0
- cref/data/v1/leaderboard/history/2026-07-25.json +0 -0
- cref/data/v1/leaderboard/history/2026-08-01.json +0 -0
- cref/data/v1/leaderboard/history/2026-08-08.json +0 -0
- cref/data/v1/leaderboard/history/2026-08-15.json +0 -0
- cref/data/v1/leaderboard/history/2026-08-22.json +0 -0
- cref/data/v1/leaderboard/history/2026-08-29.json +0 -0
- cref/data/v1/leaderboard/history/2026-09-05.json +0 -0
- cref/data/v1/leaderboard/history/2026-09-12.json +0 -0
- cref/data/v1/leaderboard/history/2026-09-19.json +0 -0
- cref/data/v1/leaderboard/history/2026-09-26.json +0 -0
- cref/data/v1/leaderboard/history/2026-10-03.json +0 -0
- cref/data/v1/leaderboard/history/2026-10-10.json +0 -0
- cref/data/v1/leaderboard/history/2026-10-17.json +0 -0
- cref/data/v1/leaderboard/history/2026-10-24.json +0 -0
- cref/data/v1/leaderboard/history/2026-10-31.json +0 -0
- cref/data/v1/leaderboard/history/2026-11-01.json +0 -0
- cref/data/v1/leaderboard/history/2026-11-02.json +0 -0
- cref/data/v1/leaderboard/history/2026-11-03.json +0 -0
CLAUDE.md
CHANGED
|
@@ -30,7 +30,9 @@ No test or lint frameworks are configured.
|
|
| 30 |
```
|
| 31 |
fev-leaderboard-app.py # Main entry point (Streamlit multi-page router)
|
| 32 |
save_tables.py # Generates tables/ and src/vendor/ from a single fev commit (run at Docker build)
|
| 33 |
-
|
|
|
|
|
|
|
| 34 |
├── fev_bench.py # Main leaderboard: computes leaderboard/pairwise, renders them
|
| 35 |
└── about.py # Help page with links
|
| 36 |
src/
|
|
@@ -38,6 +40,7 @@ src/
|
|
| 38 |
├── strings.py # UI text, metric descriptions, paper citations
|
| 39 |
├── task_groups.py # Task groupings by frequency and domain
|
| 40 |
└── vendor/ # GENERATED, gitignored: compute logic copied from the fev repo
|
|
|
|
| 41 |
└── fev_bench_compute.py
|
| 42 |
tables/ # GENERATED by save_tables.py, gitignored
|
| 43 |
├── summaries.csv # Raw evaluation summaries (leaderboards are computed from these)
|
|
|
|
| 30 |
```
|
| 31 |
fev-leaderboard-app.py # Main entry point (Streamlit multi-page router)
|
| 32 |
save_tables.py # Generates tables/ and src/vendor/ from a single fev commit (run at Docker build)
|
| 33 |
+
benchmarks.py # Combined navigation of fev-bench and CREF, and the switcher between them
|
| 34 |
+
fev_pages/ # Not pages/: Streamlit would read that as a page folder and show
|
| 35 |
+
# "Page not found" on the first visit to /cref after a restart
|
| 36 |
├── fev_bench.py # Main leaderboard: computes leaderboard/pairwise, renders them
|
| 37 |
└── about.py # Help page with links
|
| 38 |
src/
|
|
|
|
| 40 |
├── strings.py # UI text, metric descriptions, paper citations
|
| 41 |
├── task_groups.py # Task groupings by frequency and domain
|
| 42 |
└── vendor/ # GENERATED, gitignored: compute logic copied from the fev repo
|
| 43 |
+
cref/ # The CREF leaderboard (/cref pages); see cref/README.md
|
| 44 |
└── fev_bench_compute.py
|
| 45 |
tables/ # GENERATED by save_tables.py, gitignored
|
| 46 |
├── summaries.csv # Raw evaluation summaries (leaderboards are computed from these)
|
benchmarks.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
|
| 3 |
+
from cref import navigation
|
| 4 |
+
|
| 5 |
+
SWITCHER_STYLE = """<style>
|
| 6 |
+
.benchmarks {position: relative; width: fit-content; font-weight: 700}
|
| 7 |
+
.benchmarks summary {display: flex; align-items: center; gap: 0.6rem; padding: 0.1rem 0.6rem 0.1rem 0.3rem;
|
| 8 |
+
margin-left: -0.3rem; border-radius: 0.5rem; font-size: 1.4rem; color: #31333f; cursor: pointer; list-style: none}
|
| 9 |
+
.benchmarks summary::-webkit-details-marker {display: none}
|
| 10 |
+
.benchmarks summary::after {content: ""; width: 0.45rem; height: 0.45rem; border: solid #6093c4;
|
| 11 |
+
border-width: 0 2.5px 2.5px 0; transform: translateY(-25%) rotate(45deg)}
|
| 12 |
+
.benchmarks[open] summary::after {transform: translateY(25%) rotate(-135deg)}
|
| 13 |
+
.benchmarks summary:hover, .benchmarks[open] summary {background: #f0f2f6}
|
| 14 |
+
.benchmarks div {position: absolute; z-index: 1000; top: calc(100% + 0.3rem); left: -0.3rem; min-width: 10rem;
|
| 15 |
+
padding: 0.3rem; background: #fff; border: 1px solid #e3e6ea; border-radius: 0.6rem;
|
| 16 |
+
box-shadow: 0 6px 20px rgb(0 0 0 / 8%)}
|
| 17 |
+
.benchmarks a {display: block; padding: 0.4rem 0.6rem; border-radius: 0.4rem; font-size: 1rem; color: #31333f;
|
| 18 |
+
text-decoration: none}
|
| 19 |
+
.benchmarks a:hover {background: #f0f2f6}
|
| 20 |
+
.benchmarks a[aria-current="page"] {color: #6093c4}
|
| 21 |
+
</style>"""
|
| 22 |
+
|
| 23 |
+
BENCHMARKS = [("fev-bench", "/"), ("CREF", "/cref")]
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
# Plain links, so a switch loads the other benchmark afresh instead of keeping fev's sidebar.
|
| 27 |
+
def switcher(current: str) -> str:
|
| 28 |
+
links = "".join(
|
| 29 |
+
f'<a href="{href}" aria-current="{"page" if name == current else "false"}">{name}</a>'
|
| 30 |
+
for name, href in BENCHMARKS
|
| 31 |
+
)
|
| 32 |
+
return f'{SWITCHER_STYLE}<details class="benchmarks"><summary>{current}</summary><div>{links}</div></details>'
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
def run(fev: list[st.Page]) -> None:
|
| 36 |
+
cref = navigation.pages()
|
| 37 |
+
page = st.navigation(fev + cref, position="hidden")
|
| 38 |
+
# huggingface.co/spaces/autogluon/fev-bench?benchmark=cref: Hugging Face passes only the
|
| 39 |
+
# query string into the app, so this opens CREF on the first load.
|
| 40 |
+
if not st.session_state.get("routed"):
|
| 41 |
+
st.session_state["routed"] = True
|
| 42 |
+
if st.query_params.get("benchmark") == "cref" and page not in cref:
|
| 43 |
+
st.switch_page(cref[0])
|
| 44 |
+
if page in cref:
|
| 45 |
+
navigation.page_config()
|
| 46 |
+
with st.container(horizontal=True, vertical_alignment="center", gap="large"):
|
| 47 |
+
st.html(switcher("CREF"), width="content")
|
| 48 |
+
for link in cref:
|
| 49 |
+
st.page_link(link)
|
| 50 |
+
else:
|
| 51 |
+
with st.sidebar:
|
| 52 |
+
st.html(switcher("fev-bench"))
|
| 53 |
+
for link in fev:
|
| 54 |
+
st.page_link(link)
|
| 55 |
+
page.run()
|
cref/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CREF leaderboard
|
| 2 |
+
|
| 3 |
+
The CREF leaderboard, served at `/cref`. It reads the published leaderboards from
|
| 4 |
+
`CREF_DATA_URL`, or from `cref/data/` when that is unset. Model names, types and links are
|
| 5 |
+
in `models.toml`; the tasks are in `tasks.csv`.
|
cref/__init__.py
ADDED
|
File without changes
|
cref/charts.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from collections.abc import Sequence
|
| 4 |
+
from typing import Any
|
| 5 |
+
|
| 6 |
+
import altair as alt
|
| 7 |
+
import pandas as pd
|
| 8 |
+
|
| 9 |
+
from cref import views
|
| 10 |
+
from cref.views import COLUMNS
|
| 11 |
+
|
| 12 |
+
PALETTE = [
|
| 13 |
+
"#4E79A7", "#F28E2B", "#59A14F", "#E15759", "#B07AA1", "#76B7B2", "#EDC948", "#9C755F",
|
| 14 |
+
"#FF9DA7", "#BAB0AC", "#A0CBE8", "#FFBE7D", "#8CD17D", "#FF9D9A", "#D4A6C8", "#86BCB6",
|
| 15 |
+
"#F1CE63", "#D7B5A6", "#499894", "#79706E", "#1F3A93", "#6B4226", "#2E7D32", "#8E24AA",
|
| 16 |
+
] # fmt: skip
|
| 17 |
+
LEGEND_COLUMNS = 3
|
| 18 |
+
PAIRWISE = {
|
| 19 |
+
"win_rate": ("Win rate (%)", [0, 100], 50),
|
| 20 |
+
"skill_score": ("Skill score (%)", [-40, 40], 0),
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def skill_chart(df: pd.DataFrame, models: views.Models) -> alt.LayerChart:
|
| 25 |
+
data = views.competitors(df.dropna(subset=["skill_score"]), models)
|
| 26 |
+
labels = views.unique_labels(zip(data["model_id"], data["model"], strict=True))
|
| 27 |
+
data = pd.DataFrame(
|
| 28 |
+
{
|
| 29 |
+
"label": data["model_id"].map(labels),
|
| 30 |
+
"skill_score": data["skill_score"],
|
| 31 |
+
"type": [views.kind(m, models).label for m in data["model_id"]],
|
| 32 |
+
}
|
| 33 |
+
)
|
| 34 |
+
kinds = [k for k in [*views.MODEL_TYPES.values(), views.OTHER] if k.label in set(data["type"])]
|
| 35 |
+
y = alt.Y("label:N", sort=None, title=None, axis=alt.Axis(labelLimit=320, ticks=False))
|
| 36 |
+
x = alt.X("skill_score:Q", title=COLUMNS["skill_score"], axis=alt.Axis(grid=False))
|
| 37 |
+
bars = (
|
| 38 |
+
alt.Chart(data)
|
| 39 |
+
.mark_bar(cornerRadiusEnd=3)
|
| 40 |
+
.encode(
|
| 41 |
+
x=x,
|
| 42 |
+
y=y,
|
| 43 |
+
color=alt.Color(
|
| 44 |
+
"type:N",
|
| 45 |
+
scale=alt.Scale(domain=[k.label for k in kinds], range=[k.bar for k in kinds]),
|
| 46 |
+
title=None,
|
| 47 |
+
legend=alt.Legend(orient="top"),
|
| 48 |
+
),
|
| 49 |
+
tooltip=[alt.Tooltip("skill_score:Q", title=COLUMNS["skill_score"], format=".1f")],
|
| 50 |
+
)
|
| 51 |
+
)
|
| 52 |
+
values = [
|
| 53 |
+
alt.Chart(data)
|
| 54 |
+
.transform_filter(test)
|
| 55 |
+
.mark_text(align=align, dx=dx, fontSize=11, color="#414D5C")
|
| 56 |
+
.encode(x=x, y=y, text=alt.Text("skill_score:Q", format=".1f"))
|
| 57 |
+
for test, align, dx in [
|
| 58 |
+
("datum.skill_score >= 0", "left", 4),
|
| 59 |
+
("datum.skill_score < 0", "right", -4),
|
| 60 |
+
]
|
| 61 |
+
]
|
| 62 |
+
return alt.layer(bars, *values).properties(height=max(120, 26 * len(data)))
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def pairwise_frame(
|
| 66 |
+
df: pd.DataFrame, models: views.Models, pairwise: dict[str, Any], value: str
|
| 67 |
+
) -> tuple[pd.DataFrame, list[str]]:
|
| 68 |
+
shown = views.competitors(df, models)
|
| 69 |
+
labels = views.unique_labels(zip(shown["model_id"], shown["model"], strict=True))
|
| 70 |
+
cells = [
|
| 71 |
+
{"model": labels[a], "opponent": labels[b], "value": 100 * cell[value]}
|
| 72 |
+
for a in labels
|
| 73 |
+
for b, cell in pairwise.get(a, {}).items()
|
| 74 |
+
if b in labels and cell[value] is not None
|
| 75 |
+
]
|
| 76 |
+
return pd.DataFrame(cells, columns=["model", "opponent", "value"]), list(labels.values())
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def pairwise_chart(cells: pd.DataFrame, order: Sequence[str], value: str) -> alt.LayerChart:
|
| 80 |
+
title, domain, mid = PAIRWISE[value]
|
| 81 |
+
far = (domain[1] - mid) * 0.6
|
| 82 |
+
axis = {"labelLimit": 320, "ticks": False, "domain": False}
|
| 83 |
+
base = alt.Chart(cells).encode(
|
| 84 |
+
x=alt.X(
|
| 85 |
+
"opponent:N",
|
| 86 |
+
sort=list(order),
|
| 87 |
+
title=None,
|
| 88 |
+
axis=alt.Axis(orient="top", labelAngle=-90, **axis),
|
| 89 |
+
),
|
| 90 |
+
y=alt.Y("model:N", sort=list(order), title=None, axis=alt.Axis(**axis)),
|
| 91 |
+
)
|
| 92 |
+
heat = base.mark_rect().encode(
|
| 93 |
+
color=alt.Color(
|
| 94 |
+
"value:Q",
|
| 95 |
+
legend=None,
|
| 96 |
+
scale=alt.Scale(scheme="purplegreen", domain=domain, domainMid=mid, clamp=True),
|
| 97 |
+
),
|
| 98 |
+
tooltip=[alt.Tooltip("value:Q", title=title, format=".1f")],
|
| 99 |
+
)
|
| 100 |
+
text = base.mark_text(fontSize=9).encode(
|
| 101 |
+
text=alt.Text("value:Q", format=".0f"),
|
| 102 |
+
color=alt.condition(
|
| 103 |
+
f"abs(datum.value - {mid}) > {far}", alt.value("#FFFFFF"), alt.value("#31333F")
|
| 104 |
+
),
|
| 105 |
+
)
|
| 106 |
+
return alt.layer(heat, text).properties(height=alt.Step(22))
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
def trend_frame(rows: list[dict[str, Any]], column: str, labels: dict[str, str]) -> pd.DataFrame:
|
| 110 |
+
df = pd.DataFrame(rows, columns=["date", "model_id", column])
|
| 111 |
+
df = df[df["model_id"].isin(list(labels))].dropna(subset=[column])
|
| 112 |
+
return pd.DataFrame(
|
| 113 |
+
{
|
| 114 |
+
"date": pd.to_datetime(df["date"]),
|
| 115 |
+
"value": 100 * df[column],
|
| 116 |
+
"model": df["model_id"].map(labels),
|
| 117 |
+
}
|
| 118 |
+
)
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
def trend_chart(df: pd.DataFrame, order: Sequence[str], title: str) -> alt.Chart:
|
| 122 |
+
order = list(order)
|
| 123 |
+
picked = alt.selection_point(fields=["model"], bind="legend")
|
| 124 |
+
colors = [PALETTE[i % len(PALETTE)] for i in range(len(order))]
|
| 125 |
+
return (
|
| 126 |
+
alt.Chart(df)
|
| 127 |
+
.mark_line(point=True)
|
| 128 |
+
.encode(
|
| 129 |
+
x=alt.X("date:T", title=None, axis=alt.Axis(format="%b %d")),
|
| 130 |
+
y=alt.Y("value:Q", title=title, scale=alt.Scale(zero=False)),
|
| 131 |
+
color=alt.Color(
|
| 132 |
+
"model:N",
|
| 133 |
+
scale=alt.Scale(domain=order, range=colors),
|
| 134 |
+
title=None,
|
| 135 |
+
legend=alt.Legend(
|
| 136 |
+
orient="bottom", columns=LEGEND_COLUMNS, symbolLimit=0, labelLimit=320
|
| 137 |
+
),
|
| 138 |
+
),
|
| 139 |
+
opacity=alt.condition(picked, alt.value(1.0), alt.value(0.12)),
|
| 140 |
+
tooltip=[
|
| 141 |
+
alt.Tooltip("date:T", title="Day"),
|
| 142 |
+
alt.Tooltip("value:Q", title=title, format=".1f"),
|
| 143 |
+
],
|
| 144 |
+
)
|
| 145 |
+
.add_params(picked)
|
| 146 |
+
# The height includes the legend, about 30 px a row.
|
| 147 |
+
.properties(height=460 + 30 * -(-len(order) // LEGEND_COLUMNS))
|
| 148 |
+
)
|
cref/controls.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import streamlit as st
|
| 4 |
+
|
| 5 |
+
from cref import source
|
| 6 |
+
from cref import views
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
@st.cache_resource(on_release=source.Source.close)
|
| 10 |
+
def data_source(variant: str = "release") -> source.Source:
|
| 11 |
+
return source.Source.from_env(variant)
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
@st.cache_resource(on_release=source.History.close)
|
| 15 |
+
def history(variant: str = "release") -> source.History:
|
| 16 |
+
return source.History.from_env(variant)
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@st.cache_resource
|
| 20 |
+
def models() -> views.Models:
|
| 21 |
+
return views.load_models()
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
@st.cache_resource
|
| 25 |
+
def tasks():
|
| 26 |
+
return views.load_tasks()
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def metric_control() -> str:
|
| 30 |
+
return st.segmented_control(
|
| 31 |
+
"Metric",
|
| 32 |
+
list(views.METRICS),
|
| 33 |
+
default="mase",
|
| 34 |
+
required=True,
|
| 35 |
+
format_func=views.METRICS.get,
|
| 36 |
+
help=views.METRIC_HELP,
|
| 37 |
+
)
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def type_controls(models: views.Models) -> set[str]:
|
| 41 |
+
present = [t for t in views.MODEL_TYPES if any(i.get("type") == t for i in models.values())]
|
| 42 |
+
if not present:
|
| 43 |
+
return set(views.MODEL_TYPES)
|
| 44 |
+
picked = st.pills(
|
| 45 |
+
"Model types",
|
| 46 |
+
present,
|
| 47 |
+
selection_mode="multi",
|
| 48 |
+
default=present,
|
| 49 |
+
format_func=lambda t: views.MODEL_TYPES[t].label,
|
| 50 |
+
help="Hides the other models. The seasonal naive baseline is always shown.",
|
| 51 |
+
)
|
| 52 |
+
return set(picked or ())
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
def board_controls(models: views.Models) -> tuple[str, str, set[str]]:
|
| 56 |
+
variants = data_source("all").get().board is not None
|
| 57 |
+
cells = st.columns([1, 1.5, 3] if variants else [1, 4], vertical_alignment="bottom")
|
| 58 |
+
with cells[0]:
|
| 59 |
+
metric = metric_control()
|
| 60 |
+
variant = "release"
|
| 61 |
+
if variants:
|
| 62 |
+
with cells[1]:
|
| 63 |
+
variant = st.segmented_control(
|
| 64 |
+
"Pretrained samples counted",
|
| 65 |
+
list(views.VARIANTS),
|
| 66 |
+
default="release",
|
| 67 |
+
required=True,
|
| 68 |
+
format_func=views.VARIANTS.get,
|
| 69 |
+
help=views.VARIANT_HELP,
|
| 70 |
+
)
|
| 71 |
+
with cells[-1]:
|
| 72 |
+
types = type_controls(models)
|
| 73 |
+
return metric, variant, types
|
cref/data/v1/leaderboard/all_samples/history/2026-07-04.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-07-11.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-07-18.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-07-25.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-08-01.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-08-08.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-08-15.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-08-22.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-08-29.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-09-05.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-09-12.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-09-19.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-09-26.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-10-03.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-10-10.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-10-17.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-10-24.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-10-31.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-11-01.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-11-02.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-11-03.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/history/2026-11-04.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/all_samples/latest.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-07-04.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-07-11.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-07-18.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-07-25.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-08-01.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-08-08.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-08-15.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-08-22.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-08-29.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-09-05.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-09-12.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-09-19.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-09-26.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-10-03.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-10-10.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-10-17.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-10-24.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-10-31.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-11-01.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-11-02.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
cref/data/v1/leaderboard/history/2026-11-03.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|