live scene HTML: stats line + prose match per-model framing

Stats line now reads "A100 inference · live · N models · X infer/sec
· last window: <host> · hit-rate: …" instead of "live detections ·
N hosts · model: …". Prose rewritten to describe lanes as side-by-
side model-agreement check rather than per-host activity.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Max Gorog 2026-05-08 16:44:53 -05:00
parent 5533043b02
commit 3b96537b3e

View file

@ -587,15 +587,15 @@
<div class="stage-view" data-view="live">
<div class="metric-stack metric-stack-wide live-stack">
<div class="live-stats">
<span class="live-stats-eye">live detections</span>
<span class="live-stats-dot" id="live-stats-hosts">0 hosts</span>
<span class="live-stats-dot" id="live-stats-rate">0 / sec</span>
<span class="live-stats-dot" id="live-stats-model">model: —</span>
<span class="live-stats-eye">A100 inference · live</span>
<span class="live-stats-dot" id="live-stats-hosts">0 models</span>
<span class="live-stats-dot" id="live-stats-rate">0 infer / sec</span>
<span class="live-stats-dot" id="live-stats-model">last window: —</span>
<span class="live-stats-dot" id="live-stats-acc">hit-rate: —</span>
</div>
<div class="live-lanes" id="live-lanes"></div>
<div class="live-latest" id="live-latest">
<div class="live-latest-empty">awaiting <code>live_detection</code> events from the inference loop</div>
<div class="live-latest-empty">awaiting <code>live_detection</code> events from the A100 inference loop</div>
</div>
</div>
</div>
@ -1145,20 +1145,19 @@
<section class="scene" data-stage="live">
<div class="prose">
<h2>Catching attacks live</h2>
<p>Real episodes arrive from the fleet, get chunked into ten-second
windows, and a deployed model labels each window in flight. The
heavy models can offload inference to an <strong>A100</strong>
so the receiver never blocks on a forward pass — predictions
stream back as they finish.</p>
<p>Each row on the stage is a host; each cell is one ten-second
window painted by the model's predicted phase. A clean run
cruises blue; an attack profile pushes the lane through
<code>armed</code><code>infecting</code>
<code>infected_running</code>. When ground truth catches up,
mismatched cells get a hatched overlay so you can spot where
the model disagrees with the orchestrator. The callout below
holds the most recent prediction with model name,
confidence, and round-trip latency.</p>
<p>The <strong>A100</strong> runs inference against incoming
ten-second windows from the fleet. Each row on the stage is
<em>one trained model</em> doing live prediction; each cell
is its phase verdict on a freshly-arrived window, painted
by the predicted phase.</p>
<p>Read the lanes side-by-side as a model-agreement check:
when the recurrent family (RNN / GRU / LSTM) all flip to
<code>infecting</code> at the same time, that's strong
evidence the host actually is. When ground truth from
<code>labels.jsonl</code> catches up, mismatched cells get
a hatched overlay and the running hit-rate ticks. The
callout below holds the most recent prediction with model
name, A100 round-trip latency, and confidence.</p>
</div>
</section>