Show HN: A model-routing benchmark – the routers optimize the wrong axis A developer released a benchmark and tutorial series showing that model-routing systems optimize the wrong axis by routing ungrounded queries, while grounding—providing relevant context—dramatically improves accuracy across all model tiers, with a small local model plus retrieval outperforming an expensive ungrounded flagship model. A model-routing benchmark and tutorial series: which model should handle a query — and is that even the right first question? Three model tiers, cold vs. grounded, scored with a deterministic citation-match metric against the published code text. 45 real questions about the 2023 8th-Edition Florida Building Code and the Naples/Collier County local amendments, each with a gold section citation verified against the published text. Every number below regenerates from the committed raw results via analysis/benchmark report.ipynb /dotnetspark/fbc-model-routing-benchmark/blob/main/analysis/benchmark report.ipynb . → Full synthesis with method, caveats, and the router study: FINDINGS.md | tier | cold — correct / wrong / abstain | grounded — correct / wrong / abstain | Δ correct | |---|---|---|---| | Claude Opus 4.8 foundation role | 26.5% / 31.8% / 41.7% | 59.1% / 11.4% / 29.5% | +32.6 | | Claude Haiku 4.5 instruction-tuned, forced JSON schema | 31.8% / 67.4% / 0.8% | 77.3% / 22.7% / 0.0% | +45.5 | | phi3:mini ~3.8B SLM, local Ollama | 7.9% / 39.4% / 52.8% | 52.5% / 12.5% / 35.0% | +44.6 | Cold = parametric memory only, 45 questions × 3 repeats scoreable n = 132/132/127 . Grounded = the correct code passage injected as context, single pass n = 44/44/40 . "Wrong" = cited a section the published code doesn't assign — a hallucinated citation. Three findings carry the series: Cold, no tier is usable — and each fails differently. The flagship abstains 42%, calibrated honesty , the schema-forced cheap model fabricates 67% wrong — its required section field forbids "I don't know" , and the small local model simply doesn't know 7.9% correct . A schema guarantees a parseable answer, never a correct one. Grounding rescues the cheap local model. Retrieval lifts every tier by 33–46 points; grounded phi3 52.5%, on a laptop, ~free, offline beats cold Opus 26.5% by ~2×. Cheap local model + good retrieval beats an expensive model alone. Grounding is a separate axis that belongs Off the shelf, every router we dry-ran RouteLLM, NotDiamond routes 100% ungrounded — not because they're bad, but because grounding is a pipeline decision outside the "pick a model" abstraction. Ground the prompt yourself and in front of model routing. train NotDiamond's custom router on your own scores, and it lands cheap + grounded on its own — matching the hand-built router: Gemini's free tier covers the whole benchmark; no paid key needed. git clone https://github.com/dotnetspark/fbc-model-routing-benchmark.git cd fbc-model-routing-benchmark pip install -r requirements.txt Python 3.11+ Free key from https://aistudio.google.com → put it in .env: GEMINI API KEY=... python run benchmark.py --model-class foundation gemini --repeats 1 --limit 5 smoke test python run benchmark.py --model-class foundation gemini full cold run, $0 Each run writes one JSON line per request to results/