Passages are numbered end to end so every claim is cited inline; follow-up
questions are resolved against the conversation; chapter bibliographies and
index pages are dropped before reranking; the answer badge reports how well
grounded an answer is rather than claiming a GRADE certainty. Dependencies
are pinned.
Fix Groq model outage; make provider failures a distinct error state
Groq decommissioned llama-3.3-70b-versatile, which every agent shared via a
single hardcoded get_llm(). Each query returned a 404 that the API then
streamed to the browser as answer prose, so the UI decorated a provider
error with a "MODERATE CERTAINTY" evidence badge and a "grounded reply"
byline.
Model IDs are now centralised in llm/config.py, resolved per role from
ARIA_*_MODEL env vars with live defaults verified against Groq's model list
(generator openai/gpt-oss-120b, everything else openai/gpt-oss-20b). No
Space secrets are required — the defaults work as-is.
Provider failures get their own type and their own SSE `error` event that
carries no confidence, no evidence tier and no citations, and never travels
on the `token` channel the UI renders as an answer. An unreachable guardrail
no longer defaults to "in scope", and a judge that fails or returns
unparseable JSON yields confidence=null, shown as "Not adjudicated", instead
of a placeholder 0.5 on a real gauge.
A startup pref…
UI: rebuild the answer view as a chat interface, responsive to mobile
Answers were typeset as a fresh journal article each time — headline, drop cap,
boxed method figure, margin classification, bibliography. The journal identity
stays; the per-answer article furniture goes.
The transcript now scrolls inside one framed sheet with the composer docked at
its foot. The agent pipeline runs as a live thinking strip that folds into a
"Reasoned in 4.2s" receipt; evidence tier, Judge confidence and sources sit in
one instrument row; citations expand their retrieved passage inline.
Same build on mobile: the shell sizes from the visual viewport so the iOS
keyboard lifts the composer, the reply gutter collapses so prose keeps the full
line, and touch targets, type sizes and safe-area insets are handled.