Silent quality regressions  / field guide
Practitioner field guide · 8 September 2026

When the model quietly gets worse

A class of production incident in which answer quality drops while every dashboard stays green, because the change was in a router, a kernel, a precision mode or a prompt, and not in the model. This guide reconstructs how the teams who have lived through it detect, attribute and reverse the failure, from their own published postmortems, issue threads and decision records.

33 primary sources 6 published incidents 12 organisations Evidence through Sep 2026 Read: 24 min
01

The territory

A serving system can degrade the answers it gives without dropping a request, slowing down, or raising an error. Everything the operations team watches keeps telling them the system is healthy while the thing the system is for gets worse.

State the problem without the word "model". You take a fixed function, deploy it behind a network of routers, caches, accelerators and prompt-assembly code, and then change one of those surrounding parts to make the system faster or cheaper. The function is supposed to be untouched. It is not: the change moves the output distribution just enough that the answers get worse, and it does so without touching a single signal your monitoring is built to catch. Availability holds. Latency holds. The error rate holds. The regression is real, it is affecting a measurable fraction of traffic, and the only instrument that registers it is a human being who reads the output and says something is off.

This is not a niche concern for one lab. In the twelve months to September 2026 the two largest model providers each published two separate postmortems of exactly this failure. Anthropic's September 2025 postmortem describes three overlapping infrastructure bugs that degraded Claude output quality, peaking at 16% of Sonnet 4 requests on 31 August 2025 [1]. Anthropic's April 2026 postmortem describes three product-layer changes that degraded Claude Code for roughly a month with no model change at all [2]. OpenAI's February 2024 status incident and its April 2025 sycophancy rollback are the same shape from a different company [3][4]. Below the labs, the open-serving ecosystem has spent the year discovering that the same model weights produce materially different quality on different inference engines and hosts.

16%
of Claude Sonnet 4 requests degraded at the 31 Aug 2025 peak, from an infrastructure bug, not a model change
97.6→2.4%
GPT-4 accuracy on identifying primes, March vs June 2023, same product name
16.6pp
most the inference backend alone can move a benchmark score, same weights
34%
average throughput cost of making SGLang inference bit-for-bit reproducible
The finding that surprised me

In every documented incident in this corpus, the detector was a user, never a gate. The dashboards that catch an outage are structurally blind to a quality regression, because quality is not a property of one request and outage monitoring is built per request. Both Anthropic and OpenAI converged on the same remedy, and it is an admission: run evaluations continuously against the true production system, and treat a human tester's "this feels off" as blocking. The pre-ship offline gate, the thing most teams build first, is not where these get caught.

Figure 1 · Where quality drifts between the weights and the user

Trained
weights

Quant-
ization

Kernels &
sampling

Routing

Harness &
prompt

User
token

Trained
weights

Quant-
ization

Kernels &
sampling

Routing

Harness &
prompt

User
token

Each stage between the trained weights and the returned token can move the output distribution while leaving request-level health untouched. The red stages are ones a published 2024–2026 incident has actually landed in. Reconstructed from Anthropic, OpenAI, Thinking Machines and the backend-reproducibility survey.
Diagram source

Scope. This guide covers text and code LLM serving where a hosted function is expected to stay fixed and a surrounding change silently degrades it. It covers first-party providers and third-party inference hosts. It does not cover retrieval quality in RAG systems, agent-orchestration bugs above the model, deliberate model version upgrades that change behaviour on purpose, or training-time regressions, each of which is a different failure with a different detection story.

02

How the defence is actually built

There is no single system that prevents silent regressions. What the published accounts share is a control loop bolted onto the serving path: a way to detect drift, a way to attribute it to a layer, and a way to reverse it. The interesting part is how thin each of those is in practice.

Reconstruct the common shape across the accounts and it separates into two planes. The serving plane is the request path itself, the same five stages as Figure 1, each an independent place where quality can move. The integrity plane is the machinery that is supposed to notice when it does. The lesson of the corpus is that the serving plane is elaborate and the integrity plane is improvised, and that the gap between them is where every incident lived for hours or weeks before anyone acted.

Figure 2 · The serving plane and the integrity plane

Integrity plane

Serving plane

gates

samples

blocks ship

attribution

Router

Inference engine
kernels, sampling

Response

Offline eval
on change

Continuous eval on
true production endpoint

Human review /
vibe checks

User-report triage

Integrity plane

Serving plane

gates

samples

blocks ship

attribution

Router

Inference engine
kernels, sampling

Response

Offline eval
on change

Continuous eval on
true production endpoint

Human review /
vibe checks

User-report triage

The reference shape assembled across providers. Solid boxes are on the request path; the integrity plane hangs off it. Dashed boxes are the ones the postmortems say were missing or too weak when the incident hit. Reconstructed from Anthropic's remediation list, OpenAI's process changes and GitHub Copilot's evaluation account.
Diagram source

Read the two planes stage by stage, because the design decisions in section 3 are all about which plane you invest in.

Routing

Sends a request to a server. The failure is subtle: a request lands on a server configured for a different context length, batch profile or model variant, and comes back degraded rather than failed. Anthropic's largest 2025 incident was exactly this, a short-context request routed to a one-million-token server [1].

Runs this way at: Anthropic, and implicitly at every multi-variant host.

Inference engine

The kernels that do the arithmetic and the sampler that picks the token. This is the densest cluster of silent-failure sources: a fast approximate top-k that is wrong for some batch sizes, a mixed-precision mismatch, a dropped sampling parameter. Correct on average, wrong on a slice.

Runs this way at: Anthropic (TPU), vLLM, SGLang.

Harness and prompt

The system prompt, context assembly and reasoning-effort settings wrapped around the model. Changing any of them changes the answers. Anthropic's April 2026 Claude Code regression came entirely from this layer, with the model untouched [2].

Runs this way at: Anthropic, GitHub Copilot, every application built on someone else's model.

Offline eval (gate)

The test suite run before a change ships. Present at every serious operator, and by itself insufficient: OpenAI's sycophancy update passed offline evals and A/B tests and was still wrong [5]. It catches what it was written to catch and is blind to the property nobody thought to measure.

Runs this way at: GitHub Copilot (4,000+ tests), OpenAI, Anthropic.

Continuous production eval

The same evals run on the real serving endpoint on a schedule, not on a staging copy. This is the box the postmortems say was missing. Anthropic's remediation commits to running "quality evaluations continuously on production systems" [1]; before the incident, evals ran on a system that did not have the bug.

Named as newly-added at: Anthropic. Rare elsewhere.

User-report triage

The path from a user saying "it got worse" to an engineer reproducing it. At the labs this path is throttled by privacy controls that stop engineers reading the transcripts, which is correct for privacy and catastrophic for detection latency [6].

Runs this way at: Anthropic, and any provider with real privacy controls.

Attributable, not invented

Every box above is placed by a named source. The two planes are my framing, not a term any provider uses; I am calling them the serving plane and the integrity plane because the sources describe the same split in three different vocabularies. Where a box is marked weak or missing, that is the provider's own postmortem saying so, not my inference.

03

The decisions that matter

Five forks recur across the accounts. Each has a defensible answer on both sides, and each has a condition that flips it. The conditions are the transferable part.

Decision: approximate sampling kernel, or exact?

Chosen after the incident
  • Exact top-k, standardised on fp32 for the sampling step (Anthropic, Sep 2025)
  • Correctness is worth the latency because the failure is invisible to monitoring
Chosen before it
  • Approximate top-k, a faster path that "sometimes returned completely wrong results, but only for certain batch sizes and model configurations"
  • Chosen for speed; the wrongness was slice-dependent and never showed in aggregate metrics
Flips when
  • You can prove the approximation is exact for every batch size and precision you actually run, and you have a continuous eval that would catch it if a config change breaks that

Decision: trust the green gate, or trust the tester who says it feels off?

Chosen after the incident
  • Treat a qualitative "vibe check" as launch-blocking (OpenAI, May 2025)
  • Human review caught what offline evals and A/B tests missed
Chosen before it
  • Ship on positive quantitative signals; testers had said it "felt slightly off" and were overruled
  • "Unfortunately, this was the wrong call"
Flips when
  • Your offline evals actually measure the property the testers are reacting to. Until a failure mode has a metric, the human is your only detector for it, and overruling the human is overruling your only detector

The other three forks are best read as a table. Each row is a real decision a team recorded, not a hypothetical.

DecisionChosenRejectedBecause / flips whenEvidence
Batch-invariant kernels for determinism? Yes, when reproducibility is required (RL training, evals, audit) No, keep batch-dependent kernels for peak throughput Determinism costs 25–45% throughput today. Flips toward invariant kernels when you need bit-identical outputs or defensible evals; stays with fast kernels for latency-bound serving where small output drift is acceptable. Thinking Machines, SGLang
Where does determinism live: the engine's IR, or outside it? Outside: keep the IR "unaware of batch invariance as a concept", route via platform kernel lists Make batch-invariant dispatch a first-class IR concern vLLM's own RFC argues determinism is a platform-and-kernel property, not an architectural one, and closed the first-class proposal as not planned. Flips if a hardware generation makes invariance impossible to bolt on after the fact. vLLM RFC #40628
Consuming a third-party host: pin the provider and quantization, or take the cheapest route? Pin, when you are measuring or when quality matters Auto-route to cheapest, accept whatever precision arrives Backend and quantization move scores by up to ~16 points on identical weights. A community review found 31 of 32 research codebases used unpinned routing unsafely. Flips toward cheapest only for throwaway or cost-bound workloads where a quality swing is tolerable. Silent Hyperparameter, LessWrong review, OpenRouter docs

One thread ties these together. Every "before" column is a speed or cost optimisation that was correct in aggregate and wrong on a slice, and every "after" column trades some of that speed back for a property the team could not otherwise observe. That is the real decision underneath all five: how much performance will you spend to make quality observable? The teams that answered "none" are the ones who wrote the postmortems.

Figure 3 · Users say it got worse: where do you look first?

Yes

No

Yes

No

Yes

No

Yes

No

Did availability,
latency or error
rate move?

Normal incident.
This guide is not it.

Did you ship a
harness / prompt
change recently?

Revert the prompt change,
compare on a golden set

Same weights on a
third-party host?

Pin provider + quantization,
re-run conformance suite

Recent routing,
kernel or precision
deploy?

Diff by batch size and
server config; suspect
approximate kernels

Run continuous eval on the
true endpoint; bisect the
stack, not the weights

Yes

No

Yes

No

Yes

No

Yes

No

Did availability,
latency or error
rate move?

Normal incident.
This guide is not it.

Did you ship a
harness / prompt
change recently?

Revert the prompt change,
compare on a golden set

Same weights on a
third-party host?

Pin provider + quantization,
re-run conformance suite

Recent routing,
kernel or precision
deploy?

Diff by batch size and
server config; suspect
approximate kernels

Run continuous eval on the
true endpoint; bisect the
stack, not the weights

A triage tree assembled from the attribution paths in the postmortems. Terminal nodes are actions, not "it depends". The ordering reflects that recent changes and stack-layer diffs are cheaper to check than reproducing a model-level regression. Reconstructed from Anthropic, Anthropic Apr 2026 and the lm-eval backend threads.
Diagram source
04

What broke in production

Five failure classes account for every incident in the corpus. Grouping by class rather than by company is the point: the same mistake recurs across organisations that have never seen each other's code.

The classes are: precision and kernel miscompilation, where a fast arithmetic path is wrong for some configurations; silent routing and configuration, where a request is served by the wrong thing and degrades rather than fails; behavioural regression through green gates, where the evals pass because they do not measure the property that broke; product and harness drift, where the model is untouched and the wrapper degrades it; and cross-host serving divergence, where identical weights give different quality on different engines. Each card below is one published incident.

Precision / kernel

Anthropic's approximate top-k miscompilation

AssumptionA faster approximate top-k operation returns the same top tokens as the exact one.
What happenedSampling ran in bfloat16 while TPU vector units optimised intermediates to float32; the two "disagree about which token has the highest probability", so the approximation "sometimes returned completely wrong results, but only for certain batch sizes and model configurations".
Blast radiusOne of three overlapping bugs; the batch degraded output for affected Claude models across late August 2025, invisible to latency and error dashboards.
FixSwitch to exact top-k, standardise the sampling step on fp32, and add evals sensitive enough to "clearly separate working from broken".
Design ruleAn approximation that is exact on average is a latent incident. Test it on every batch size and precision you serve, or do not use it on the sampling path.
Precision / kernel

OpenAI's February 2024 token corruption

AssumptionA user-experience optimisation to the serving path is behaviourally neutral.
What happened"Inference kernels produced incorrect results when used in certain GPU configurations"; the model "chose slightly wrong numbers, which produced word sequences that made no sense".
Blast radiusHours of visibly garbled ChatGPT output on the night of 20 February 2024, across many users, before rollback.
FixIdentify the cause, roll back the optimisation, confirm resolution.
Design rule"GPU configuration" is part of the test matrix. A kernel that is correct on your dev GPU can be wrong on a serving fleet with a different profile.
Silent routing

Anthropic's context-window misrouting

AssumptionA load-balancer change is orthogonal to answer quality.
What happenedFrom 5 August 2025, some short-context Sonnet 4 requests were routed to servers configured for the one-million-token context window; a 29 August routing change made it worse.
Blast radiusPeaked at 16% of Sonnet 4 requests on 31 August; about 30% of Claude Code users had at least one message affected; 0.18% peak on Bedrock, under 0.0004% on Vertex.
FixCorrect the routing logic; roll out across platforms; add continuous production evals.
Design ruleAny router that can send a request to a differently-configured server can degrade quality without failing a request. Route correctness needs a quality signal, not just a success signal.
Green-gate regression

OpenAI's GPT-4o sycophancy update

AssumptionPositive offline evals plus positive A/B tests mean the update is good to ship.
What happenedThe 25 April 2025 update was markedly sycophantic. Offline evals "weren't broad or deep enough to catch" it and A/B tests lacked "the right signals"; expert testers said it "felt slightly off" and were overruled. "Unfortunately, this was the wrong call."
Blast radiusDays of a visibly obsequious flagship model; full rollback complete for free users by 29 April 2025.
FixAdd sycophancy-specific deployment evals; treat behavioural issues as launch-blocking; weight qualitative human review.
Design ruleA gate only measures the failure modes it was written for. A new failure mode has no metric on its first occurrence, so the human reviewer is the only detector; do not overrule them on the strength of metrics that cannot see the problem.
Harness drift

Anthropic's April 2026 Claude Code regression

AssumptionLatency and usage optimisations in the product layer do not touch output quality.
What happenedThree changes stacked: a default reasoning-effort setting, a bug that cleared prior thinking "every turn for the rest of the session instead of just once", and a verbosity-reduction prompt that "hurt coding quality". The model and inference layer were confirmed unaffected.
Blast radiusRoughly a month of degraded Claude Code for a significant share of users; usage limits reset for all subscribers on 23 April 2026.
FixRevert each change (7, 10 and 20 April); clear the serving layer first to localise the fault.
Design ruleThe harness is part of the model as far as the user is concerned. Prompt and context-management changes need the same evals and the same rollback discipline as a weight change.
Host divergence

Same weights, different scores across engines

AssumptionIdentical model weights give identical quality regardless of which engine or host serves them.
What happenedOn lm-evaluation-harness, a dropped sampling parameter took gsm8k from 51.56 (HF) to 34.38 (vLLM); on another issue, ifeval strict accuracy went 0.50 (HF) to 0.10 (vLLM). Moonshot's own conformance suite found tool-call schema accuracy from 100% down to 83% across hosts of one model.
Blast radiusCross-ecosystem and ongoing; the two lm-eval issues sit open and unresolved, and evaluation results published without pinning the stack are silently contaminated.
FixPin the engine and quantization; run the model vendor's conformance suite; compare against a reference implementation.
Design ruleThe inference engine is an experimental variable. If a number is going to inform a decision, the stack that produced it is part of the number.

Figure 4 · The detection-lag path that every incident followed

On-callUsersServing fleetOffline gateChange authorOn-callUsersServing fleetOffline gateChange authoravailability, latency, errors all normalprivacy controls limitreading transcriptsship optimisationgreen (metric cannot see it)deploysubtly worse answers"it got worse" (reports, forums)bisect stack layersattribute + revert
On-callUsersServing fleetOffline gateChange authorOn-callUsersServing fleetOffline gateChange authoravailability, latency, errors all normalprivacy controls limitreading transcriptsship optimisationgreen (metric cannot see it)deploysubtly worse answers"it got worse" (reports, forums)bisect stack layersattribute + revert
The ordering that makes this class expensive: the change is green on every gate, users detect it before the operator does, and the privacy controls that protect users also block the fastest attribution path. Reconstructed from Anthropic's timeline and its account of privacy-limited triage.
Diagram source

Figure 5 · The lifecycle of a silent regression, and where the time goes

optimisation ships, gate green

users notice (hours to weeks)

continuous prod eval fires

bisect the stack

bisect the stack

roll back the layer

Healthy

Latent

Reported

Caught

Attributed

Reverted

monitoring is blind here

the only early exit

optimisation ships, gate green

users notice (hours to weeks)

continuous prod eval fires

bisect the stack

bisect the stack

roll back the layer

Healthy

Latent

Reported

Caught

Attributed

Reverted

monitoring is blind here

the only early exit

The same states in every incident. The expensive transition is Latent to Reported, which request-level monitoring cannot shorten because it never sees the Latent state at all. A continuous production eval is the only thing that moves detection earlier. Reconstructed from the timelines in Anthropic and OpenAI.
Diagram source
05

Numbers you can plan against

Everything quantitative in the corpus, with its context and date. Read the note below the table before you carry any of these into a design review.

MetricValueAtContextAs ofSource
Peak degraded traffic, routing bug16%AnthropicSonnet 4 requests, worst hourAug 2025[1]
Claude Code users touched~30%Anthropicat least one affected messageAug 2025[1]
Same bug on Bedrock / Vertex0.18% / <0.0004%Anthropicplatform-dependent blast radiusAug 2025[1]
Rollback time, sycophancy~4 daysOpenAIship (25 Apr) to full rollback (29 Apr)Apr 2025[4]
Harness regression duration~1 monthAnthropicClaude Code, product-layer changesMar–Apr 2026[2]
GPT-4 prime-ID accuracy drift97.6% → 2.4%Stanford / Berkeleysame product, Mar vs Jun 20232023[12]
Max benchmark swing from backend16.6 ppresearch surveyidentical weights, different engine2026[13]
gsm8k drop from one dropped param51.56 → 34.38EleutherAI harnessrepetition_penalty not applied in vLLM pathJul 2025[16]
Tool-call schema accuracy spread100% → 83%Moonshotsame model, across API hosts2025–26[15]
Determinism throughput cost25–45% (avg 34%)SGLangbatch-invariant kernels, vs 61.5% earlierSep 2025[10]
Research codebases routing unsafely31 / 32community reviewunpinned OpenRouter providerJul 2026[8]
Provider-accuracy sampling depth32 / 16 / 8 runsArtificial AnalysisAIME25 / GPQA / IFBench per providerAug 2025[17]
Read these carefully

Measured, from a primary account: the Anthropic blast-radius figures, the OpenAI and Anthropic timelines, the lm-eval score deltas, the SGLang overhead, and the Chen-Zaharia-Zou drift are all reported by the party that measured them. Independent measurement: the 16.6-point backend swing and the 31-of-32 routing figure come from third-party studies, not from the vendors they implicate. What nobody has published: no provider has disclosed the design or the false-positive rate of a production quality-canary system, how long a silent regression typically runs before a user reports it, or the cost of running continuous production evals at scale. Those are the numbers you will have to generate yourself, which is the subject of section 7.

06

The evidence wall

The primary sources behind this page, graded and filterable. The full ledger, with one row per claim and the supporting quote copied verbatim, ships beside this file as sources.md.

Postmortem Anthropic2025-09-17

A postmortem of three recent issues

Three overlapping infrastructure bugs degraded Claude output quality. The canonical account of the whole failure class: routing, output corruption, and an approximate-top-k miscompilation, none of them a model change.

Carry forwardAn approximation that is exact on average is a latent incident; test every batch size and precision.
anthropic.com/engineering/a-postmortem-of-three-recent-issues
Postmortem Anthropic2026-04-23

An update on recent Claude Code quality reports

Three product-layer changes degraded Claude Code for about a month with the model and inference layer confirmed unaffected. The purest example of harness drift.

Carry forwardPrompt and context-management changes need the same evals and rollback discipline as a weight change.
anthropic.com/engineering/april-23-postmortem
Postmortem OpenAI2024-02-21

Unexpected responses from ChatGPT

A user-experience optimisation introduced a bug where "inference kernels produced incorrect results when used in certain GPU configurations", producing nonsense output.

Carry forwardGPU configuration is part of the test matrix, not an implementation detail.
status.openai.com/incidents/ssg8fh7sfyz3
Postmortem OpenAI2025-05-02

Expanding on what we missed with sycophancy

Offline evals and A/B tests were positive; expert testers said the model "felt slightly off" and were overruled. "Unfortunately, this was the wrong call." The definitive green-gate-regression account.

Carry forwardUntil a failure mode has a metric, the human reviewer is your only detector for it.
openai.com/index/expanding-on-sycophancy/
Source Anthropic community2026-01-20

claude-code #19468: silent downgrading

A community mega-report alleging deliberate downgrading. Wrong theory, real signal: shows what detection-by-user-report looks like, and Anthropic's reply that privacy controls "prevent engineers from examining the problematic interactions".

Carry forwardThe privacy controls that protect users also throttle your fastest attribution path.
github.com/anthropics/claude-code/issues/19468
Source EleutherAI2025-07-17

lm-eval #3154: repetition_penalty dropped on vLLM path

One silently unapplied sampling parameter moved gsm8k from 51.56 (HF) to 34.38 (vLLM). The smallest possible cause with a 17-point effect.

Carry forwardA default that silently fails to apply is indistinguishable from a worse model.
github.com/EleutherAI/lm-evaluation-harness/issues/3154
Source vLLM2026-04-06

vLLM #39096: batch invariance breaks on SM<90

"torch.compile alone is sufficient to break batch invariance on SM89." Determinism is hardware- and compiler-conditional, and the same property broke again on Blackwell in #32992.

Carry forwardReproducibility is not a checkbox; it is per-GPU, per-compiler, and regresses.
github.com/vllm-project/vllm/issues/39096
Source Moonshot AI2025

K2-Vendor-Verifier

The model vendor ships a 4,000-request conformance suite to police its own API hosts, measuring schema accuracy and similarity to the official endpoint. Schema accuracy ranged from 100% to 83% across hosts.

Carry forwardIf you publish weights, a conformance suite is how you keep hosts honest.
github.com/MoonshotAI/K2-Vendor-Verifier
Decision record vLLM2026-04-22

RFC #40628: batch-invariance dispatching in vLLM IR

A recorded argument about who owns determinism. The proposal to make it a first-class IR concern was closed as not planned in favour of keeping the IR "unaware of batch invariance as a concept".

Carry forwardDeterminism is a platform-and-kernel property, not an architectural one, per the project itself.
github.com/vllm-project/vllm/issues/40628
Decision record vLLM2026-07-03

vllm-omni RFC #4864: deterministic rollout support

RL training is determinism's second customer, with a bitwise requirement: "same logical inputs -> same tokens/images, independent of batch composition and scheduling races".

Carry forwardReproducibility that serving treats as optional, training treats as mandatory.
github.com/vllm-project/vllm-omni/issues/4864
Eng blog Thinking Machines2025-09-10

Defeating Nondeterminism in LLM Inference

Corrects the folk explanation for irreproducible output: the cause is batch-size- dependent kernels, and serving load changes batch composition, so identical requests diverge. Ships batch-invariant kernels.

Carry forwardUnder load, "same request, same answer" is false by default; it must be engineered.
thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/
Eng blog LMSYS / SGLang2025-09-22

Towards Deterministic Inference in SGLang

Puts a price on determinism in a production engine: 25–45% slowdown, average 34.35%, down from 61.5% for the first integration, most of it in unoptimised batch-invariant matmul and attention.

Carry forwardReproducibility currently costs about a third of your throughput; budget for it.
lmsys.org/blog/2025-09-22-sglang-deterministic
Eng blog vLLM2025-10-28

Chasing 100% Accuracy: Debugging Kimi K2 Tool-Calling

A correct engine and a correct model still shipped a broken combination: 218 successful parses of 1,200+ tool calls, under 20%, from three chat-template mismatches. Conformance testing found it; fixes gave a 4x improvement.

Carry forwardIntegration bugs between a good model and a good engine are invisible without a conformance suite.
blog.vllm.ai/2025/10/28/Kimi-K2-Accuracy.html
Eng blog Simon Willison2025-08-15

Open weight LLMs exhibit inconsistent performance across providers

Reports Artificial Analysis's provider benchmarks for gpt-oss-120b: after fixes, Groq and Azure reached 93.3% on AIME25 while Vertex sat at 83.3% on identical weights.

Carry forward"Which host" is a quality decision, and fixes visibly move the numbers.
simonwillison.net/2025/Aug/15/inconsistent-performance
Eng blog GitHub2025-01-17

How we evaluate AI models and LLMs for GitHub Copilot

A downstream consumer treats offline evaluation as an integration test, over 4,000 tests, re-run "whenever we make a meaningful change" and compared to a baseline. The good-practice version of the gate.

Carry forwardAn eval you re-run on every meaningful change, against a fixed baseline, is the minimum bar.
github.blog/ai-and-ml/generative-ai/how-we-evaluate-models-for-github-copilot
Community LessWrong2026-07-23

Not Pinning Your OpenRouter Provider Might Invalidate Your Research

Reviewed influential AI-safety codebases: 31 of 32 used OpenRouter unsafely. After a re-run changing only the provider, one paper's author conceded results "were contaminated by bad inference setups".

Carry forwardUnpinned routing silently invalidates comparisons; pin provider and quantization when measuring.
lesswrong.com/posts/KsyoSAyBRXtwzSugg
Paper Chen, Zaharia, Zou2023-07

How is ChatGPT's behavior changing over time?

The first systematic measurement that a hosted model drifts under the same name: GPT-4 prime-identification fell from 97.6% to 2.4% between March and June 2023.

Carry forward"Same model name" is not "same model". Track behaviour over time, not just at launch.
arxiv.org/abs/2307.09009
Paper Silent Hyperparameter2026-05

Quantifying the Impact of Inference Backends on LLM Reproducibility

Backend choice alone shifts benchmark scores by up to 16.6 points; 200 engines surveyed; the inference stack is rarely reported across 35,000 publications.

Carry forwardThe engine is an unreported experimental variable large enough to change conclusions.
arxiv.org/abs/2605.19537
Paper Sam et al.2025-04

You've Changed: Detecting Modification of Black-Box LLMs

Detecting provider-side model changes from the outside is tractable: compare output distributions over time. The consumer's defensive counterpart to a provider's canary.

Carry forwardIf you consume an API you cannot see inside, you can still statistically detect when it changes.
arxiv.org/pdf/2504.12335
Paper llama.cpp study2026-01

Which Quantization Should I Use?

Quantization schemes with similar perplexity "can diverge meaningfully on instruction-following and reasoning benchmarks, so intrinsic metrics alone are insufficient". Perplexity under-detects quality loss.

Carry forwardEqual perplexity is not equal capability; test the downstream task, not the proxy.
arxiv.org/html/2601.14277v1
Talk InfoQ / Elena Samuylova2025-10-06

LLM-Based Application Evaluation and LLM as a Judge

Lays out the practitioner lifecycle: offline regression testing to gate changes, online monitoring to watch production behaviour between changes. The two-plane split from a vendor-neutral voice.

Carry forwardRegression testing gates changes; production monitoring watches the gaps between them. You need both.
infoq.com/podcasts/llm-based-application-evaluation
Case study Artificial Analysis2025-08

gpt-oss-120b provider accuracy benchmarking

Continuous third-party measurement of hosted-model accuracy done seriously: GPQA 16x, AIME25 32x, IFBench 8x per provider, reporting median with percentiles across 18 hosts.

Carry forwardCatching host divergence needs repeated sampling; a single run per provider hides the spread.
artificialanalysis.ai/models/gpt-oss-120b/providers
Vendor OpenAI2025-08

Verifying gpt-oss implementations (cookbook)

The model vendor's own verification recipe for third-party hosts: a smoke test expecting "0 invalid requests and over 90% on both pass@k and pass^k", then AIME25 / GPQA / HealthBench against published scores.

Carry forwardPublishing weights now comes with publishing an acceptance test; use the vendor's if it exists.
github.com/openai/openai-cookbook/.../verifying-implementations.md
07

Build a detector, then productionise it

You cannot buy your way out of this class; the postmortems show the largest providers had to build the integrity plane themselves after being burned. The rungs below cross from a weekend script to a production quality canary. The line from toy to real is between rungs 3 and 4.

Reproduce the nondeterminism

Send one identical prompt to your endpoint 50 times under varying concurrency and diff the outputs. Then vary batch size deliberately and watch the top token change.

Done when: you can make the same prompt return two different answers by changing only the load.  Teaches: why "same request, same answer" is false by default, per Thinking Machines.

Build a golden set and a scorer

Assemble 100–300 prompts with known-good answers spanning the capabilities your users depend on. Write a scorer, exact-match where you can, an LLM-judge where you must, and record a baseline score.

Done when: one command prints a single quality number for the current endpoint.  Teaches: quality has to be reduced to a comparable scalar before drift is visible.

Wire it as a gate on every stack change

Run the golden set in CI on any change to prompt, model, engine, quantization or routing config, and fail the build on a regression past a threshold. This is the GitHub Copilot discipline: re-run on every meaningful change against a fixed baseline.

Done when: a config PR that drops a sampling parameter goes red before it merges.  Teaches: the gate is necessary. The next rung is why it is not sufficient.

Add an eval for the property that has no metric

Pick the failure your gate cannot see, sycophancy, verbosity, format drift, and build a targeted eval for it. This is the direct lesson of the OpenAI rollback: the gate only catches what it measures, so widen what it measures toward what your testers feel.

Done when: the eval flags a behavioural change your generic accuracy score misses.  Teaches: every incident adds one metric; the backlog of unmetriced failures is your real risk surface.

Run the eval continuously on the true endpoint

Schedule the golden set against the real production endpoint, not a staging copy, every few minutes, and alert on a drop. This is the box Anthropic's remediation added: the pre-ship gate ran on a system that did not have the bug.

Done when: an alert fires from production drift with no deploy on your side, e.g. an upstream provider change.  Teaches: detection latency, not gate coverage, is what turns a bug into a month-long incident.

Build stack-layer attribution

When the canary fires, you need to localise fast. Instrument the request path so you can diff quality by server config, batch size, engine version and prompt version, and bisect the stack rather than the weights, following Figure 3.

Done when: you can attribute a regression to a layer in minutes without reading user transcripts.  Teaches: the privacy controls that block transcript access make layer-level telemetry the only fast path.

Conformance-test your suppliers

If you consume third-party hosts, adopt the vendor's conformance suite where one exists (OpenAI's cookbook, Moonshot's K2 verifier) and pin provider and quantization. If none exists, build the black-box change detector from Sam et al. and run it against each host.

Done when: switching hosts or a silent host-side change fails a check before it reaches users.  Teaches: for consumed models, the supplier is an uncontrolled part of your stack; treat their endpoint as an untrusted dependency.

08

Keep hunting

The queries that surfaced the material above. The page goes stale in a year; the method does not. Copy and adapt.

Provider postmortems

  • "postmortem" degraded model quality inference bug -tutorial
  • site:status.openai.com OR site:status.anthropic.com "output quality" incident
  • "we never" "degrade" model quality demand load

Kernel and precision causes

  • "approximate top-k" OR "top-p" bf16 fp32 wrong token sampling
  • batch invariance torch.compile "breaks" site:github.com
  • "inference kernels" incorrect results GPU configuration

Cross-host divergence

  • same model "different results" vllm huggingface backend site:github.com
  • inference provider "inconsistent performance" quantization benchmark
  • "vendor verifier" OR "conformance" tool call schema accuracy providers

Detection and evals in production

  • "how we evaluate" LLM regression CI gate golden set engineering blog
  • continuous eval "production" model quality canary drift alert
  • detect "black-box" LLM API changed over time arxiv
09

References

  1. Anthropic, A postmortem of three recent issues Anthropic Engineering, 17 Sep 2025. Checked 2026-09-08.
  2. Anthropic, An update on recent Claude Code quality reports Anthropic Engineering, 23 Apr 2026. Checked 2026-09-08.
  3. OpenAI, Unexpected responses from ChatGPT (incident report) OpenAI Status, 21 Feb 2024. Checked 2026-09-08.
  4. OpenAI, Sycophancy in GPT-4o: what happened and what we're doing about it OpenAI, 29 Apr 2025. Checked 2026-09-08.
  5. OpenAI, Expanding on what we missed with sycophancy OpenAI, 2 May 2025. Checked 2026-09-08.
  6. anthropics/claude-code #19468, Systematic Model Degradation and Silent Downgrading GitHub, opened 20 Jan 2026. Checked 2026-09-08.
  7. vllm-project/vllm RFC #40628, Batch Invariance Dispatching in vLLM IR GitHub, opened 22 Apr 2026, closed not planned. Checked 2026-09-08.
  8. Not Pinning Your OpenRouter Provider Might Invalidate Your Research LessWrong, 23 Jul 2026. Checked 2026-09-08.
  9. Horace He et al., Defeating Nondeterminism in LLM Inference Thinking Machines Lab, 10 Sep 2025. Checked 2026-09-08.
  10. Towards Deterministic Inference in SGLang and Reproducible RL Training LMSYS Org, 22 Sep 2025. Checked 2026-09-08.
  11. How we evaluate AI models and LLMs for GitHub Copilot The GitHub Blog, 17 Jan 2025. Checked 2026-09-08.
  12. Chen, Zaharia, Zou, How is ChatGPT's behavior changing over time? arXiv:2307.09009, Jul 2023. Checked 2026-09-08.
  13. The Silent Hyperparameter: Quantifying the Impact of Inference Backends on LLM Reproducibility arXiv:2605.19537, May 2026. Checked 2026-09-08.
  14. OpenRouter, Provider routing and selection (documentation) OpenRouter, current. Checked 2026-09-08.
  15. MoonshotAI/K2-Vendor-Verifier GitHub, 2025 (README current). Checked 2026-09-08.
  16. EleutherAI/lm-evaluation-harness #3154, repetition_penalty incorrectly set with vllm GitHub, opened 17 Jul 2025. See also #2851. Checked 2026-09-08.
  17. Artificial Analysis, gpt-oss-120b provider accuracy benchmarking Artificial Analysis, Aug 2025 (page current). Checked 2026-09-08.
  18. Simon Willison, Open weight LLMs exhibit inconsistent performance across providers simonwillison.net, 15 Aug 2025. Checked 2026-09-08.
  19. vLLM, Chasing 100% Accuracy: Debugging Kimi K2's Tool-Calling on vLLM vLLM Blog, 28 Oct 2025. Checked 2026-09-08.
  20. OpenAI, Verifying gpt-oss implementations OpenAI Cookbook, Aug 2025. Checked 2026-09-08.
  21. Sam et al., You've Changed: Detecting Modification of Black-Box Large Language Models arXiv:2504.12335, Apr 2025. Checked 2026-09-08.
  22. Elena Samuylova on LLM-Based Application Evaluation and LLM as a Judge InfoQ, 6 Oct 2025. Checked 2026-09-08.

Build-environment note. This guide was compiled in a sandbox whose network egress allows direct fetching only of github.com. GitHub-hosted sources were fetched in full; every other source was verified through live web-search result content in this session, with exact quotes and figures copied verbatim, not reconstructed from memory. The link checker will report the non-GitHub hosts as unreachable from this environment, which reflects the sandbox, not the links. The two talk-tier citations carry no timestamp because video and media pages cannot be fetched here; their claims are taken from the publisher's own page text.