ADR 0006 — The model bake-off is a screen, not a ranking
2026-08-29 · Status: accepted**
Context
poc/bakeoff.py replays 14 recorded calls through 8 candidate LLMs against an
unchanged dialogue layer. The first run produced a clean table and an obvious
conclusion: the incumbent wins. An adversarial methodology review dismantled it.
- The corpus is off-policy and the incumbent generated it. Every vendor
utterance is a human's reaction to something
gemma-3-27bsaid. - Three of six flags could not fire.
rate_wordsis empty on all 69 model turns, sodroppedwas impossible by construction and thecounter_oncestance — the only turn where money is at stake — never occurs. - The
englishflag had a 0% true-positive rate across 26 firings, and was deciding places 2–7. - Zero of seven comparisons survive Holm correction at n=69. Separating 98.6% from 94.2% needs ~59 calls.
Decision
Keep it, and label it. It is a screen for gross failures — it reliably catches things like one model repeating a sentence verbatim across four different questions. It does not choose a model.
Choosing a model requires on-policy runs where each candidate generates its own trajectory, plus human ratings for fluency.
Consequences
- The broken flags were deleted rather than repaired. Replacing a broken metric with a plausible one is how the first version happened.
- The table prints its own caveats so a reader cannot take the numbers neat.
- We still ship
gemma-3-27b— not because it won, but because nothing beat it.
Revisit when
A corpus exists that reaches the counter_once stance, or the eval harness can
drive candidates on-policy.