Order the debugging steps for an accuracy drop after capping thinking budgets
- 1Re-run the eval suite to verify accuracy recovered within the cost target
- 2Flag responses whose stop reason shows the trace hit the cap and was cut off mid reasoning
- 3Raise the cap selectively for the affected request class, or route it to an async deep path
- 4Bucket accuracy by thinking length to confirm truncated traces drive the failures
- 5Compare thinking token length distributions pre-cap and post-cap to locate the squeeze
- 6Reproduce the regression offline using logged production prompts from before and after the change
Reproduce offline, compare length distributions, find the truncated traces via stop reasons, bucket accuracy by length, then raise the cap selectively and re-run eval.
Imagine a factory that started shipping more defective widgets after the boss cut the time each worker is allowed to think on each part. Before reassigning the boss, you want evidence. First, pull the records and check that defects really did rise on the new schedule, not on something else that changed. Then look at how long workers were spending before and after the cap, to see who is being squeezed. Then check whose part was cut off mid-step. Then ask whether the cut-off parts are the defective ones. Only then change the schedule, and only for the workers whose tasks really need more time. Same logic with a thinking budget: evidence first, surgical fix second, eval to confirm last.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Capping the thinking budget is the most common cost-reduction lever on a reasoning-model workload, and it is also the lever most likely to introduce a silent accuracy regression. A cap that looks safe at the p95 of pre-cap thinking length still cuts off the five percent of traffic that needed the deepest reasoning, and those requests are usually the most valuable ones on the system.
This deep dive walks through the six-step diagnostic playbook in order, the evidence each step produces, the operational instrumentation that has to exist for the playbook to run at all, and the codification practices that prevent the next cap change from causing the same incident.
Step 0-1: reproduce and characterise
The first two steps establish that the regression exists and is correlated with the cap change. Both are evidence steps, neither is a fix.
Step 0: offline reproduction
Pull logged prompts from a pre-cap window and a post-cap window. Replay them through the model with the corresponding cap setting. If the regression reproduces offline, you have a clean signal to work with. If it does not, the production metric is contaminated by something else (model swap, prompt edit, traffic mix shift) and the investigation pauses until the contamination is isolated.
The replay also gives you a stable corpus to iterate against, instead of waiting for new production traffic on every hypothesis.
Step 1: length distribution comparison
Histogram the thinking-token counts in both windows. Three shapes to look for.
- Right-tail truncation. The post-cap distribution looks identical to pre-cap up to the cap, then flatlines. The cap is biting only the hardest requests, the long tail.
- Uniform left-shift. The whole distribution moved leftwards, including the body. The cap is somehow rewriting model behaviour on routine traffic, often because the model adapts to the constraint.
- No shape change. The cap is not the cause; the regression is from something else.
The shape determines the diagnostic path for the rest of the playbook.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- OpenAI o-series surfaces a `finish_reason` of length when the reasoning trace hits the configured cap, used as the truncation signal in incident investigations
- Anthropic Claude Opus 4.7 extended thinking returns a stop_reason of max_tokens that explicitly distinguishes content cap from thinking cap
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you build a per-class cap policy that does not silently regress when traffic mix changes?
Tag each request with its class at intake, store the cap per class in a versioned config, and run a weekly job that reports class-mix shift plus per-class cap-hit rate. Any class whose cap-hit rate crosses a threshold triggers a recalibration review rather than waiting for a user-visible regression.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Raising the cap globally as the first action without locating which request class the cap actually hurt, trading the regression for a new cost blowout.
60 second bullets to scan on the way to the call.
Why offline reproduction precedes any config change in a regression investigation
What a healthy thinking-token length distribution looks like and how a cap distorts it
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.