/* Static showcase: renders precomputed decision data (data/demo.json). No model runs here. */ const state = { data: null, active: 0 }; async function boot() { const demo = document.getElementById("demo"); try { const res = await fetch("data/demo.json", { cache: "no-cache" }); if (!res.ok) throw new Error(`HTTP ${res.status}`); state.data = await res.json(); } catch (err) { demo.innerHTML = `

Could not load data/demo.json (${err.message}).
` + `If you are viewing this from the filesystem, run a local server first: python -m http.server

`; return; } document.getElementById("model-name").textContent = state.data.model; renderTabs(); render(0); } function renderTabs() { const tabs = document.getElementById("preset-tabs"); tabs.innerHTML = ""; state.data.presets.forEach((preset, i) => { const b = document.createElement("button"); b.className = "tab" + (i === state.active ? " active" : ""); b.setAttribute("role", "tab"); b.textContent = `${preset.title} (${preset.num_fields} fields)`; b.addEventListener("click", () => render(i)); tabs.appendChild(b); }); } function fmtMs(ms) { return ms >= 1000 ? `${(ms / 1000).toFixed(2)} s` : `${Math.round(ms)} ms`; } function confColor(p) { if (p >= 0.9) return "var(--green)"; if (p >= 0.7) return "var(--amber)"; return "var(--red)"; } function esc(s) { return String(s).replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c])); } function render(index) { state.active = index; renderTabs(); const preset = state.data.presets[index]; const p = preset.parallel; const n = preset.naive; const fieldRows = p.fields.map((f) => { const top = f.top.slice(1, 3).map((t) => `${esc(t.choice)} ${(t.p * 100).toFixed(1)}%`).join(" · "); return ` ${esc(f.name)}
${esc(f.type)}
${esc(f.value)}
${(f.confidence * 100).toFixed(1)}%
${top ? `
runners-up: ${top}
` : ""} `; }).join(""); const jsonStr = esc(JSON.stringify(p.json, null, 2)); const naiveOk = n.schema_match; const naiveBadge = naiveOk ? `valid JSON` : `malformed / incomplete JSON`; document.getElementById("demo").innerHTML = `
parallel ${fmtMs(p.elapsed_ms)} (prefill ${fmtMs(p.prefill_ms)} + batched pass ${fmtMs(p.suffix_eval_ms)}) naive ${fmtMs(n.elapsed_ms)} · ${n.total_tokens} tokens · ${n.tokens_per_second} tok/s ${naiveBadge} parallel: schema-valid
Show the input context (${preset.context.length} chars)
${esc(preset.context)}
${fieldRows}
fielddecisionconfidence
Assembled JSON — never generated, so never malformed
${jsonStr}
Naive baseline — same model, writes the JSON itself
${esc(n.raw_text)}
`; const btn = document.getElementById("copy-json"); if (btn) { btn.addEventListener("click", async () => { try { await navigator.clipboard.writeText(JSON.stringify(p.json, null, 2)); btn.textContent = "copied"; setTimeout(() => (btn.textContent = "copy"), 1400); } catch { btn.textContent = "copy failed"; } }); } } boot();