cvpfus Codex commited on
Commit ·
0347c74
1
Parent(s): d1b4ad4
Render demo API checks in runbook
Browse filesCo-authored-by: Codex <codex@openai.com>
- FIELD_NOTES.md +1 -1
- README.md +2 -2
- SUBMISSION.md +1 -1
- scripts/verify.py +3 -0
- static/app.css +36 -0
- static/app.js +11 -0
- static/index.html +1 -0
FIELD_NOTES.md
CHANGED
|
@@ -28,7 +28,7 @@ The app exposes the same budget through `/api/model-budget`, including numeric `
|
|
| 28 |
|
| 29 |
Runtime setup is also data-backed. `/api/runtime-setup` lists the app command, llama.cpp launch command, model-specific runtime paths, environment values, and fallbacks. The session panel renders a compact version so the demo can distinguish real model wiring from deterministic safety nets.
|
| 30 |
|
| 31 |
-
The judge runbook lives at `/api/demo-script` and is rendered in the session panel. It keeps the live presentation repeatable by pairing visible actions with API checks for health, model budget, runtime setup, runtime status, image descriptions, reader narration, and speech.
|
| 32 |
|
| 33 |
Submission readiness lives at `/api/submission-readiness`. It aggregates the demo-critical checks into one payload: model budget, award evidence, custom frontend assets, runtime setup, accessibility audit, image receipts, and executable demo API checks.
|
| 34 |
|
|
|
|
| 28 |
|
| 29 |
Runtime setup is also data-backed. `/api/runtime-setup` lists the app command, llama.cpp launch command, model-specific runtime paths, environment values, and fallbacks. The session panel renders a compact version so the demo can distinguish real model wiring from deterministic safety nets.
|
| 30 |
|
| 31 |
+
The judge runbook lives at `/api/demo-script` and is rendered in the session panel with its API evidence checks. It keeps the live presentation repeatable by pairing visible actions with API checks for health, model budget, runtime setup, runtime status, image descriptions, reader narration, and speech.
|
| 32 |
|
| 33 |
Submission readiness lives at `/api/submission-readiness`. It aggregates the demo-critical checks into one payload: model budget, award evidence, custom frontend assets, runtime setup, accessibility audit, image receipts, and executable demo API checks.
|
| 34 |
|
README.md
CHANGED
|
@@ -75,7 +75,7 @@ The verifier checks syntax, static assets, Space metadata consistency, determini
|
|
| 75 |
|
| 76 |
`/api/runtime-setup` exposes the commands, environment values, and fallback paths used for the model stack so the demo can be reproduced from the same data the UI displays.
|
| 77 |
|
| 78 |
-
`/api/demo-script` exposes a compact judge runbook with the visible actions and API checks that prove the submission claims. The session panel renders those actions as the Judge Runbook.
|
| 79 |
|
| 80 |
`/api/accessibility-audit` exposes structured evidence for semantic reading order, keyboard navigation, reader cursor state, shortcut safety, live narration, image alt text, transcript review, user-controlled playback, and fallback resilience.
|
| 81 |
|
|
@@ -120,7 +120,7 @@ Navigation commands interrupt current speech before starting the next request, m
|
|
| 120 |
|
| 121 |
Reader-brain, image-description, speech, and image-generation responses include `elapsed_ms`. The session panel and transcript show recent latency so the Field Notes can discuss responsiveness with concrete numbers.
|
| 122 |
|
| 123 |
-
The session panel renders the judge runbook from `/api/demo-script`, plus manifest-backed evidence for Tiny Titan, Llama Champion, Off-Brand, and Field Notes. A model-budget panel reads `/api/model-budget` so judges can see each role's parameter count in the live app.
|
| 124 |
|
| 125 |
A submission-readiness panel reads `/api/submission-readiness`, giving judges one compact rollup of the claims the live app can prove.
|
| 126 |
|
|
|
|
| 75 |
|
| 76 |
`/api/runtime-setup` exposes the commands, environment values, and fallback paths used for the model stack so the demo can be reproduced from the same data the UI displays.
|
| 77 |
|
| 78 |
+
`/api/demo-script` exposes a compact judge runbook with the visible actions and API checks that prove the submission claims. The session panel renders those actions and API evidence checks as the Judge Runbook.
|
| 79 |
|
| 80 |
`/api/accessibility-audit` exposes structured evidence for semantic reading order, keyboard navigation, reader cursor state, shortcut safety, live narration, image alt text, transcript review, user-controlled playback, and fallback resilience.
|
| 81 |
|
|
|
|
| 120 |
|
| 121 |
Reader-brain, image-description, speech, and image-generation responses include `elapsed_ms`. The session panel and transcript show recent latency so the Field Notes can discuss responsiveness with concrete numbers.
|
| 122 |
|
| 123 |
+
The session panel renders the judge runbook and API evidence checks from `/api/demo-script`, plus manifest-backed evidence for Tiny Titan, Llama Champion, Off-Brand, and Field Notes. A model-budget panel reads `/api/model-budget` so judges can see each role's parameter count in the live app.
|
| 124 |
|
| 125 |
A submission-readiness panel reads `/api/submission-readiness`, giving judges one compact rollup of the claims the live app can prove.
|
| 126 |
|
SUBMISSION.md
CHANGED
|
@@ -32,7 +32,7 @@ The prototype is designed for a live hackathon demo: every model-facing path has
|
|
| 32 |
2. Turn on screen-reader mode and press `Space` or `Next` to narrate the first semantic node.
|
| 33 |
3. Use `Heading`, `Image`, and `Summary` to navigate by article meaning instead of by raw page order.
|
| 34 |
4. Show the session panel: transcript, runtime readiness, latency, judge runbook, award evidence, model budget, and runtime plan.
|
| 35 |
-
5. Mention that `/api/demo-script` exposes the same judge runbook as structured data.
|
| 36 |
|
| 37 |
## Evidence endpoints
|
| 38 |
|
|
|
|
| 32 |
2. Turn on screen-reader mode and press `Space` or `Next` to narrate the first semantic node.
|
| 33 |
3. Use `Heading`, `Image`, and `Summary` to navigate by article meaning instead of by raw page order.
|
| 34 |
4. Show the session panel: transcript, runtime readiness, latency, judge runbook, award evidence, model budget, and runtime plan.
|
| 35 |
+
5. Mention that `/api/demo-script` exposes the same judge runbook and API evidence checks as structured data.
|
| 36 |
|
| 37 |
## Evidence endpoints
|
| 38 |
|
scripts/verify.py
CHANGED
|
@@ -39,9 +39,11 @@ def verify_static_assets() -> None:
|
|
| 39 |
assert_true('aria-live="polite"' in index_html, "Article should expose an aria-live narration region")
|
| 40 |
assert_true("transcriptLog" in index_html, "Article should expose a visible transcript log")
|
| 41 |
assert_true("demoScriptList" in index_html, "Article should expose the judge demo runbook")
|
|
|
|
| 42 |
assert_true("imageReceiptList" in index_html, "Article should expose generated image receipts")
|
| 43 |
assert_true("submissionReadinessList" in index_html, "Article should expose submission readiness checks")
|
| 44 |
assert_true("loadDemoScript" in app_js, "Frontend should render the structured demo script")
|
|
|
|
| 45 |
assert_true("function haltPlayback" in app_js, "Reader controls should expose a shared playback halt helper")
|
| 46 |
assert_true(
|
| 47 |
"haltPlayback({ clearAutoAdvance: false });" in app_js,
|
|
@@ -204,6 +206,7 @@ def verify_routes() -> None:
|
|
| 204 |
assert_true("transcriptLog" in home.text, "Home route should include transcript log")
|
| 205 |
assert_true("demoScriptStatus" in home.text, "Home route should include demo script status")
|
| 206 |
assert_true("demoScriptList" in home.text, "Home route should include demo script list")
|
|
|
|
| 207 |
assert_true("awardEvidenceList" in home.text, "Home route should include award evidence list")
|
| 208 |
assert_true("submissionReadinessStatus" in home.text, "Home route should include submission readiness status")
|
| 209 |
assert_true("submissionReadinessList" in home.text, "Home route should include submission readiness list")
|
|
|
|
| 39 |
assert_true('aria-live="polite"' in index_html, "Article should expose an aria-live narration region")
|
| 40 |
assert_true("transcriptLog" in index_html, "Article should expose a visible transcript log")
|
| 41 |
assert_true("demoScriptList" in index_html, "Article should expose the judge demo runbook")
|
| 42 |
+
assert_true("demoApiCheckList" in index_html, "Article should expose judge API evidence checks")
|
| 43 |
assert_true("imageReceiptList" in index_html, "Article should expose generated image receipts")
|
| 44 |
assert_true("submissionReadinessList" in index_html, "Article should expose submission readiness checks")
|
| 45 |
assert_true("loadDemoScript" in app_js, "Frontend should render the structured demo script")
|
| 46 |
+
assert_true("payload.api_checks" in app_js, "Frontend should render structured demo API checks")
|
| 47 |
assert_true("function haltPlayback" in app_js, "Reader controls should expose a shared playback halt helper")
|
| 48 |
assert_true(
|
| 49 |
"haltPlayback({ clearAutoAdvance: false });" in app_js,
|
|
|
|
| 206 |
assert_true("transcriptLog" in home.text, "Home route should include transcript log")
|
| 207 |
assert_true("demoScriptStatus" in home.text, "Home route should include demo script status")
|
| 208 |
assert_true("demoScriptList" in home.text, "Home route should include demo script list")
|
| 209 |
+
assert_true("demoApiCheckList" in home.text, "Home route should include demo API check list")
|
| 210 |
assert_true("awardEvidenceList" in home.text, "Home route should include award evidence list")
|
| 211 |
assert_true("submissionReadinessStatus" in home.text, "Home route should include submission readiness status")
|
| 212 |
assert_true("submissionReadinessList" in home.text, "Home route should include submission readiness list")
|
static/app.css
CHANGED
|
@@ -390,6 +390,14 @@ dd {
|
|
| 390 |
padding-left: 20px;
|
| 391 |
}
|
| 392 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 393 |
.award-list li {
|
| 394 |
border: 1px solid var(--line);
|
| 395 |
border-radius: 8px;
|
|
@@ -428,6 +436,34 @@ dd {
|
|
| 428 |
font-size: 0.82rem;
|
| 429 |
}
|
| 430 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 431 |
.budget-list {
|
| 432 |
display: grid;
|
| 433 |
gap: 8px;
|
|
|
|
| 390 |
padding-left: 20px;
|
| 391 |
}
|
| 392 |
|
| 393 |
+
.demo-api-check-list {
|
| 394 |
+
display: grid;
|
| 395 |
+
gap: 8px;
|
| 396 |
+
margin: 12px 0 0;
|
| 397 |
+
padding: 0;
|
| 398 |
+
list-style: none;
|
| 399 |
+
}
|
| 400 |
+
|
| 401 |
.award-list li {
|
| 402 |
border: 1px solid var(--line);
|
| 403 |
border-radius: 8px;
|
|
|
|
| 436 |
font-size: 0.82rem;
|
| 437 |
}
|
| 438 |
|
| 439 |
+
.demo-api-check-list li {
|
| 440 |
+
display: grid;
|
| 441 |
+
grid-template-columns: auto 1fr;
|
| 442 |
+
gap: 4px 8px;
|
| 443 |
+
border: 1px solid var(--line);
|
| 444 |
+
border-radius: 8px;
|
| 445 |
+
padding: 9px 10px;
|
| 446 |
+
background: var(--surface);
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
.demo-api-check-list span {
|
| 450 |
+
color: var(--accent-strong);
|
| 451 |
+
font-size: 0.74rem;
|
| 452 |
+
font-weight: 850;
|
| 453 |
+
}
|
| 454 |
+
|
| 455 |
+
.demo-api-check-list code {
|
| 456 |
+
overflow-wrap: anywhere;
|
| 457 |
+
font-size: 0.78rem;
|
| 458 |
+
}
|
| 459 |
+
|
| 460 |
+
.demo-api-check-list p {
|
| 461 |
+
grid-column: 1 / -1;
|
| 462 |
+
margin: 0;
|
| 463 |
+
color: var(--muted);
|
| 464 |
+
font-size: 0.78rem;
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
.budget-list {
|
| 468 |
display: grid;
|
| 469 |
gap: 8px;
|
static/app.js
CHANGED
|
@@ -19,6 +19,7 @@ const copyTranscriptButton = document.querySelector("#copyTranscriptButton");
|
|
| 19 |
const clearTranscriptButton = document.querySelector("#clearTranscriptButton");
|
| 20 |
const demoScriptStatus = document.querySelector("#demoScriptStatus");
|
| 21 |
const demoScriptList = document.querySelector("#demoScriptList");
|
|
|
|
| 22 |
const awardEvidenceList = document.querySelector("#awardEvidenceList");
|
| 23 |
const submissionReadinessStatus = document.querySelector("#submissionReadinessStatus");
|
| 24 |
const submissionReadinessList = document.querySelector("#submissionReadinessList");
|
|
@@ -244,6 +245,15 @@ async function loadDemoScript() {
|
|
| 244 |
</li>
|
| 245 |
`)
|
| 246 |
.join("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
} catch {
|
| 248 |
demoScriptStatus.textContent = "Unavailable";
|
| 249 |
demoScriptList.innerHTML = `
|
|
@@ -255,6 +265,7 @@ async function loadDemoScript() {
|
|
| 255 |
<p>The structured demo script is unavailable.</p>
|
| 256 |
</li>
|
| 257 |
`;
|
|
|
|
| 258 |
}
|
| 259 |
}
|
| 260 |
|
|
|
|
| 19 |
const clearTranscriptButton = document.querySelector("#clearTranscriptButton");
|
| 20 |
const demoScriptStatus = document.querySelector("#demoScriptStatus");
|
| 21 |
const demoScriptList = document.querySelector("#demoScriptList");
|
| 22 |
+
const demoApiCheckList = document.querySelector("#demoApiCheckList");
|
| 23 |
const awardEvidenceList = document.querySelector("#awardEvidenceList");
|
| 24 |
const submissionReadinessStatus = document.querySelector("#submissionReadinessStatus");
|
| 25 |
const submissionReadinessList = document.querySelector("#submissionReadinessList");
|
|
|
|
| 245 |
</li>
|
| 246 |
`)
|
| 247 |
.join("");
|
| 248 |
+
demoApiCheckList.innerHTML = payload.api_checks
|
| 249 |
+
.map((item) => `
|
| 250 |
+
<li>
|
| 251 |
+
<span>${escapeHtml(item.method)}</span>
|
| 252 |
+
<code>${escapeHtml(item.path)}</code>
|
| 253 |
+
<p>${escapeHtml(item.expect)}${item.sample_body ? " Sample body included." : ""}</p>
|
| 254 |
+
</li>
|
| 255 |
+
`)
|
| 256 |
+
.join("");
|
| 257 |
} catch {
|
| 258 |
demoScriptStatus.textContent = "Unavailable";
|
| 259 |
demoScriptList.innerHTML = `
|
|
|
|
| 265 |
<p>The structured demo script is unavailable.</p>
|
| 266 |
</li>
|
| 267 |
`;
|
| 268 |
+
demoApiCheckList.innerHTML = "";
|
| 269 |
}
|
| 270 |
}
|
| 271 |
|
static/index.html
CHANGED
|
@@ -127,6 +127,7 @@
|
|
| 127 |
<span id="demoScriptStatus">Loading</span>
|
| 128 |
</div>
|
| 129 |
<ol id="demoScriptList" class="demo-script-list" aria-label="Judge demo runbook"></ol>
|
|
|
|
| 130 |
<div class="award-header">
|
| 131 |
<h3>Award Evidence</h3>
|
| 132 |
</div>
|
|
|
|
| 127 |
<span id="demoScriptStatus">Loading</span>
|
| 128 |
</div>
|
| 129 |
<ol id="demoScriptList" class="demo-script-list" aria-label="Judge demo runbook"></ol>
|
| 130 |
+
<ul id="demoApiCheckList" class="demo-api-check-list" aria-label="Judge API evidence checks"></ul>
|
| 131 |
<div class="award-header">
|
| 132 |
<h3>Award Evidence</h3>
|
| 133 |
</div>
|