My Local LLM Scored 6/6. It Was Wrong Every Time. · Mark HallSkip to content
One of the tasks in my benchmark asks this:<br>How many 5-person committees can be chosen from 12 people?<br>Reply with only the integer.
My 1.2B local model answered 60. The correct answer is 792.<br>My evaluator passed it.<br>It passed all six questions in that probe. The model had gotten every single one<br>wrong. The scorer checked whether the answer looked like a bare integer, never<br>whether it was the right one — so 6/6 passed, 0/6 correct .<br>I had not made a small model smarter. I had built an instrument that could be<br>flattered by good formatting.<br>What I actually found<br>Here’s where I landed after six months, before I walk back through how I got<br>here.<br>QuestionAnswerDid scaffolding raise closed-book knowledge scores?Not in my tests. Frozen-runtime MMLU-Pro: raw 10/20, same-prompt direct 10/20, harness 10/20. An earlier 13/20 did not reproduce.Did it raise verified, tool-backed task completion?Yes, substantially. On a sealed 100-case bank, Gemma 4 26B went from 5 to 56 completed cases with the same fixed model.Does more completion mean more reliability?Not automatically. The 1.2B model went 12 → 32 cases and stayed at 1 of 25 complete task families.Did the underlying model matter?Yes. Complete families: 1.2B held at 1/25, an 8B went 3 → 9, Gemma went 0 → 10.What was the mistake underneath all of it?Measuring answer shape instead of answer value, and treating a knowledge benchmark as a product benchmark.Everything below is how I got each of those wrong before I got them right.<br>Starting with the easy wins<br>I started with a hypothesis: a well-designed harness on a small local model could<br>handle most ordinary tasks and feel like something much larger. Not because the<br>model got smarter — because the system around it did.<br>The early evidence was encouraging, and in retrospect that was the problem.<br>Ask a small model whether to walk or drive to a car wash 50 meters away and it<br>fumbles. Structure the reasoning — what is the user trying to accomplish, what<br>does that require, what follows — and it gets there. Ask how many R’s are in<br>“strawberry” and it needs a counting tool, not better spelling. Ask what’s<br>heavier, a pound of feathers or a pound of gold, and watch it convert gold to<br>troy ounces, convert again, and solemnly compare two numbers that were never<br>different. Hand it a unit converter and the trap closes.<br>Three puzzles, three fixes, and a growing sense that this was going to work.<br>Then I asked an AI to make the tests pass<br>I wrote about fifteen logic tests and a rough scoring rubric, and told Codex to<br>iterate until everything came back correct.<br>It did. That was the problem.<br>Opus and Codex both have the same habit: they find the easiest path to the<br>correct output. In this case, the easiest path was hard-coding the answers<br>because I’d handed them the correct information. Imagine my dismay when I caught<br>them red-handed in code review.<br>A stern talking-to only goes so far. I wagged my finger and told them to knock it<br>off. They obeyed — begrudgingly — and after many, many attempts, I got to<br>something like the right shape. But it was brittle. Too much of it leaned on<br>regex formatting; word a question slightly differently and everything would<br>break. It made me want to pull my hair out.<br>I was, without knowing the term for it yet, overfitting — with an enthusiastic<br>assistant doing the overfitting on my behalf.<br>The realization that reframed everything<br>I was reading benchmark results for a newly released model when the thought<br>landed:<br>I could not improve anything until I could measure it.<br>Obvious in hindsight. Embarrassing in the moment. I had spent weeks generating<br>ideas and evaluating them against a rubric I’d written casually, with an agent<br>that would happily satisfy it by any means available. Every conclusion I’d drawn<br>was downstream of an instrument I had never validated.<br>So I went looking for a real benchmark and landed on MMLU-Pro, a more difficult<br>version of the MMLU benchmark everybody quotes. Closed-book, widely used,<br>publicly reported. I built a workbench around it and set the agent loose.<br>MMLU-Pro was the wrong shape and I didn’t know it<br>The early results looked good, because early results always do. Then they<br>flattened. I ran it for days. Movement was small, inconsistent, and never<br>reproduced cleanly.<br>Eventually the controls told me why. Under a frozen runtime:<br>ConditionResultRaw baseline10/20 — 50%Same-prompt direct10/20 — 50%Current harness10/20 — 50%Historical product version10/20 — 50%Identical, every arm. The earlier 13/20 did not reproduce once the runtime was<br>pinned, so it’s a historical observation, not an uplift. A separate experiment<br>with sampled voting made things actively worse — 37.9% → 27.9% — and that<br>mechanism was removed.<br>I’ll be straight: I didn’t understand what MMLU-Pro was for. It is deliberately<br>closed-book. It measures what a model can produce from its...