Eval Frameworks: How to Swap LLM Models Without Breaking Production
A better model drops every few weeks, and most teams can't upgrade because they can't prove the new one won't break the cases that matter. The fix is an eval harness built on a golden set you own. How to build it, what to grade, and how the model swap becomes a config change instead of a three-week gamble.

Every few weeks a better model ships, and a familiar meeting follows. Someone wants to upgrade. Someone else asks how we know it won't break. The room goes quiet, because the honest answer is that nobody knows. So the team either swaps on faith and finds the regressions in production, or freezes on an old model while the frontier moves past them. Both are losses, and both come from the same gap: no way to measure whether a new model is actually better for your job.
The teams that upgrade the day a model drops aren't braver. They built the one asset that makes the swap boring: an evaluation harness over a golden set they own. With it, changing models is a config change and a green test run. Without it, it's a gamble you take blind.
Why you can't just swap the model
A new model's benchmark scores tell you how it does on someone else's tasks. They say nothing about yours. The model that tops a public leaderboard can be worse on your specific extraction, your tone, your refusal behavior, your edge cases. General capability and fitness for your job are different measurements.
The danger isn't the average. It's the tail. A new model can lift your overall accuracy two points and quietly break the 5% of cases that carry the most weight, the compliance-sensitive answers, the rare formats, the questions where being wrong is expensive. In regulated systems that 5% is the whole ballgame. An eval that only reports an average will wave the regression right through.
The golden set is the real asset
Before the harness, the dataset. A golden set is a curated collection of real inputs paired with known-good outputs, or with graders that can judge outputs. It is the single most durable thing your AI team can build, because it outlives every model. Models are rentals. The golden set is the property.
Three properties make it worth trusting:
It comes from real traffic. Pull cases from production logs, not from your imagination. The inputs users actually send, including the malformed and the adversarial, are the ones a model swap will break.
It over-weights the tail. Fill it with the cases that hurt when they're wrong. If a category carries legal or clinical risk, it belongs in the set at ten times its natural frequency, because that's where you most need to catch a regression.
It's versioned and owned by you. The set lives in your repo, reviewed like code, growing every time production surprises you. A vendor's benchmark can't do this job. Only your data knows your failure modes.
A few hundred well-chosen cases beat ten thousand generic ones. Curate, don't scrape.
Build the harness
The harness runs every candidate model against the golden set and produces a comparable score. The contract that makes it work is a clean seam between your system and the model, so the model is a parameter, not a wiring assumption.
type Model = { id: string; complete: (prompt: string) => Promise<string> };
type Case = {
id: string;
input: string;
category: string; // e.g. "penalty-calc", "abstention", "rare-format"
grade: (output: string) => Promise<Score>; // deterministic where possible
};
async function evaluate(model: Model, set: Case[]): Promise<Report> {
const results = await Promise.all(
set.map(async (c) => ({
case: c,
output: await model.complete(c.input),
}))
);
const scored = await Promise.all(
results.map(async (r) => ({ ...r, score: await r.case.grade(r.output) }))
);
return summarize(scored); // by category, not just overall
}
The point isn't the code, it's the seam. If swapping model.id requires touching anything but config, you have a coupling problem that will bite you long before the next model does. Keep the reliability layer, the retrieval, the guardrails, the abstention logic, identical across candidates. You're testing the model, so hold everything else fixed.
Grade what matters, not vibes
Most eval effort dies on grading. "It looks better" is not a measurement. Three grading modes, in order of preference:
Deterministic checks where the task allows them. Did the quoted number match the source? Is the JSON valid against the schema? Did the system abstain on the cases where the right move is to abstain? These are cheap, fast, and never drift. Use them wherever the task has a checkable answer.
Reference comparison where there's a known-good output. Exact match is too brittle for language, so compare on the dimension you care about: the extracted field, the decision, the citation, not the phrasing.
Model-graded, carefully for genuinely open outputs. An LLM judge is useful and biased. Pin it with a rubric, validate it against human labels on a sample, and never let it grade the high-stakes categories alone. A judge you haven't checked is just a second opinion you can't audit.
Report by category, always. "94% overall" hides the story. "Abstention correctness dropped from 99% to 88%" is the story, and only a per-category report tells it.
The swap becomes a gate
Once the harness exists, wire it into the path where model changes happen. A candidate model has to clear the golden set before it can ship, and the gate is specific: no category regresses past its threshold, and the high-stakes categories don't regress at all.
New model → run golden set → per-category report
│
├─ high-stakes categories hold AND no category drops > threshold ──► ship (config change)
│
└─ any regression on a category that matters ──► block, inspect, keep current model
Now the meeting changes. "Can we upgrade?" gets answered by a test run, not a debate. The team that has this ships the new model in an afternoon with evidence. The team that doesn't spends three weeks in manual spot-checks and still ships on a hope. This is the same discipline behind keeping your model layer swappable in the build-vs-buy decision: the eval suite is what makes "buy the commodity, stay swappable" real instead of aspirational.
Where to start
You don't need a platform. You need fifty real cases from your logs, weighted toward the ones that hurt when they're wrong, each with a grader you trust, and a script that runs any model against them and reports by category. Ship that this week. Add cases every time production surprises you.
The frontier will keep moving. The only question is whether each new model is an afternoon's upgrade backed by evidence, or a quarterly act of faith. The golden set is what decides which. It's the cheapest insurance in AI engineering, and the teams that skip it pay for it later, in production, in front of users, on the cases they could least afford to get wrong.
If you want a second set of hands building that harness and the golden set to go with it, we've shipped this pattern across regulated production systems and we're glad to help you stand one up.
Talk to the team behind this
Building something like this in production?
Our senior engineers ship this kind of work for real teams. 45-minute call, no pitch deck — just architecture, trade-offs, and whether we're the right fit for your problem.










