Third phase of Arc 5. The eval discipline.

You can’t operate models without evaluating them. This phase installs the eval discipline: offline evals (does the model meet the bar before promotion), online evals (does it still meet the bar in production), drift detection (is the data the model sees still the data it was trained on), and LLM-as-judge for open-ended tasks (where ground truth is fuzzy).

By phase end basecamp continuous evaluation running: every promoted model passes offline gates, every Production model is monitored for drift + performance erosion, every detected issue routes to an alert. The discipline pays compound interest for Arc 5.s later LLM + agent phases; same eval patterns apply there with twists.


Prerequisites

  • Phase 40 complete; Feast operational
  • At least one model serving in Production via KServe

Why this phase exists

Most ML projects measure once (during training) and never again. Production models silently degrade as data drifts; nobody notices until users complain. Eval discipline catches this: automated gates at promotion, continuous monitoring after deployment, alerts on drift, A/B tests for changes.


The pattern-first frame

Same eight steps.


1. PROBLEM

A model is approved for Production based on offline metrics on a test set. In Production, the data it sees is subtly different (new users, seasonal shifts, business rule changes), or the relationship between features and labels has shifted (concept drift). The model’s quality erodes. Without monitoring, you find out from a complaint.


2. PRINCIPLES

2.1 Offline evals as the promotion gate

Before promotion, the model must pass: held-out test set performance, slice-level performance (no group regression), robustness to known edge cases, behavioral checks (does it refuse appropriately).

→ Pattern: evals: DEEP target this phase

Investigate:

2.2 Online evals: A/B testing for models

In Production, route a fraction of traffic to a candidate model; compare its real-world performance against the current Production model. Statistical significance, sample size, ramp-up policy.

Investigate:

2.3 Data drift detection

Data drift: the distribution of inputs shifts. Statistical tests (KS test, PSI) flag this. Drift doesn’t always cause performance degradation, but it’s the leading indicator.

→ Pattern: drift-detection

Investigate:

2.4 Concept drift detection

Concept drift: the relationship between features and labels changes. Harder to detect (requires ground truth labels eventually arriving). Performance monitoring is the proxy.

Investigate:

2.5 LLM-as-judge for open-ended outputs

For tasks where ground truth is fuzzy (text generation, summarization), use an LLM to score outputs. Reliability requires careful prompt design, calibration, multiple judges.

→ Pattern: llm-as-judge

Investigate:

2.6 Evaluation as continuous pipeline

Evals run on a schedule (Argo CronWorkflow): pull recent production traffic, evaluate against current Production model, surface deltas. Not “we ran evals once.”

Investigate:


3. TRADE-OFFS

DecisionOptionsCost
Drift detectionEvidently (OSS); Arize; WhyLabs; customEvidently: K8s-native, OSS (recommended). Managed: convenience. Custom: control + ops.
LLM-as-judge modelGPT-4-class (closed); Claude-class (closed); open weightsClosed: best quality, $$ per judgment. Open: cheaper, quality varies.
A/B frameworkCustom (Flagger from Phase 38); LaunchDarklyFlagger: K8s-native (recommended). LaunchDarkly: feature flags + experiments.
Eval orchestrationArgo CronWorkflows; standalone scheduler; ad-hocArgo: composes with Phase 33 (recommended).

4. TOOLS (as of 2026-06)

Reading


5. MASTERY: Continuous eval pipeline

[ ] Evidently deployed via Flux + Helm
[ ] Define offline eval suite for one Production model: 20+ test cases
[ ] Define slice-level metrics; verify no group regression
[ ] A/B test framework via Flagger; route 5% to candidate model
[ ] Drift detection CronWorkflow: daily PSI on top 5 features
[ ] Alert on drift; verify Slack notification
[ ] LLM-as-judge for one open-ended task (e.g., summary quality)
[ ] Add eval-pass gate to MLflow promotion CI
[ ] Track eval metrics over time; observe natural drift
[ ] Document the eval contract for one model (what's measured, thresholds)

6. COMPARE: Arize or WhyLabs

Pick one managed monitoring service; explore free tier. Compare insights vs Evidently.

400-word reflection.


7. OPERATE


8. CONTRIBUTE


What ships from this phase


Validation criteria

[ ] Evidently deployed; drift alerts working
[ ] Offline eval suite gating promotion
[ ] A/B framework (Flagger) routing candidate models
[ ] LLM-as-judge for one open-ended task
[ ] All 10 operational depth checks
[ ] Compare reflection (400 words)
[ ] 4-5 runbooks
[ ] 1-2 ADRs
[ ] Pattern entries:
    - evals → DEEP
    - drift-detection → OUTLINE
    - llm-as-judge → OUTLINE
[ ] Exit Test passed

Exit Test

Time: 2.5 hours.

Part 1: Build (90 min)

Set up an Evidently drift report as an Argo CronWorkflow. Alert if PSI > 0.25 on any tracked feature. Trigger a deliberate drift; verify alert.

Part 2: Diagnose (45 min)

A monitoring scenario (e.g., “drift alert fires daily but model performance looks fine”). Possible: false-positive PSI threshold; benign covariate shift; metric we care about isn’t accuracy.

Part 3: Articulate (15 min)

~400 words: “When would you use LLM-as-judge vs human eval vs hard metric? Use one concrete example.”


Anti-patterns

Anti-patternWhy
Eval once at training, never againProduction degrades silently
Aggregate accuracy as the only metricHides slice regressions
Drift alerts without actionAlert fatigue
LLM-as-judge without calibrationJudge bias contaminates results

Patterns touched this phase


→ Next: Phase 42: Vector Stores + Embeddings + RAG