Skip to documentation

Crucible

Evals & drift

Evals are how you know a change made eli.ai better, not just different. A golden set of questions with atomic expected assertions is run through the real pipeline; deterministic checks and an LLM judge score each answer; per-tag metrics let you compare two configs and catch regressions before they reach a client. Drift detection re-runs on a schedule to catch silent decay.

The feedback loop

Evaluation feedback loop

Feedback → golden set → measured runs → metrics → coverage & regression.

Rendering diagram

Downloads

Concepts

  • Evals

Keywords

  • chat / agent answer
  • golden sets
  • documents + entities
  • BU × topic matrix
  • feedback (thumb/rating/correction)
  • promote → golden item (human-approved)
  • eval runner: real pipeline
  • deterministic checks + LLM judge
  • per-tag + overall metrics
  • accuracy, groundedness, citations
  • coverage dashboard overlay (n≥5)
  • regression diff (A/B by config)
  • interview-next (transparent)
  • scheduled drift snapshots
  • alerts (orphan/churn thresholds)
Source and generation provenance

Status: current

Generated at: 2026-08-12T23:38:37.222Z

Source hash: 768d964b2181f55dfa89c8b77ad8e77dd24e7e1e125faac9b858c00a2d856975

Metadata payload hash: f3be73aae1ed091c741dd65ef3113892c8773aa00270daa9b4dfc1628505e282

Canonical appearance

src/app/(docs)/docs/concepts/evals/page.tsx:30 route /docs/concepts/evals

All appearances

  • canonicalsrc/app/(docs)/docs/concepts/evals/page.tsx:30 route /docs/concepts/evals

No mirrored appearances.

Generation versions

App: eli-ai 0.1.0

Mermaid: 11.16.0 · Mermaid CLI: 11.16.0

Node: v26.3.1 · Yarn: 4.17.1

Renderer config hash: 68c10966fe84406ee626034d58bfabd555df9f65f691204b7c46db24038da101

Renderer theme hash: c80287a78d80ad63d27bd5ca348b2ef9a7e2f44da289e436be6484ea28a1b033

Adapter versions: diagramGenerator=2, drawioFlowchart=1, drawioGantt=1, drawioSequence=1, drawioState=1

Full sidecar JSON: evaluation-feedback-loop-768d964b.json

Golden items are atomic assertions

A golden item is a question plus a set of must / should assertions and doc-anchored citations — nota verbatim expected string. "The FY26 budget freezes Operations headcount" is one assertion; the model can phrase it any way and still pass. Items carry bu:* and topic:* tags for per-segment metrics, are revisioned, and pin a golden-set hash on every run.

Two authoring paths:

  • Manual editor — write the question, assertions, and required citations by hand.
  • Promote from an answer — the judge model decomposes a real chat/agent answer into candidate atomic assertions; a human edits and approves before it is saved. Never auto-saved.

The runner

The runner executes the real retrieval/answer pipeline per item, then scores it. It is built for honesty at consulting scale:

  • Deterministic checks— citation validity, forbidden citations, regex, schema, and retrieval-hit-rate (which separates "the KB lacks it" from "generation failed").
  • One batched LLM judge call per result at temperature 0, returning a per-assertion verdict. The judge slot is pinned and snapshotted separately from the target config, and the comparator refuses to compare runs judged by different judges.
  • Explicit result statusok / error / timeout. A provider outage reads as a degraded run, not a 35-point regression.
  • KB fingerprint at start and end — a run flagged kbUnstable if an import landed mid-eval. A pre-run cost gate asks for explicit confirmation.

Judge calibration is advisory, never blocking

Requiring human-labeled judge outputs before the judge can run would brick evals in every new workspace. Calibration is advisory. The judge runs; you calibrate over time.

Metrics, regression & A/B

Results roll up into run_metrics — accuracy, groundedness, and citation validity, overall and per tag. Because a golden set is small, per-item assertion flips lead the diff UI(honest signal at n = 3) with confidence intervals labeled "insufficient items" below ~30 rather than dressed up as significant. Comparing two runs by config_snapshot_id is an A/B: swap a model or a prompt, re-run the golden set, and read exactly which assertions changed.

Drift detection

Scheduled re-runs (default off, governed by a per-workspace monthly eval budget) catch regressions no one triggered. KB drift v1 tracks the durable, low-false-alarm signals: entity counts per type, orphan rate, and document churn. A dead-man's-switch heartbeat surfaces an "expected vs actual last run" banner so a silently dead scheduler is visible. Alerts require consecutive breaches and CI-based comparison — alert fatigue is the deadliest failure mode an eval product has.

One groundedness checker, two homes

The same judgeAssertionsengine powers both the strict, claim-by-claim eval judge and the flag-only "verified n/m claims" badge in grounded chat. Build once, point everywhere.

Next