67 lines
5.5 KiB
HTML
67 lines
5.5 KiB
HTML
<!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 & 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>
|