AISE502/project_exercise/ui_sketches/06_system_status.html

67 lines
5.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html><head><meta charset="utf-8"><title>Sketch 6 – System status and measurement contract</title><link rel="stylesheet" href="sketch.css"></head><body>
<div class="app">
<div class="topbar sk">
<div class="brand">Portfolio Intelligence Platform <small>operator view · observability and the measurement contract</small></div>
<span class="pill ok">Market: live</span>
<span class="pill warn">News: half-open</span>
<span class="pill ok">LLM: closed</span>
<div class="nav"><span>Portfolio</span><span>Market data</span><span>News &amp; Insights</span><span>Advisor</span><span>Optimisation</span><span class="active">System</span></div>
</div>
<h1 class="page">System status <span class="small">· the measurement contract, live · last CI run #212 at 08:40 <span class="pill ok">all gates green</span></span></h1>
<div class="kpis">
<div class="kpi sk"><div class="l">Eval harness pass rate (golden set v7)</div><div class="v">96.5 %</div><div class="s">threshold ≥ 95 % · <span class="pill ok">ok</span></div></div>
<div class="kpi sk"><div class="l">Cost per advisor request, p95 (today)</div><div class="v">CHF 0.31</div><div class="s">budget ≤ 0.40 · <span class="pill ok">ok</span></div></div>
<div class="kpi sk"><div class="l">Latency per advisor request, p95</div><div class="v">14.2 s</div><div class="s">budget ≤ 20 s · <span class="pill ok">ok</span></div></div>
<div class="kpi sk"><div class="l">Module-boundary violations (import-linter)</div><div class="v">0</div><div class="s">no LLM call outside the gateway · <span class="pill ok">ok</span></div></div>
</div>
<div class="grid" style="grid-template-columns: 1fr 1fr 1fr; margin-top: 12px;">
<div class="card sk">
<h3>Circuit breakers <span class="src">every external call</span></h3>
<table class="sk-table">
<tr><th>Dependency</th><th>State</th><th class="num">Fails/10m</th><th>Fallback</th></tr>
<tr><td>Market price API</td><td><span class="pill ok">closed</span></td><td class="num">0</td><td class="small">snapshot</td></tr>
<tr><td>News API</td><td><span class="pill warn">half-open</span></td><td class="num">4</td><td class="small">last ingestion</td></tr>
<tr><td>LLM API (gateway)</td><td><span class="pill ok">closed</span></td><td class="num">1</td><td class="small">fallback model · then pause insights</td></tr>
</table>
<div class="small" style="margin-top:6px">timeouts: 3 s / 5 s / 30 s · retries: 3 with backoff · degraded mode announced in the UI</div>
</div>
<div class="card sk">
<h3>Token spend today <span class="src">LLM gateway</span></h3>
<div style="height:130px">
<svg class="chart" viewBox="0 0 380 130">
<line class="axis" x1="30" y1="110" x2="370" y2="110"/><line class="axis" x1="30" y1="10" x2="30" y2="110"/>
<rect x="45" y="70" width="22" height="40" fill="#7fa3bd"/><rect x="85" y="50" width="22" height="60" fill="#7fa3bd"/><rect x="125" y="84" width="22" height="26" fill="#7fa3bd"/>
<rect x="165" y="40" width="22" height="70" fill="#7fa3bd"/><rect x="205" y="30" width="22" height="80" fill="#7fa3bd"/><rect x="245" y="62" width="22" height="48" fill="#7fa3bd"/>
<rect x="285" y="56" width="22" height="54" fill="#7fa3bd"/><rect x="325" y="90" width="22" height="20" fill="#7fa3bd"/>
<line x1="30" y1="24" x2="370" y2="24" stroke="#a83a2e" stroke-dasharray="5 4"/><text x="300" y="20" style="fill:#a83a2e">daily budget</text>
<text x="40" y="125">06h</text><text x="330" y="125">13h</text>
</svg>
</div>
<table class="sk-table" style="margin-top:4px">
<tr><td>Extraction (ResearchAgent)</td><td class="num">184 k tokens</td><td class="num">CHF 2.10</td></tr>
<tr><td>Advisor requests (31)</td><td class="num">199 k tokens</td><td class="num">CHF 3.42</td></tr>
<tr><td>Eval harness run</td><td class="num">62 k tokens</td><td class="num">CHF 0.71</td></tr>
</table>
</div>
<div class="card sk">
<h3>CI gates, run #212 <span class="src">main branch</span></h3>
<table class="sk-table">
<tr><td>Unit tests, deterministic services</td><td><span class="pill ok">128 / 128</span></td></tr>
<tr><td>Reference vectors (perf / risk / opt)</td><td><span class="pill ok">42 / 42</span></td></tr>
<tr><td>Module boundaries (import-linter)</td><td><span class="pill ok">0 violations</span></td></tr>
<tr><td>Eval harness (prompt v12, model pinned)</td><td><span class="pill ok">96.5 % ≥ 95 %</span></td></tr>
<tr><td>Cost budget per request (replay)</td><td><span class="pill ok">p95 0.31 ≤ 0.40</span></td></tr>
<tr><td>Threat checks (prompt-injection set)</td><td><span class="pill ok">21 / 21 blocked</span></td></tr>
</table>
<div class="small" style="margin-top:6px">Last failed gate: run #207 — eval 93.8 % after prompt v11 → change rejected, rolled back (a contract that never fails has never been tested).</div>
</div>
</div>
<div class="note" style="left: 40px; top: 590px;"><b>1</b>Basic observability of cost and latency per request is mandatory (§5); budgets are CI-gated fitness functions (M2).</div>
<div class="note r" style="left: 470px; top: 590px;"><b>2</b>Eval harness as a CI gate with accuracy and failure modes, not "it works" (§4.3, M5).</div>
<div class="note" style="left: 900px; top: 590px;"><b>3</b>Threat model incl. prompt injection via news; basic hardening (M5).</div>
<div class="watermark">SKETCH 6/7 · wireframe, not a specification</div>
</div></body></html>