Skip to content

1.9.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 17:31
· 23 commits to main since this release

Sigma Oasis v1.9.0 — every stated fact has a source

The app's promise is that a small model does not have to guess. Four kinds of fact reach a reply —
computed, retrieved from your offline library, remembered from earlier in the conversation, and
researched from the web — and until this release only the first two were checked against the
evidence they came from. v1.9 closes both gaps: the research brief is now verified against the
pages it was written from, and the conversation ledger records the decisions you made alongside
the facts. Pinned by 1,360 node checks, and every claim below carries a measurement — including
the ones that came out null.

Deep research under the grounding ladder

  • The gap, stated plainly. deep_research writes its brief with a model, from the passages it
    read. That brief then becomes tool output — and every downstream check trusts tool output as
    its corpus. So a figure the synthesizer invented passed tool grounding, passed the recompute
    check, passed the claim check, and reached you wearing a citation. The evidence to catch it was
    sitting in the tool's own memory. Nothing looked.
  • The check. Mechanical, inside the tool, before the brief leaves it: every figure, every
    measurement (a dose, a duration, a temperature — the dangerous class) and every [n] citation
    in the brief must appear in a passage the run actually read. Roundings pass. A citation to a
    source the run never read is a fabricated reference, and is caught as one. Findings go back
    to the synthesizer for one revision, kept only if strictly better; what remains is disclosed
    first among the tool's notes, so an unsupported specific reaches you flagged rather than
    laundered into a finding.
  • A real bug it surfaced. Instrumenting a research run phase by phase showed 50 of 112 seconds
    spent on two replan rounds that re-asked a sub-question the search provider had already answered
    "nothing" — each replan a full model call taken out of the time left to write the brief. A round
    that finds no new sources now ends the loop and writes from what it has. The same run afterwards:
    one round, six pages, 92 seconds.

The ledger remembers decisions, not just facts

  • Decisions. Alongside computed figures, files and your stated constraints, the ledger now
    records the choices you make — "use the median rather than the mean", "go with the West
    region"
    — verbatim, in your own words. Later decisions supersede earlier ones on the same
    subject, because "actually, use the mean" is what you now want and a record that still says
    "median" is worse than none.
  • Measured where it matters. A long-regime case states two decisions, buries them under six
    off-topic turns, and then — with the establishing turn compacted out of the model's context by
    the app's own history planner — asks for them back. Nothing is recomputable, so there is no
    fallback. Three passes: ledger 3/3, bare 0/3. With the ledger: "You chose to use the median
    rather than the mean for every summary statistic, and you selected the West region as the
    focus."
    Without it: "Nothing yet — I haven't loaded any CSV or computed anything."
  • Python session state now reaches the model from the second turn, so a follow-up can build on the
    dataframe already loaded instead of re-deriving it.

Two null results, reported as such

This project's rule is that a measurement decides, including when it disagrees with the feature.

  • The research check flagged nothing on a clean corpus. Across 24 briefs the 9B synthesizer,
    told to cite only from numbered sources, invented nothing — so the rung had nothing to catch.
    Its value is in the regime the suite does not reach (thin or contradictory sources), where it is
    now measurable, and its unit tests pin what it catches.
  • Telling the model it already has the data does not stop it re-reading the file. With the
    session variables named in front of it and an explicit instruction, a 9B still re-read on 73% of
    follow-ups (67% with prompting alone — no difference). Reading the code it ran explained why:
    pandas had cached the read, so the habit costs 22 milliseconds. Prompting and a mechanical nudge
    have both now been measured against it; neither moves it, and the notes say so instead of trying
    a third thing until one flatters.

Both are in docs/evals.md,
along with the two bugs the research suite caught — one in the app, one in the eval's own scoring
(a decoy pattern that flagged a correct brief, the same class of error as v1.6's
"Never thaw on the counter").

Upgrade notes

Auto-update from v1.8.x or earlier. No settings changed; the research check is part of
deep_research and the ledger's decisions are part of the ledger, both on by default with the
existing off switches (Settings → Models).

Full changelog: v1.8.1...v1.9.0