AISE502/project_exercise/ui_sketches/03_news_insights.html

48 lines
5.1 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 3 – News and insights</title><link rel="stylesheet" href="sketch.css"></head><body>
<div class="app">
<div class="topbar sk">
<div class="brand">Portfolio Intelligence Platform <small>thin dashboard · no business logic · calls the API</small></div>
<span class="pill ok">Market API: live</span>
<span class="pill ok">LLM API: closed (healthy)</span>
<div class="nav"><span>Portfolio</span><span>Market data</span><span class="active">News &amp; Insights</span><span>Advisor</span><span>Optimisation</span><span>System</span></div>
</div>
<h1 class="page">News &amp; Insights <span class="small">· last ingestion run 2026-09-07 06:00 · 38 items · 31 insights validated · 4 rejected · 3 pending</span></h1>
<div class="sub">Raw news stored with provenance by <b>NewsIngestionService</b> · structured <b>Insight</b> extracted by <b>ResearchAgent</b> (schema-validated) · every insight checked against the <b>ontology</b> before it enters the system</div>
<div class="grid" style="grid-template-columns: 1.15fr 1fr;">
<div class="card sk">
<h3>Ingested news <span class="src">filter: <span class="tag pos">validated</span><span class="tag neg">rejected</span><span class="tag">all</span></span></h3>
<table class="sk-table">
<tr><th>ID</th><th>Headline</th><th>Source · time</th><th>Guard</th></tr>
<tr style="background:#eef3f7"><td class="mono">N-1023</td><td><b>ASML raises full-year 2026 guidance on AI demand</b></td><td class="small">Reuters · 07:12</td><td><span class="pill ok">✓ validated</span></td></tr>
<tr><td class="mono">N-1021</td><td>Nestlé recalls infant formula batch in three countries</td><td class="small">FT · 06:40</td><td><span class="pill ok">✓ validated</span></td></tr>
<tr><td class="mono">N-1019</td><td>Roche phase-III trial meets primary endpoint</td><td class="small">SwissInfo · 06:05</td><td><span class="pill ok">✓ validated</span></td></tr>
<tr><td class="mono">N-1017</td><td>"Acme-X to be acquired", says blog post</td><td class="small">blog · 05:50</td><td><span class="pill err">✗ rejected</span></td></tr>
<tr><td class="mono">N-1015</td><td>Fed minutes hint at slower cuts</td><td class="small">WSJ · 05:20</td><td><span class="pill neutral">⋯ pending</span></td></tr>
<tr><td class="mono">N-1012</td><td>Chip export rules: EU opens consultation</td><td class="small">Politico · 04:45</td><td><span class="pill ok">✓ validated</span></td></tr>
</table>
<div class="small" style="margin-top:8px">Rejected N-1017: ticker <span class="mono">ACMEX</span> not in ontology · event type "rumour" not allowed → insight <b>discarded</b>, raw text kept with provenance for audit.</div>
</div>
<div class="card sk">
<h3>Insight for N-1023 <span class="src">ResearchAgent → Insight (schema v3)</span></h3>
<table class="sk-table">
<tr><td style="width:120px"><b>Sentiment</b></td><td>
<div class="bar" style="width:220px; display:inline-block; vertical-align:middle"><i style="width:80%"></i></div> <b>+0.6</b> <span class="small">(−1 … +1)</span></td></tr>
<tr><td><b>Affected tickers</b></td><td><span class="tag">ASML</span><span class="tag">NVDA</span> <span class="small">(resolved against ontology)</span></td></tr>
<tr><td><b>Event type</b></td><td><span class="tag">guidance</span> <span class="small">∈ {earnings, guidance, M&amp;A, regulatory, product, recall, macro}</span></td></tr>
<tr><td><b>Summary</b></td><td>ASML lifts 2026 revenue guidance, citing AI-related demand for EUV systems; sees continued order strength into 2027.</td></tr>
<tr><td><b>Provenance</b></td><td class="mono">news_id=N-1023 · source=Reuters · fetched 2026-09-07T07:12Z · hash 9f3a…</td></tr>
<tr><td><b>Extraction</b></td><td class="small">model via LLM gateway · 1 412 tokens · 2.1 s · schema valid on first attempt</td></tr>
<tr><td><b>Guard</b></td><td><span class="pill ok">✓ ticker</span> <span class="pill ok">✓ sector</span> <span class="pill ok">✓ event type</span> <span class="pill ok">✓ citation resolvable</span></td></tr>
</table>
<div style="margin-top:10px"><span class="btn">Open source text</span> <span class="btn">Show raw extraction log (audit)</span></div>
<div class="small" style="margin-top:8px">The rest of the system never sees raw model text — only this validated object (anti-corruption layer, §4.1).</div>
</div>
</div>
<div class="note" style="left: 470px; top: 96px;"><b>1</b>Ontology as run-time guard: valid ticker? valid sector? plausible event type? (§3.2, §4.2)</div>
<div class="note r" style="left: 1060px; top: 560px;"><b>2</b>Strict, schema-validated Insight — reject or repair non-conforming responses (§4.1).</div>
<div class="note" style="left: 40px; top: 640px;"><b>3</b>News text is untrusted input: a prompt-injection vector — treat it as data, never as instructions (§4 pitfalls).</div>
<div class="watermark">SKETCH 3/7 · wireframe, not a specification</div>
</div></body></html>