Spaces:
Running
Running
File size: 4,665 Bytes
8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 5d25e99 8812c23 ce34868 5d25e99 8812c23 5d25e99 8812c23 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | const state = {
rows: [],
sort: { key: "mean", direction: "desc" },
};
let columns = [];
function configureColumns(metrics) {
columns = [
{ key: "rank", label: "Rank" },
{ key: "model", label: "Model" },
{ key: "access", label: "Access" },
{ key: "size", label: "Model size" },
{ key: "mean", label: "Mean", score: true },
...metrics.map(metric => ({ key: metric.key, label: metric.name, score: true, benchmark: true })),
];
}
const $ = (selector) => document.querySelector(selector);
const $$ = (selector) => [...document.querySelectorAll(selector)];
const escapeHtml = (value) => String(value ?? "").replace(/[&<>'"]/g, (char) => ({ "&": "&", "<": "<", ">": ">", "'": "'", '"': """ })[char]);
const formatScore = (value) => value == null || Number.isNaN(Number(value)) ? "β" : Number(value).toFixed(2);
function visibleColumns() {
return columns.filter(column =>
(column.key !== "access" || $("#show-access").value === "show") &&
(column.key !== "size" || $("#show-size").value === "show")
);
}
function renderHead() {
$("#leaderboard-head").innerHTML = `<tr>${visibleColumns().map((column) => {
const sortable = column.score || column.key === "model";
const active = state.sort.key === column.key;
const arrow = active ? (state.sort.direction === "asc" ? " β" : " β") : "";
const label = column.benchmark ? escapeHtml(column.label).replaceAll(" ", "<br>") : escapeHtml(column.label);
return `<th class="${sortable ? "sortable" : ""} ${active ? "active-sort" : ""}" data-key="${escapeHtml(column.key)}">${label}${arrow}</th>`;
}).join("")}</tr>`;
$$("th.sortable").forEach((header) => header.addEventListener("click", () => {
const key = header.dataset.key;
state.sort = { key, direction: state.sort.key === key && state.sort.direction === "desc" ? "asc" : "desc" };
renderHead();
renderRows();
}));
}
function filteredRows() {
const access = $("#model-filter").value;
const rows = state.rows.filter(row => !access || row.access === access);
const multiplier = state.sort.direction === "asc" ? 1 : -1;
return rows.sort((a, b) => {
const av = a[state.sort.key];
const bv = b[state.sort.key];
if (typeof av === "number" && typeof bv === "number") return (av - bv) * multiplier;
return String(av ?? "").localeCompare(String(bv ?? "")) * multiplier;
});
}
function cell(row, column, rank) {
const value = row[column.key];
if (column.key === "rank") return `<td class="rank ${rank < 3 ? "top" : ""}">${String(rank + 1).padStart(2, "0")}</td>`;
if (column.key === "model") {
const medal = ["π₯", "π₯", "π₯"][rank] || "";
const suffix = medal ? ` <span aria-label="Rank ${rank + 1}">${medal}</span>` : "";
const url = /^https:\/\/(huggingface\.co|ai\.google\.dev)\//.test(row.url || "") ? row.url : "";
return `<td class="model-cell">${url ? `<a href="${escapeHtml(url)}" title="${escapeHtml(row.link_title)}" target="_blank" rel="noopener noreferrer">${escapeHtml(value)}</a>${suffix}` : escapeHtml(value) + suffix}</td>`;
}
if (["access", "size"].includes(column.key)) {
const title = column.key === "size" ? row.size_note : "";
return `<td title="${escapeHtml(title)}"><span class="pill">${escapeHtml(value)}</span></td>`;
}
if (column.score) return `<td class="score ${column.key === "mean" ? "primary" : ""}">${formatScore(value)}</td>`;
return `<td>${escapeHtml(value ?? "β")}</td>`;
}
function renderRows() {
const rows = filteredRows();
$("#leaderboard-body").innerHTML = rows.map((row, rank) => `<tr>${visibleColumns().map((column) => cell(row, column, rank)).join("")}</tr>`).join("");
$(".table-shell").classList.toggle("is-empty", rows.length === 0);
$("#empty-state").classList.toggle("hidden", rows.length > 0);
$("#result-count").textContent = `${rows.length} model${rows.length === 1 ? "" : "s"} shown`;
}
async function loadData() {
try {
const response = await fetch("/leaderboard-assets/results.json");
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const payload = await response.json();
state.rows = payload.rows;
configureColumns(payload.metrics);
renderHead();
renderRows();
} catch (error) {
$("#leaderboard-body").innerHTML = "";
$("#data-warning").textContent = `The leaderboard could not be loaded: ${error.message}`;
$("#data-warning").classList.remove("hidden");
}
}
$("#model-filter").addEventListener("change", renderRows);
[$("#show-access"), $("#show-size")].forEach(control => control.addEventListener("change", () => {
renderHead();
renderRows();
}));
loadData();
|