"use strict";
const MODE_META = {
unipc: { label: "UniPC ODE", short: "UniPC", color: "#3659a7" },
euler: { label: "Euler ODE", short: "Euler", color: "#7351a6" },
cps03: { label: "CPS 0.3", short: "CPS 0.3", color: "#c37b21" },
cps07: { label: "CPS 0.7", short: "CPS 0.7", color: "#0a7457" },
};
const state = {
index: null,
run: null,
runData: null,
baselineData: null,
domain: "all",
query: "",
sort: "delta-desc",
dialogTask: null,
loadToken: 0,
};
const elements = {
checkpoint: document.querySelector("#checkpoint-select"),
modeSwitcher: document.querySelector("#mode-switcher"),
scoreCards: document.querySelector("#score-cards"),
trendLegend: document.querySelector("#trend-legend"),
trendChart: document.querySelector("#trend-chart"),
taskSearch: document.querySelector("#task-search"),
taskSort: document.querySelector("#task-sort"),
domainFilter: document.querySelector("#domain-filter"),
taskTableBody: document.querySelector("#task-table-body"),
taskSummary: document.querySelector("#task-summary"),
emptyState: document.querySelector("#empty-state"),
dialog: document.querySelector("#task-dialog"),
dialogClose: document.querySelector("#dialog-close"),
dialogKicker: document.querySelector("#dialog-kicker"),
dialogTitle: document.querySelector("#dialog-title"),
dialogRawName: document.querySelector("#dialog-raw-name"),
dialogMetrics: document.querySelector("#dialog-metrics"),
dialogPrompt: document.querySelector("#dialog-prompt"),
sampleGrid: document.querySelector("#sample-grid"),
datasetStatus: document.querySelector("#dataset-status"),
loadingOverlay: document.querySelector("#loading-overlay"),
};
function escapeHtml(value) {
return String(value)
.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">")
.replaceAll('"', """)
.replaceAll("'", "'");
}
function fmtScore(value) {
return Number(value).toFixed(6);
}
function fmtDelta(value, precision = 6) {
const numeric = Number(value);
if (Math.abs(numeric) < 0.5 * 10 ** -precision) {
return (0).toFixed(precision);
}
return `${numeric > 0 ? "+" : "−"}${Math.abs(numeric).toFixed(precision)}`;
}
function deltaClass(value) {
if (value > 1e-10) return "positive";
if (value < -1e-10) return "negative";
return "neutral";
}
function deltaArrow(value) {
if (value > 1e-10) return "↑";
if (value < -1e-10) return "↓";
return "→";
}
function prettyTaskName(name) {
const withoutSuffix = name.replace(/_data-generator$/, "");
const [prefix, ...rest] = withoutSuffix.split("_");
const phrase = rest.join(" ").replace(/\b\w/g, (letter) => letter.toUpperCase());
return `${prefix} · ${phrase}`;
}
function domainLabel(domain) {
return domain === "In_Domain" ? "In-Domain" : "Out-of-Domain";
}
function bestDefaultRun(index) {
return [...index.runs]
.filter((run) => !run.isBaseline)
.sort((a, b) => b.scores.overall - a.scores.overall)[0];
}
function runFromUrl(index) {
const params = new URLSearchParams(window.location.search);
const checkpoint = Number(params.get("checkpoint"));
const mode = params.get("mode");
return index.runs.find(
(run) => !run.isBaseline && run.checkpoint === checkpoint && run.mode === mode,
);
}
function updateUrl(taskName = null) {
if (!state.run) return;
const params = new URLSearchParams();
params.set("checkpoint", state.run.checkpoint);
params.set("mode", state.run.mode);
const selectedTask = taskName ?? state.dialogTask;
if (selectedTask) params.set("task", selectedTask);
history.replaceState(null, "", `${window.location.pathname}?${params.toString()}`);
}
async function loadJson(url) {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Could not load ${url} (${response.status})`);
}
return response.json();
}
async function initialize() {
try {
state.index = await loadJson("./data/index.json");
state.baselineData = await loadJson(state.index.baseline.dataUrl);
state.run = runFromUrl(state.index) ?? bestDefaultRun(state.index);
populateHeader();
populateRunControls();
bindEvents();
renderTrend();
await selectRun(state.run);
const requestedTask = new URLSearchParams(window.location.search).get("task");
if (requestedTask && state.index.tasks.some((task) => task.name === requestedTask)) {
await openTask(requestedTask);
}
document.querySelector(".status-dot")?.classList.add("ready");
elements.datasetStatus.textContent = `${state.index.taskCount} tasks · ${state.index.sampleCountPerRun} matched samples`;
elements.loadingOverlay.classList.add("hidden");
} catch (error) {
console.error(error);
elements.datasetStatus.textContent = "Archive failed to load";
elements.loadingOverlay.querySelector("p").textContent = error.message;
elements.loadingOverlay.querySelector(".loading-line").hidden = true;
}
}
function populateHeader() {
document.querySelector("#hero-run-count").textContent = state.index.runCount;
document.querySelector("#hero-video-count").textContent =
state.index.totalVideoCount.toLocaleString("en-US");
document.querySelector("#hero-task-count").textContent = state.index.taskCount;
}
function populateRunControls() {
const checkpoints = [...new Set(state.index.runs.filter((run) => !run.isBaseline).map((run) => run.checkpoint))].sort(
(a, b) => a - b,
);
elements.checkpoint.innerHTML = checkpoints
.map((checkpoint) => ``)
.join("");
elements.checkpoint.value = state.run.checkpoint;
elements.modeSwitcher.innerHTML = state.index.modeOrder
.map((mode) => {
const meta = MODE_META[mode];
return ``;
})
.join("");
updateModeSelection();
}
function bindEvents() {
elements.checkpoint.addEventListener("change", () => {
chooseRun(Number(elements.checkpoint.value), state.run.mode);
});
elements.modeSwitcher.addEventListener("click", (event) => {
const button = event.target.closest("[data-mode]");
if (!button) return;
chooseRun(state.run.checkpoint, button.dataset.mode);
});
elements.taskSearch.addEventListener("input", () => {
state.query = elements.taskSearch.value.trim().toLowerCase();
renderTasks();
});
elements.taskSort.addEventListener("change", () => {
state.sort = elements.taskSort.value;
renderTasks();
});
elements.domainFilter.addEventListener("click", (event) => {
const button = event.target.closest("[data-domain]");
if (!button) return;
state.domain = button.dataset.domain;
elements.domainFilter.querySelectorAll("button").forEach((candidate) => {
candidate.classList.toggle("active", candidate === button);
});
renderTasks();
});
elements.taskTableBody.addEventListener("click", (event) => {
const button = event.target.closest("[data-task]");
if (button) openTask(button.dataset.task);
});
elements.dialogClose.addEventListener("click", closeDialog);
elements.dialog.addEventListener("click", (event) => {
if (event.target === elements.dialog) closeDialog();
});
elements.dialog.addEventListener("close", () => {
state.dialogTask = null;
updateUrl();
stopDialogVideos();
});
elements.sampleGrid.addEventListener("click", (event) => {
const button = event.target.closest("[data-sync-pair]");
if (!button) return;
const card = button.closest(".sample-card");
const videos = [...card.querySelectorAll("video")];
videos.forEach((video) => {
video.currentTime = 0;
video.play().catch(() => {});
});
});
}
function updateModeSelection() {
elements.modeSwitcher.querySelectorAll("[data-mode]").forEach((button) => {
button.classList.toggle("active", button.dataset.mode === state.run.mode);
});
}
function chooseRun(checkpoint, mode) {
const run = state.index.runs.find(
(candidate) =>
!candidate.isBaseline && candidate.checkpoint === checkpoint && candidate.mode === mode,
);
if (!run || run.id === state.run.id) return;
selectRun(run);
}
async function selectRun(run) {
const loadToken = ++state.loadToken;
state.run = run;
elements.checkpoint.value = run.checkpoint;
updateModeSelection();
updateUrl();
renderScoreCards();
renderTrend();
elements.taskTableBody.style.opacity = "0.45";
const runData = await loadJson(run.dataUrl);
if (loadToken !== state.loadToken) return;
state.runData = runData;
elements.taskTableBody.style.opacity = "";
renderTasks();
if (elements.dialog.open && state.dialogTask) {
await renderTaskDialog(state.dialogTask);
}
}
function renderScoreCards() {
const baseline = state.index.baseline.scores;
const scoreItems = [
["Overall", state.run.scores.overall, baseline.overall, "500 samples"],
["In-Domain", state.run.scores.inDomain, baseline.inDomain, "250 samples"],
["Out-of-Domain", state.run.scores.outOfDomain, baseline.outOfDomain, "250 samples"],
[
"Task wins",
state.run.taskStats.wins,
state.index.taskCount,
`${state.run.taskStats.losses} drops · ${state.run.taskStats.ties} ties`,
],
];
elements.scoreCards.innerHTML = scoreItems
.map(([label, score, base, note], index) => {
const delta = index === 3 ? null : score - base;
const value = index === 3 ? `${score}/${base}` : fmtScore(score);
const baselineText = index === 3 ? "vs task baseline" : `baseline ${fmtScore(base)}`;
return `
${escapeHtml(baselineSample.prompt)}