Key takeaways
- Test a model upgrade on frozen production tasks, comparing old and new on the same items.
- Check schemas, tool calls, citations, refusals and length in code before asking an LLM judge.
- Price the switch per successful task, thinking tokens included, at the post-introductory rate.
- Gemini 4 Argon costs $2 in and $10 out per million tokens until 30 November 2026, then $4 and $20.
- Shadow live traffic, then run a canary behind a flag you can flip back without a deploy.
LLM regression testing for a model upgrade means running a frozen set of your own production tasks through the old and new models and comparing the results item by item. As a routine, it takes about a week. Build a golden dataset from logs and past incidents. Check outputs in code, and bring in a calibrated LLM judge only for what code can’t check. Price the switch per task at the rate you’ll pay after any launch offer, and measure p95 latency at your own load. Read every regression yourself, then shadow live traffic and run a canary behind a switch you can flip back.
Models now change monthly. Anthropic released Claude Opus 5.5, Sonnet 5.5 and Haiku 5.5 between 22 September and 7 October 2026, each with notes on code that can break.1 Google made Gemini 4 Argon generally available on 13 October at an introductory $2 per million input tokens and $10 per million output tokens, rising to $4 and $20 on 1 December.23
We haven’t tested Argon or any other model for this post. Vendor claims are labelled, and prices are as of 21 October 2026.
Why leaderboard gains don’t carry over to your product
A leaderboard scores a model on someone else’s tasks, harness and prompts, and small changes to the harness can reorder the top. Google’s launch post says Argon ranks first on the Vals Index of finance, coding, legal and tax tasks.2 It did on 13 October, at 68.90% to Claude Sonnet 5.5’s 67.04%.4 Six days later, version 2.2 of the index, with updated component tests, put Sonnet 5.5 first at 70.85%, Claude Opus 5.5 second at 70.18% and Argon third at 69.24%.5 Vals adds that Argon would lead if answers from a fallback model after a refusal counted as failures. The top three are 1.6 points apart, and their order depends on how refusals are scored.
Your prompts were also tuned to the old model’s habits, and vendor guides say those habits change between generations.
- Google says Argon “can spend more of the limit on thinking than earlier models” and ignores temperature, top_p and top_k. It asks you to run your evaluations at all three thinking levels.6
- Anthropic says effort level names “don’t correspond to the same amount of thinking across models”, and that instructions tuned for Opus 5 may no longer be needed on Opus 5.5.78
- OpenAI says GPT-6 Astra is stronger at following instructions than its previous models, and can be more sensitive to instructions in skill files and AGENTS.md.9
Google and Anthropic both count thinking against the output limit, so a cap sized for a model that thought less can cut an answer off halfway through its JSON.67
Build a golden dataset from production traffic
The test set should look like your traffic, plus the cases that have hurt you before.
- Sample by intent. Draw recent requests from each intent or route in proportion to traffic, with a floor for rare intents that matter, such as refunds.
- Add hard cases. Include long inputs, every language you serve, ambiguous requests, requests that should be refused, and items the old model gets right only sometimes.
- Add every past incident as a permanent item.
- Freeze it. Store each item as the model saw it, with the prompt version, retrieved passages and tool results, so a replay changes only the model. For agents, replay recorded tool responses or use a sandbox.
- Label expected outcomes. Use an exact value where one exists, required facts and forbidden claims where it doesn’t, and flags for items that should be refused or should end with a question.
- Scrub personal data under your own policy first.
Run both models on every item with the same prompts and settings, apart from changes the migration guide requires. Evan Miller’s “Adding Error Bars to Evals” recommends analysing these question-level paired differences, which he calls a “free” reduction in variance, and repeating questions whose answers vary.10 His worked example needs about 1,000 questions to detect a 3-point difference. Our post on measuring model drift works through the arithmetic.
Checks in code first, an LLM-as-a-judge second
Anthropic’s evaluation guide calls code-based grading the “fastest and most reliable” method.11 It also catches the mechanical changes above on every item.
- Schema. Validate every structured answer against its schema, and count truncated JSON separately.
- Tool calls. Check that required calls happen with valid names and arguments, and that nothing is called when nothing is needed. In unattended flows, count turns that end in a question or a status note.
- Citations. Every cited source must exist in the retrieved set.
- Refusals. Count them per intent. On Claude, a classifier decline is a normal response with the stop reason “refusal”.7
- Length and format. Log visible and thinking tokens, and flag Markdown where your interface shows plain text.
In 9io Alpha, our research platform, code checks the allowed values, ranges and required fields in the judge model’s answer on every research verdict before anyone sees it. Check your test judge’s output the same way.
Use the judge only for what code can’t check, such as correctness or tone. First label a sample by hand and measure the judge’s agreement with a statistic that corrects for chance. Thakur and colleagues found that judges with high percent agreement could still give scores far from human ones, and that judges leaned towards leniency.12 A lenient judge can pass both models and hide the regression you’re looking for.
Zheng and colleagues measured several judge biases on 2023 models, and each can tilt a comparison between two model generations.13
- Verbosity. On 23 answers, padding each with a rephrased copy of its own list fooled Claude-v1 and GPT-3.5 in 91.3% of cases and GPT-4 in 8.7%.
- Order. GPT-4 gave the same verdict with the answers swapped in 65% of cases, so judge each pair both ways.
- Reference answers. On 10 maths questions judged in both orders, GPT-4 passed a wrong answer 14 times in 20 with the default prompt and 3 times when given a reference answer.
- Self-preference. Panickssery and colleagues found that models can recognise their own outputs, and that stronger self-recognition went with stronger self-preference.14 Use a judge from a third model family, and pin its ID too.
Cost per task, at the price after the introductory period
Compare cost per successful task on the golden set. Multiply input and output tokens by their prices, counting thinking as output, multiply by one plus the retry rate, and divide by the pass rate.
- Thinking. Google bills Argon’s output “including thinking tokens”, and Anthropic bills thinking as output “even when the thinking text is not returned to you”.38
- Length. OpenAI says GPT-6 Astra “tends toward detailed, formatted responses”, and also reports, as a vendor claim, a lower estimated cost per task than earlier models in several of its evaluations.9
- Cache hits. Argon supports only implicit caching, with a 95% discount on hits for prompts of at least 4,096 tokens.6 On Opus 5.5, changing the effort level between requests invalidates the cache.7
- Tokenizers. Anthropic says its tokenizer since Opus 4.7 may use roughly 1x to 1.35x as many tokens for the same text as earlier models, varying by content.8 Count your own prompts with each model’s counter.
As of 21 October 2026, Argon costs $2 per million input tokens and $10 per million output tokens through 30 November 2026, then $4 and $20 from 1 December, with cached input going from $0.10 to $0.20.32 Price the decision at the later rate. Other models’ prices are in our LLM API price comparison of 8 October.
Latency and rate limits on a newly launched model
Measure p50 and p95 end to end, time to first token, and time to the first token a user sees, which thinking delays. Do it from your region at your concurrency, and again on live traffic during the shadow run.
Google says hard Argon prompts “can take several minutes”, recommends HTTP client timeouts of at least 15 minutes, and lists its high thinking level as having the “slowest first token”.6
Argon isn’t on the free tier, and Google doesn’t publish its per-minute limits. Each project sees its own in AI Studio, Google says they “are not guaranteed”, and spend-based limits may apply over a rolling 10 minutes, from $10 at Tier 1 to $200 at Tier 3, depending on billing history.15 At Tier 1 and Argon’s introductory output price, $10 covers about one million output tokens every 10 minutes, thinking included. Anthropic gives Opus 5.5 its own limit, outside the bucket shared by Opus 4.5 to 4.8, so headroom on an older model doesn’t follow you.16 Load-test at peak concurrency and count 429 errors and timeouts as failures.
Behaviour changes to read by eye
Read every item the old model passed and the new one failed, plus a sample that both passed, side by side by intent and language.
- Tone and length. Google says Argon “answers questions more directly with less hedging” and follows style instructions better than its earlier models.2 OpenAI says GPT-6 Astra tends to use lists, tables and Markdown and may reuse phrases across sessions.9 An instruction added to stop the old model hedging can over-correct.
- Stopping to ask. Google trained Argon to “pause for human confirmation before taking irreversible steps”.2 OpenAI says Astra is more likely to ask a question when more input could change the result, which “can cause it to stop when the user may expect it to make reasonable assumptions and persist”.9 Anthropic says some Opus 5.5 progress updates end the turn without a tool call, which stops an unattended agent loop that reads them as the end of the task.7
- Refusals. Google says Argon is “significantly better at not fulfilling harmful requests than our previous models”, and Anthropic says Opus 5.5’s classifiers cover more categories than Opus 5’s.28 Test legitimate requests about security and biology.
- Tool plumbing. Opus 5.5 and Sonnet 5.5 reject forced tool choice. Opus 5.5’s notes between tool calls arrive in thinking blocks, so an app that streamed them “goes quiet between tool calls”.18
- Languages. Read samples in each language you serve, and compare token counts per language.
Shadow testing, a canary and pinned versions
In shadow testing, each live request is copied to the new model, and its answer is checked by the same code, logged and discarded, so users never see it. It costs money and sends user content to another model. If you switch LLM provider, check that your data processing terms cover that.
Then run a canary. Google’s SRE workbook defines canarying as “a partial and time-limited deployment of a change in a service and its evaluation”, with the rest of the service as the control.17 Send a small share of traffic to the new model, compare its metrics with the control, and keep the model choice in a runtime flag so rollback is a config change.
Pin the model you tested. What stays fixed differs by vendor, as of 21 October 2026.181920212223
| Vendor | Fixed | Moves | Retirement notice | Date to note |
|---|---|---|---|---|
| Anthropic | Every model ID, dated or not | Aliases of older models | At least 60 days | Sonnet 4.5 retires on 30 November 2026 |
| OpenAI | Dated snapshots, such as gpt-5-2025-08-07 | Aliases, such as gpt-5 | At least 6 months for generally available models; as little as 2 weeks for previews | Listed GPT-4o and GPT-4.1 snapshots shut down on 14 January 2027 |
| Stable IDs, such as gemini-4-argon, which “usually don’t change” | “latest” aliases, swapped at each release | At least 2 weeks for previews; 45 days for short-term models on Google Cloud | Argon stays on Google Cloud until at least 13 October 2027 |
Pinning has limits. Anthropic says changes to its serving infrastructure can alter behaviour slightly on an unchanged ID.18 Since 8 October, Google’s deprecated gemini-3.7-flash has routed requests to gemini-3.8-flash, an upgrade its callers didn’t choose.24 Claude’s retirement dates can also differ on Amazon Bedrock and Google Cloud, which set their own.19 Watch each model deprecation page, poll the shutdown_date field in OpenAI’s Models API, and keep the golden set running on a schedule so a forced LLM model upgrade gets the same test as a chosen one.
LLM regression testing checks, pass rules and blockers
Set tolerances before you run. The table assumes 2 points for task success; use your own.
| What to check | How to check it | Pass rule | Block the switch when |
|---|---|---|---|
| Task success | Paired bootstrap on the golden set | Low end of the 95% interval above −2 points | The whole interval is below zero |
| Past incidents | Rerun every incident item | All pass | Any one fails |
| Structured output | Schema validation in code | No more failures than the old model | Failures rise on a path that feeds code |
| Tool calls | Validate names and arguments; check required calls | No more invalid or missing calls | A required call is skipped, or an unattended flow stops to ask |
| Citations | Match cited IDs to the retrieved set | None invented | Any invented citation |
| Refusals | Refusals per intent | Within the old rate on legitimate intents | Refusals rise on an intent users need |
| Judged quality | Calibrated judge, reference answers, both orders | New no worse than old | Judge disagrees with hand labels, or new is worse |
| Cost | Cost per successful task, all tokens and retries | Within budget at the post-introductory price | Over budget once the launch offer ends |
| Latency and limits | p50, p95, first visible token and 429 errors at peak concurrency | Within your SLO, no sustained 429s | SLO breached, or rate or spend limits hit at peak |
| Canary | Small share of traffic against a control | Key metrics match the control | A key metric moves away from the control |
A paired bootstrap for old versus new in Python
The function returns the change in pass rate from old to new with a 95% interval, resampling items with replacement as in Koehn’s paired bootstrap of 2004.25 Pass each item’s intent as strata to keep the set’s mix of intents in every resample.
import random
from collections import defaultdict
def paired_bootstrap(old, new, strata=None, n_boot=10_000, seed=0):
"""Change in pass rate (new minus old) on the same items, with a 95% interval.
old, new: 0/1 or True/False results, one per item, in the same order.
strata: optional label per item (an intent, say); resampling then keeps the mix.
Returns (difference, low, high, regressions, fixes).
"""
if not old or len(old) != len(new):
raise ValueError("need one old and one new result for every item")
deltas = [int(b) - int(a) for a, b in zip(old, new)] # -1 regressed, +1 fixed
groups = defaultdict(list)
for label, d in zip(strata or [None] * len(deltas), deltas):
groups[label].append(d)
rng = random.Random(seed)
n = len(deltas)
boots = sorted(
sum(sum(rng.choices(g, k=len(g))) for g in groups.values()) / n
for _ in range(n_boot)
)
low, high = boots[int(0.025 * n_boot)], boots[int(0.975 * n_boot) - 1]
return sum(deltas) / n, low, high, deltas.count(-1), deltas.count(1)
Read the interval first. Only items where the two models disagree change the difference, and their share sets the interval’s width. If the interval is wider than the regression you care about, the set is too small. With a tolerance agreed in advance:
- Switch on this check when
lowis above minus the tolerance. - Block when
highis below zero. - Otherwise add items, or stay on the old model.
For a plain pass rate over hundreds of items, Miller’s analytic formula gives much the same interval, and he regards a bootstrap as unnecessary unless the sampling scheme or estimator is complicated.10 A stratified sample is such a case, and so is cost per successful task.
LLM evaluation checklist for a model upgrade
Days 1 and 2
- Sample production requests by intent, add hard cases and past incidents, scrub personal data and freeze the set.
- Label expected outcomes, including refusals and clarifying questions.
- Pin both model IDs and apply only the changes the migration guide requires.
Days 3 and 4
- Run both models on every item, repeating where answers vary, then the code checks.
- Calibrate a judge from a third model family, with reference answers and both orders.
- Compute the paired difference and interval, and read every regression.
Day 5
- Price each successful task at the post-introductory rate, thinking and retries included.
- Measure p50, p95 and first visible token at peak concurrency, and count 429 errors.
Then
- Shadow live traffic, then canary behind a runtime flag with a tested rollback.
- Note the retirement date, and rerun the golden set on a schedule.
-
Anthropic, “Claude Platform release notes”, entries for 22 and 28 September and 7 October 2026, Internet Archive copy of 21 October 2026, https://web.archive.org/web/20261021093637/https://platform.claude.com/docs/en/release-notes/overview ↩↩
-
Koray Kavukcuoglu, “Gemini 4 Argon: Built to solve your hardest problems”, Google, 13 October 2026, https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/ ↩↩↩↩↩↩
-
Google, “Gemini Developer API pricing”, last updated 19 October 2026, https://ai.google.dev/gemini-api/docs/pricing ↩↩↩
-
Vals AI, “Vals Index”, version 2.1, updated 13 October 2026, Internet Archive copy of 15 October 2026, https://web.archive.org/web/20261015042827/https://www.vals.ai/benchmarks/vals_index ↩
-
Vals AI, “Vals Index”, version 2.2, updated 19 October 2026, Internet Archive copy of 21 October 2026, https://web.archive.org/web/20261021083936/https://www.vals.ai/benchmarks/vals_index ↩
-
Google, “What’s new in Gemini 4 Argon”, Gemini API docs, last updated 16 October 2026, https://ai.google.dev/gemini-api/docs/latest-model ↩↩↩↩
-
Anthropic, “Prompting Claude Opus 5.5”, Claude Platform Docs, Internet Archive copy of 20 October 2026, https://web.archive.org/web/20261020043054/https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5 ↩↩↩↩↩
-
Anthropic, “Claude Opus 5.5 migration guide”, Claude Platform Docs, Internet Archive copy of 14 October 2026, https://web.archive.org/web/20261014065913/https://platform.claude.com/docs/en/models/opus-5-5/migration-guide ↩↩↩↩↩
-
OpenAI, “Using GPT-6”, OpenAI API docs, Internet Archive copy of 17 October 2026, https://web.archive.org/web/20261017105548/https://developers.openai.com/api/docs/guides/latest-model ↩↩↩↩
-
Evan Miller, “Adding Error Bars to Evals: A Statistical Approach to Language Model Evaluations”, arXiv:2411.00640, 1 November 2024, https://arxiv.org/abs/2411.00640 ↩↩
-
Anthropic, “Define success criteria and build evaluations”, Claude Platform Docs, Internet Archive copy of 17 October 2026, https://web.archive.org/web/20261017150040/https://platform.claude.com/docs/en/test-and-evaluate/develop-tests ↩
-
Aman Singh Thakur, Kartik Choudhary, Venkat Srinik Ramayapally, Sankaran Vaidyanathan and Dieuwke Hupkes, “Judging the Judges: Evaluating Alignment and Vulnerabilities in LLMs-as-Judges”, arXiv:2406.12624, version 6 of 18 August 2025, https://arxiv.org/abs/2406.12624 ↩
-
Lianmin Zheng et al., “Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena”, NeurIPS 2023 Datasets and Benchmarks Track, arXiv:2306.05685, first posted 9 June 2023, https://arxiv.org/abs/2306.05685 ↩
-
Arjun Panickssery, Samuel R. Bowman and Shi Feng, “LLM Evaluators Recognize and Favor Their Own Generations”, arXiv:2404.13076, 15 April 2024, https://arxiv.org/abs/2404.13076 ↩
-
Google, “Rate limits”, Gemini API docs, last updated 15 October 2026, https://ai.google.dev/gemini-api/docs/rate-limits ↩
-
Anthropic, “Rate limits”, Claude Platform Docs, Internet Archive copy of 18 October 2026, https://web.archive.org/web/20261018175843/https://platform.claude.com/docs/en/api/rate-limits ↩
-
Google, “Canarying Releases”, The Site Reliability Workbook, chapter 16, O’Reilly, 2018, https://sre.google/workbook/canarying-releases/ ↩
-
Anthropic, “Model IDs and versioning”, Claude Platform Docs, Internet Archive copy of 14 October 2026, https://web.archive.org/web/20261014052016/https://platform.claude.com/docs/en/about-claude/models/model-ids-and-versions ↩↩
-
Anthropic, “Model deprecations”, Claude Platform Docs, Internet Archive copy of 17 October 2026, https://web.archive.org/web/20261017014543/https://platform.claude.com/docs/en/about-claude/model-deprecations ↩↩
-
OpenAI, “GPT-5” model page, snapshots section, OpenAI API docs, Internet Archive copy of 20 October 2026, https://web.archive.org/web/20261020162046/https://developers.openai.com/api/docs/models/gpt-5 ↩
-
OpenAI, “Deprecations”, OpenAI API docs, Internet Archive copy of 20 October 2026, https://web.archive.org/web/20261020162442/https://developers.openai.com/api/docs/deprecations ↩
-
Google, “Models”, Gemini API docs, section “Model version name patterns”, last updated 21 October 2026, https://ai.google.dev/gemini-api/docs/models ↩
-
Google Cloud, “Model versions and lifecycle”, Gemini Enterprise Agent Platform docs, last updated 21 October 2026, https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/model-versions ↩
-
Google, Gemini API release notes, entry for 8 October 2026, https://ai.google.dev/gemini-api/docs/changelog, and “Gemini deprecations”, last updated 20 October 2026, https://ai.google.dev/gemini-api/docs/deprecations ↩
-
Philipp Koehn, “Statistical Significance Tests for Machine Translation Evaluation”, Proceedings of EMNLP 2004, https://aclanthology.org/W04-3250/ ↩
Frequently asked questions
What is LLM regression testing?
It means running a fixed set of real tasks through the current model and a candidate, then comparing results item by item before you ship. The point is to find what got worse on your own work, which a benchmark average can hide.
How do you evaluate a new LLM before switching?
Replay a frozen golden dataset from production through both models with the same prompts and settings. Check outputs in code, use a calibrated judge only for what code can’t check, compare cost per successful task and p95 latency, read every regression, then shadow live traffic and run a canary.
How big should a golden dataset be?
Big enough that the 95% interval on the old-versus-new difference is narrower than the regression you care about. Evan Miller’s worked example points to about 1,000 questions to detect a 3-point difference, and items where the two models disagree drive the width.
Can I use LLM-as-a-judge for regression testing?
Yes, for what code can’t check, once you’ve measured its agreement with hand labels using a chance-corrected statistic. Give it reference answers, judge each pair in both orders, and use a judge from a different model family from both candidates.
How much does Gemini 4 Argon cost?
As of 21 October 2026, Google’s standard paid tier charges $2 per million input tokens and $10 per million output tokens, thinking included, through 30 November 2026. From 1 December the price is $4 and $20, and cached input goes from $0.10 to $0.20. Argon isn’t on the free tier.
Should I pin LLM model versions?
Yes. Call a fixed model ID rather than an alias that moves, and log the model each response reports. A pinned ID still retires, so track each vendor’s model deprecation page and rerun your tests when a date is announced.
Building something like this?
9io is a small team of senior engineers with a fractional CTO, and we work by the hour. Send us a note about your product. The reply comes from the person who'd do the work.