LLM Evals From Zero  Chapter 9 of 9
01 / 22
Chapter 9 · Online Evaluation, Drift, and Maintenance

After the Merge

Online evaluation, drift, and keeping the eval system honest after the gate. Chapter 8 made the release decision trustworthy at merge time. This chapter covers everything that happens after: sampling production traffic for scoring, telling input drift apart from provider drift apart from a changed ruler, and the maintenance operations that keep the dataset, the judge, and the gate from quietly expiring.

By the end, you can answer four questions

  • Which production traces may estimate a rate, and which may only be mined for cases?
  • When a production score moves, how do you decide whether the inputs, the system, or the ruler moved?
  • What does a label that arrives seven days late do to this week's online score?
  • Which maintenance artifacts prove the eval system is still healthy, and who owns each one?

How this lecture runs

  • 20 to 25 minutes, 22 slides: one loop, from merged release back to new golden cases
  • Section 1: online evaluation, slides 4 to 8
  • Section 2: drift, three kinds, slides 9 to 14
  • Section 3: maintenance and eval debt, slides 15 to 21
  • Every invented number is labeled example data or an example threshold on the slide where it appears
Input: the Chapter 8 gate + production traces + delayed outcome labels Output: drift dashboard + golden case PRs + a maintenance cadence Running system: Support RAG, now live behind the gate
SG
Saloni GargSenior Machine Learning Engineer, Adobe
SLIDE 01 / 22PACE 0:00
Slide 02 · The full loop

The gate answers one question. Production answers the other.

Offline · Chapters 3 to 8 · before the merge

Golden dataset + holdout
Frozen, versioned, Chapter 3
Scorers + calibrated judge
Chapters 4 to 6, trust per capability
CI gate
gate.yaml policy, Chapter 8. Merge or block.

The gate answers: should this ship?

Online · this chapter · after the merge

Production system
Live traffic, real users, real corpus, provider endpoint
Traces logged in full
Inputs, retrieved chunks, outputs, tool calls, trace ids
Sampled and scored
Core sample scored, enriched stream mined, audits drawn

Production answers: is it still true?

Online scoring
Same scorers, same report schema, slide 5
→
Human audit
Weekly queue, slide 5. Disagreements logged
→
Drift monitors
Input, system, measurement, slides 9 to 14
→
New golden cases
Confirmed failures land as case PRs, slide 14

The return path is the point of the chapter. Production is not a place the system goes to be forgotten; it is the dataset's editor, continuously proposing new cases, new failure modes, and evidence that the frozen set's assumptions have expired.

SLIDE 02 / 22PACE 1:05
Slide 03 · Offline vs online

Two questions, not two tools

DimensionOffline evaluationOnline evaluation
DistributionFrozen golden set. Fixed cases, fixed difficulty mix, fixed corpus snapshot.Live traffic. Whatever users actually ask this week, in whatever proportion they ask it.
LabelsPrewritten. Expected behavior, sources, and must-not-contain are authored before the run.Delayed and partial. Outcomes resolve hours to days later, slide 8, and most traces never get a human label at all.
RepeatabilityExact. Same case ids, same pairing, rerunnable on demand, Chapter 8.Never. The traffic of last Tuesday cannot be replayed; only its logged traces can be rescored.
Primary jobBlock regressions. Compare a candidate against a baseline on identical inputs.Detect drift and new failure modes. Find what the frozen set never contained.

Why online cannot replace the gate

Production traffic has no counterfactual. You cannot observe what the rejected candidate would have done on the same users, and the users themselves change when the system changes. Regression blocking needs identical inputs on both sides of a comparison, and only the frozen set provides them.

Why the gate cannot replace online

The frozen set is a photograph of what users asked when it was built. New topics, new vocabulary, new document versions, and provider side changes all arrive in production first. A gate that passes forever on a stale set is certifying a system that no longer exists.

SLIDE 03 / 22PACE 2:10
SECTION 1 Online Evaluation SLIDES 4 TO 8 · SAMPLING · SCORER REUSE · IMPLICIT SIGNALS · SHADOW AND CANARY · DELAYED LABELS
Slide 04 · Sampling architecture · rates are example design values

Log everything. Sample in three streams, on purpose.

The log comes first

Every production trace is logged in full: query, retrieved chunk ids, prompt hash, model and index versions, output, tool calls, latency, trace id. PII is stripped at the log boundary using the Chapter 3 rules, before any sampling happens. Sampling decides what gets scored; it never decides what gets kept, because a failure you did not log cannot become a case later.

A
Uniform random core sample · 2 percent of all traces
Drawn uniformly at random, independent of content, confidence, or outcome. This is the only stream allowed to estimate a rate. Every online score, drift share, and trend line in this chapter is computed on the core sample or on the full log's deterministic fields, never on the streams below.
B
Enriched stream · case mining only
All traces with low retrieval confidence, all escalations to a human, all policy flags, all judge disagreements. Deliberately unrepresentative: it overcollects exactly the traces most likely to contain new failure modes. Its job is to fill the audit queue and the case intake, slide 14.
C
Segment strata · language, plan tier, topic
Fixed quotas per segment drawn from the log, so a segment that is 1 percent of traffic still yields enough scored traces to see. Segment rates are reported per stratum and reweighted to the true traffic mix before they are combined with anything.

The bias rule, stated once and enforced in the report code: enriched samples never enter a rate. An escalation heavy sample reporting an escalation rate is measuring the sampler, not the system.

SLIDE 04 / 22PACE 3:15
Slide 05 · Scorer reuse · one package, two runners

Online scoring reuses the offline scorers. It does not fork them.

CI runner
Chapter 4 runner. Inputs: golden set cases. Trigger: pull request and nightly
→
One scorer package
Deterministic checks, reference scorers, judge client, stage attribution. Versioned once, imported by both runners
←
Online batch runner
Inputs: sampled production traces. Trigger: schedule. Writes to the same report schema

Deterministic scorers · synchronous

Schema validity, citation target existence, refusal classification, latency and token accounting run on the sampled trace at log time. They are cheap, exact, and need no label, so their online numbers are available within minutes and cover the full log, not just the sample.

Judge · asynchronous batch

The calibrated judge from Chapters 5 and 6 runs in batch on the core sample only, with verdict caching keyed exactly as in Chapter 8. Judging the enriched stream would spend the budget where rates cannot be computed anyway.

Human audit · weekly queue

A fixed size queue drawn each week: part core sample, part enriched stream, part judge disagreement cases. Auditors label blind, as in Chapter 6. The queue is the calibration feedstock and the case intake's front door, slide 14.

Because both runners emit the same report schema, an online faithfulness number and an offline faithfulness number are the same measurement taken in two places, and a divergence between them is itself a finding: same scorer, different distribution. Fork the scorers and that comparison dies; every online number becomes its own dialect.

SLIDE 05 / 22PACE 4:20
Slide 06 · Implicit signals

User behavior is a hint. Every hint has a confound.

SignalWhat it might meanThe confound that stops you trusting it alone
Thumbs downThe answer dissatisfied the userAccidental taps and brigaded clicks. Only a small, self selected fraction of users rate anything, and they are not a random sample of the dissatisfied.
Immediate rephraseThe answer missed, so the user asked again differentlyThe user was refining a vague first question. Rephrase rate rises when users learn the system rewards detail, which is a success pattern wearing a failure costume.
AbandonmentThe session failed and the user gave upThe user got the answer and left. For a support assistant, a short session with no follow up is the goal state as often as it is the failure state.
Escalation to humanThe system could not resolve the issuePolicy required the escalation: account changes, refunds above a limit, regulated topics. Those escalations are correct behavior counted as failure.
Copy of the answerSuccess proxy: the answer was worth keepingThe user is copying it into a complaint, a ticket, or a message to a colleague showing the error. Copy records the act, not the intent.

The rule for implicit signals

Implicit signals trigger investigation; they never gate and never headline a report alone. A spike in rephrases buys a human audit draw oversampled from rephrased sessions. If the auditors confirm real failures, the failures enter case intake with labels attached. The signal opened the door; labeled evidence walks through it. Any dashboard that turns a confounded proxy into a quality percentage has built a random number generator with good branding.

SLIDE 06 / 22PACE 5:25
Slide 07 · Shadow and canary · thresholds are example values, declared in advance

Two ways to meet real traffic before real users depend on you

Shadow mode · zero user exposure

Production input arrives
Served by the current system as normal
Candidate runs in parallel
Same input, same retrieved context. Output logged and scored, never shown to the user
Diff report
Output diff rate against the serving system, plus judge score deltas on the shadow outputs, per capability

Shadow answers: how would the candidate behave on today's real distribution? It cannot measure user outcomes, because no user ever saw its answers. That limit is the price of zero exposure, and it is worth paying before any canary.

Canary · 5 percent of traffic, example thresholds

Guardrail metricRollback if
Refusal rate vs controlmoves over 3 points
Error rate (5xx + empty responses)exceeds 1 percent
Escalation rate vs controlrises over 2 points
Latency p95 vs controlrises over 25 percent

Thresholds are written into the rollout config before the canary starts, and breaching one triggers automatic rollback to the previous version, no meeting required. A threshold negotiated after the metric moves is not a threshold; it is a press release. Canary metrics are computed on the canary's own full log, never on the core sample, because at 5 percent of traffic the sample is too thin to catch a fast regression.

SLIDE 07 / 22PACE 6:30
Slide 08 · Delayed labels · resolution distribution is example data

The label for Tuesday's answer may arrive next week

The join that makes online labels possible

trace_idMinted at request time and carried through the trace log, the support ticket, and the outcome table. It is the primary key of online evaluation.
outcome tableTicket resolved, reopened, escalated and closed, refund issued, CSAT returned. Written by the support system hours to days after the answer, joined back to the trace by id.
labelDerived from the outcome by a fixed rule, versioned like a scorer: resolved without reopen in 7 days counts as success; reopened or negatively rated counts as failure. Traces with no outcome yet are unlabeled, not successful.

Label delay · example distribution, support outcomes

Resolved same day40%
Resolved by day 385%
Resolved by day 798%

The unresolved remainder is not random. Long running, multi touch, and disputed tickets resolve last, and they are disproportionately the hard cases. Scoring this week on resolved cases only grades the easy 40 percent and calls it the week.

The reporting consequence

Every online score carries its unresolved fraction beside it, computed at report time: faithfulness on the core sample is final, but outcome based success is reported as, for example, success 91.0% · unresolved 23%, and the number is restated when the window matures. A score whose denominator is still arriving is a preliminary result, and the report says so in the same font size as the score.

SLIDE 08 / 22PACE 7:35
SECTION 2 Drift, Three Kinds SLIDES 9 TO 14 · INPUT · SYSTEM · MEASUREMENT · DECISION TABLE · CASE INTAKE
Slide 09 · Three drifts

A score moved. Three different things could have moved it.

Input drift

Who asks what changes
Topic mix, language mix, new vocabulary, new user segments
Same system, harder week
Scores move because the exam changed, not the student

Owner: product and eval team jointly. Fix: dataset intake, slide 14. Measured on slide 10.

System drift

The stack changes under a frozen prompt
Corpus edits, index rebuilds, provider model updates
Same prompt, different machine
Nothing in your repo changed; the behavior did

Owner: platform team. Fix: changelogs, fingerprints, revalidation. Slides 11 and 12.

Measurement drift

The ruler changes
Judge model or rubric version changes, calibration expires, Chapter 6
Same outputs, different verdicts
The score moved and nothing in the world did

Owner: eval team. Fix: recalibration protocol, Chapter 6, and version pinning everywhere.

The drift report separates the three by construction: input mix computed from the log, system changes read from changelogs and fingerprints, ruler changes read from scorer version fields. A report that merges them into one "quality went down" line sends three owners hunting for one cause that does not exist.

SLIDE 09 / 22PACE 8:40
Slide 10 · Input drift · topic mix is example data

Measure the mix before blaming the model

Topic mix · share of core sample queries, example weeks

TopicBaseline weekCurrent weekMove
Billing18%27%+9 pts
Setup22%20%-2 pts
Refunds15%14%-1 pt
API12%12%0 pts
Other33%27%-6 pts
Total100%100%

Topic labels come from the same classifier run on both weeks, version pinned; relabeling history with a new classifier manufactures drift that never happened.

Two companion signals

new term rateShare of query tokens in the core sample that never appeared in the baseline month. Product launches, outages in the news, and competitor shutdowns all surface here first, days before they show up as failures.
language mixShare per detected language, same table shape as topics. A language growing from 2 to 6 percent of traffic is a segment your golden set covers thinly, whether or not scores have moved yet.

Why mix explains scores mechanically

Billing questions in this system carry the oldest policy documents and the highest refusal rate. If billing grows from 18 to 27 percent of the mix, the aggregate faithfulness and refusal numbers move even if per topic quality is completely unchanged. That is why the drift report always shows per segment scores beside the aggregate: the aggregate is a weighted average, and the weights just changed.

SLIDE 10 / 22PACE 9:45
Slide 11 · Corpus and index drift · changelog metrics are example data

Retired evidence invalidates cases, not just answers

Corpus changelog · per week, example week

ChangeCountWhy the eval system cares
Docs added41New answerable territory with zero golden coverage until intake runs
Docs changed63Expected answers and must-contain strings may now be wrong
Docs retired7Cases pointing at them are unanswerable as written
Index rebuilds2Recorded in the run manifest diff: embedding model, chunking config, rebuild timestamp

The changelog is a diff of document ids and content hashes between corpus snapshots, generated by the indexing job, not assembled by hand for the report.

The stale pointer check · Chapter 3 lint, run against production

The Chapter 3 dataset lint gains a production mode: for every golden case, resolve its expected_sources against the current corpus, not the snapshot the case was written against.

  • Retired source: the case's evidence no longer exists. The case is stale, and any score it produces this week measures a ghost.
  • Materially edited source: content hash changed beyond the lint's edit threshold. Expected answer fields are queued for human re-verification.
  • Counted, not vibes: the check emits a number per dataset version, the stale case count, which feeds the health dashboard on slide 15.

A RAG system is evaluated against its corpus. When the corpus moves and the cases do not, the eval stops describing the deployed system while continuing to produce confident looking numbers.

SLIDE 11 / 22PACE 10:50
Slide 12 · Provider fingerprint · diff rates are example data

A frozen probe set catches the change nobody announced

The fingerprint protocol

  1. Freeze a probe set: 200 prompts, fixed text, fixed parameters, temperature 0, spanning the system's capability slices. The probe set is not the golden set; it never gates and is never tuned against.
  2. Run it daily against the production endpoint, from a scheduled job with its own small budget line.
  3. Hash every output and diff against the previous day's outputs, case by case. The daily output diff rate is the fraction of probe outputs whose hash changed.
  4. Store the raw outputs. When the rate steps, the diff itself is the evidence: which slices changed, and how the text moved.

Daily output diff rate · example, 20 days

d1d5d10d14d20

Baseline noise sits at 1 to 2 percent: serving nondeterminism flips a few outputs daily even at temperature 0. On day 14 the rate steps to 11 percent and stays there. Deploy log for day 14: no deploy on our side.

That step is a provider change until proven otherwise. The response is mechanical: trigger a full offline gate run against the current endpoint, compare capability scores to the stored baseline, and open the incident path on slide 19 if gate capabilities moved. Not an argument with the provider; a measurement.

SLIDE 12 / 22PACE 11:55
Slide 13 · Decision table · read top to bottom, first matching row wins

Four signatures, four different first actions

What the evidence showsDiagnosis to test firstFirst action
Score moved and input mix movedMix shift, slide 10Investigate mix first. Compare per segment scores across the two weeks. If per segment scores are flat, there is no quality event yet; route new topics to case intake.
Score moved, mix flat, fingerprint steppedProvider drift, slide 12Provider drift protocol. Full offline gate run on the frozen set against the current endpoint. The frozen set is what makes the provider's change measurable at all.
Score moved, mix flat, our deploy yesterdayRegressionChapter 8 regression protocol. The deploy diff is the suspect list; work the new failures by first failing stage, and the gate thresholds decide whether rollback or fix forward applies.
Score moved and the judge or rubric version changedMeasurement driftChapter 6 recalibration protocol. Rescore a fixed output set under both judge versions. If verdicts differ, the ruler moved; recalibrate before any product conclusion is drawn.

The cost of skipping this table is symmetric: treat drift as regression and you roll back a healthy deploy while the real cause keeps moving; treat regression as drift and a defect you shipped gets a monitoring dashboard instead of a fix. Diagnosis order is an engineering control, not a discussion topic.

SLIDE 13 / 22PACE 13:00
Slide 14 · Case intake · the drift report's definition of done

A drift report is done when its cases land

Confirmed failure mode
From audit labels, outcome joins, or drift investigation. Confirmed means a human or a deterministic check verified it, not a signal spike
→
Sanitized trace attached
The production trace, PII stripped under Chapter 3 rules, becomes the case's provenance record
→
Case PR opened
Expected behavior, sources, capability, difficulty authored per the Chapter 3 schema; second reviewer for refusal and safety
→
Dataset version bumped
Case ships in the next dataset release, slide 16. From then on, the gate tests for this failure on every PR
case PR · datasets/golden_v1.3 · excerpt
{"id": "drift-2026-10-billing-014", "query": "Why was my October invoice charged twice?", "expected_behavior": "answer_with_citation", "expected_sources": ["billing/duplicate-charges"], "must_not_contain": ["refund in 30 days"], "capability": "faithfulness", "difficulty": "hard", "source": "failure_archive", "provenance": {"trace_id": "tr_8f31c", "intake": "drift_review_2026-10-27"}}

Why the PR, not a script

Auto generated cases would import production's noise along with its signal, including mislabeled outcomes and one off user errors. The PR forces the Chapter 3 disciplines onto production material: an authored expectation, a named capability, a review. Volume is deliberately capped by reviewer time; the intake queue prioritizes new failure modes over more instances of known ones, because the gate already tests what it knows.

This is the loop from slide 2 closing. Every case that lands here is production teaching the frozen set something the frozen set could not have known on its own.

SLIDE 14 / 22PACE 14:05
SECTION 3 Maintenance and Eval Debt SLIDES 15 TO 21 · HEALTH DASHBOARD · DATASET OPS · ONBOARDING · COST · INCIDENT · FULL SYSTEM · RECAP
Slide 15 · Eval health dashboard · alert values are example thresholds

The eval system gets a dashboard too. One owner per row.

Health metricDefinitionAlert, exampleOwner
Stale case rateCases untouched across two corpus versions / all cases, from the slide 11 lintover 8%Dataset owner
Quarantined case countCases parked in Chapter 7 quarantine: disputed expectation or unstable verdictover 15 openDataset owner
Calibration days remainingDays until the Chapter 6 judge calibration expiresunder 14 daysEval owner
Coverage gapsShipped product features and tools with zero golden casesany high risk gapFeature team
Judge error rate trendjudge_error share of online and CI judge calls, from Chapter 8 accountingover 2% or rising 3 weeksEval owner
Gate false block rateBlocks reviewers judged incorrect / all blocks, Chapter 8 health metricover 10%Eval owner

Each row is a number the earlier chapters already produce; this slide's work is putting them on one page with a threshold and a name. Eval debt is invisible precisely because its symptoms appear in other systems' dashboards: the stale case shows up as a confusing gate failure, the expired calibration as a judge argument. The health dashboard is where those symptoms get their own line.

SLIDE 15 / 22PACE 15:10
Slide 16 · Dataset operations · weekly intake, versioned releases

Three exits only. Everything else is a backlog that lies.

Weekly failure intake review · inputs

  • Production failures confirmed through outcome joins and audits, slide 8 and slide 14
  • Audit disagreements between human labels and judge verdicts from the weekly queue, slide 5
  • Drift cases nominated by the drift report, slides 10 to 12
  • Stale pointer results from the slide 11 lint: retired or edited expected sources

The three exits, applied to every item

  1. Add a case. Authored and reviewed per Chapter 3, scheduled into the next dataset release.
  2. Retire a case, with a reason. Evidence retired, behavior spec changed, duplicate of a stronger case. The reason is recorded in the dataset changelog; silent deletion is not an exit.
  3. Open a scorer bug. The case is right and the scorer is wrong: a lint gap, a judge rubric hole, a deterministic check misfiring. The fix lands in the scorer package, with the case as its regression test.

Dataset releases · versioned, on a cadence

releaseCases land in batched dataset releases, golden_v1.3 and onward, each with a changelog: cases added, retired with reasons, expectations corrected. Between releases the gate set is frozen.
re-stratificationThe Chapter 8 gate subset is re-stratified only inside a dataset release, by the Chapter 3 rule, never ad hoc. A subset changed quietly between two PRs destroys the pairing those PRs were compared under.
score comparabilityScores are comparable within a dataset version. A release bumps the baseline through the Chapter 8 promotion process, and trend lines carry a version marker so a score step at a release boundary is read as a dataset event first.
holdout rotationEach release rotates part of the Chapter 3 holdout into the frozen set and retires long serving cases into the holdout, keeping a slice of the exam nobody has been optimizing against.
SLIDE 16 / 22PACE 16:15
Slide 17 · Onboarding checklist · enforced before launch, not after

No cases, no gate entry, no launch

1
Cases exist for success and failure modes
Before the feature ships, its golden cases are written: the happy path, the malformed input, the tool returning an error, the request it must refuse. Case count per mode follows the Chapter 3 sizing rule: a slice too small to resolve the regression you care about is a launch blocker, not a footnote.
2
Deterministic predicates are written
Chapter 7 state checks for the new tool or feature: postconditions on real system state, argument validity, idempotency where it applies. If success cannot be checked deterministically, that fact is recorded and the capability starts life in a stricter trust tier.
3
Judge trust is calibrated, if the judge scores it
A Chapter 6 calibration run on the new capability's outputs, blind human labels first, agreement measured per capability. Uncalibrated judge scores for a new capability render as WARN ONLY by default.
4
A policy entry exists in gate.yaml
Metric, noise derived threshold, severity, min_cases: the Chapter 8 fields, present before the first release the capability participates in. The launch review checks the file, not a promise to add it later.

The checklist is deliberately ordered: cases define the behavior, predicates make it checkable, calibration decides who may judge the rest, and the policy entry wires the result into the gate. Skipping to step 4 produces the failure mode this course opened with: a number that exists, attached to nothing, blocking nothing.

SLIDE 17 / 22PACE 17:20
Slide 18 · Monthly eval budget · all figures are example data

Honesty has a budget line. Report it next to the escape rate.

Judge tokens per month · example accounting

Nightly full runs · 31.05M (30 runs x 1.035M, Chapter 5 judge pass) Per PR gate runs · 12.4M (about 40 PRs x 310,500, Chapter 8) Online judge batches · 6.2M (core sample, slide 5)

Total example: about 49.7M judge tokens per month, plus candidate generation tokens accounted separately in the same report. Human time, example: 24 hours per month: 12 audit and labeling, 8 intake review and case authoring, 4 calibration maintenance.

Levers when the budget grows

  • Subset sizes: shrink the PR tier subset where slice counts exceed what the thresholds need to resolve, Chapter 8 math, never below min_cases
  • Verdict caching: Chapter 5 cache keys make reruns of unchanged PR heads nearly free
  • Judge tiering: capabilities with the highest calibrated agreement graduate to a cheaper judge model, revalidated by a Chapter 6 spot calibration
  • Audit sample rate: the weekly queue size is a dial, turned down only with the disagreement rate in view

Why cost sits beside escape rate

The Chapter 8 escape rate, regressions production found that the gate passed, is the price of too little evaluation. The budget is the price of enough. Reported together, monthly, in the same review, a proposal to cut eval spend has to state which escapes it is buying. Reported separately, the cut looks free for exactly one quarter, until the escapes arrive.

SLIDE 18 / 22PACE 18:25
Slide 19 · Incident walkthrough · example scenario, end to end

Five days of drift protocol, in order

day 1 · detectFingerprint diff rate steps to 11 percent from its 1 to 2 percent band, slide 12. Input mix is flat, no internal deploy. Decision table row 2: provider drift protocol.
day 1 · measureFull offline gate run on the frozen golden set against the live endpoint: faithfulness down 3.1 points, beyond its Chapter 8 threshold, with mix and prompt held constant by construction. The movement is real and it is not ours.
day 1 · identifyProvider snapshot identified as the change. The endpoint's model snapshot differs from the previous day's; the fingerprint diff localizes the change to generation style on long answers, matching the faithfulness losses.
day 2 · mitigateTraffic pinned to the previous snapshot where the API allows pinning. Where it does not, a prompt mitigation is written, run through the full gate like any other change, and shipped only when the gate passes against the new snapshot.
day 3 to 5 · convert23 production failures from the window become golden cases through slide 14 intake, landing in the next dataset release. The failures the provider change exposed are now permanent tests.
day 5 · recordPostmortem entry added to the drift log: detection signal, time to detect, protocol followed, mitigation, cases added. The next provider step starts from this entry, not from memory.

Nothing in this timeline required a hero. Each step was a protocol written down in an earlier chapter, executed in order. That is the entire argument of the course, demonstrated once at production scale.

SLIDE 19 / 22PACE 19:30
Slide 20 · The complete system · every arrow labeled with its chapter

Nine chapters, one loop

Golden dataset + holdout
Ch 3 · versioned spec, stratified, linted
→
Runner
Ch 4 · paired runs vs baseline
→
Deterministic + reference scorers
Ch 4 · facts before opinions
→
Calibrated judge
Ch 5 and 6 · trust per capability, expiring
Stage attribution
Ch 7 · first failing stage, RAG and agents
→
gate.yaml + CI
Ch 8 · policy as code, required check
→
Production sampling
Ch 9 · core, enriched, strata streams
→
Drift monitors
Ch 9 · input, system, measurement

The arrow that closes the system

Case intake, Chapter 9: confirmed production failures and drift findings return to the golden dataset as reviewed case PRs, where they become part of the specification the gate enforces. Remove this arrow and the diagram is a pipeline that ages. With it, every component downstream of the dataset is also a sensor feeding the dataset, and the system's knowledge compounds instead of decaying.

SLIDE 20 / 22PACE 20:35
Slide 21 · Course recap map

Every video left an artifact in the repo

VideoTitleArtifact
1Why Your App Is Already Brokenfailure taxonomy
2Anatomy of an Eval Suitesuite architecture
3Building the Golden Datasetgolden_v1.jsonl, schema.json, DATASHEET.md
4Scoring Without an LLMdeterministic + reference scorers
5LLM-as-Judge, Implementedjudge prompts + verdict cache
6Calibrating the Judgecalibration report + trust table
7RAG and Agent Evalsstage attribution
8The Gategate.yaml + CI workflow
9After the Mergedrift dashboard + intake process
repo · final state
support-rag/ ├─ app/ # the system under test ├─ datasets/ │ ├─ golden_v1.3.jsonl # Ch 3, grown by Ch 9 intake │ ├─ holdout.jsonl │ ├─ schema.json │ └─ DATASHEET.md ├─ evals/ │ ├─ scorers/ # Ch 4, one package, two runners │ ├─ judge/ # Ch 5 prompts, Ch 6 calibration │ ├─ attribution.py # Ch 7 first failing stage │ ├─ gate.yaml # Ch 8 policy as code │ ├─ online/ # Ch 9 samplers, batch runner │ └─ drift/ # Ch 9 monitors, fingerprint probes └─ .github/workflows/ ├─ eval-gate.yml # Ch 8 required check └─ nightly-evals.yml # full runs, baseline, drift
SLIDE 21 / 22PACE 21:40
Slide 22 · Course takeaways

LLM Evals From Zero

  1. Evaluation is a system, not a metric. Dataset, scorers, judge, gate, and drift monitors, each with an owner and a failure mode of its own.
  2. The dataset is the specification and production is its editor. The frozen set defines correct behavior; production traffic continuously proposes what the specification is missing.
  3. Trust is measured per capability and it expires. Judge agreement, calibration windows, and gate authority are all numbers with dates on them.
  4. Gates work when policy is code and thresholds come from noise. A threshold inside the noise band builds a gate nobody believes; a policy in a wiki blocks nothing.
  5. Every escape becomes a case. The system learns from what it missed, permanently, in the dataset, or it repeats the miss on schedule.

Where to start on Monday

Build the smallest version of this loop first: one dataset, one scorer, one gate. Then grow it in the order these nine videos did, because each step's output is the next step's input, and skipping ahead produces artifacts with nothing underneath them. The course repo is the template; your system, your corpus, and your users supply everything that makes it true.

Bring to your first build session: 50 real queries from your own logs, and one release you regret.

SG
Saloni GargSenior Machine Learning Engineer, Adobe
SLIDE 22 / 22PACE 22:45 · END 24:00