Why Every LLM Vendor Killed the Thinking-Token Budget Every major LLM vendor has replaced numeric thinking-token budgets with discrete effort levels, converging on a small enum instead of a number. Anthropic now rejects budget_tokens with a 400 error on Opus 4.7/4.8, Sonnet 5, and Fable 5, using adaptive thinking and a five-level effort setting; Google's Gemini 3 replaced the token dial with a discrete thinking_level; and OpenAI's reasoning_effort started at minimal/low/medium/high on GPT-5 and now spans none-through-max. Sebastian Raschka's survey reveals the effort knob is a trained behavior embedded during reinforcement learning, not an inference-time meter, explaining why vendors dropped the token budget. AI https://sourcefeed.dev/c/ai Article Why Every LLM Vendor Killed the Thinking-Token Budget Effort levels won because reasoning depth is trained, not dialed — and your cost model needs to catch up. Mariana Souza https://sourcefeed.dev/u/mariana souza Sometime in the last eighteen months, without ever announcing it as a coordinated decision, every major LLM vendor killed the numeric thinking budget. Anthropic deprecated budget tokens on the Claude 4.6 generation and now rejects it outright — a 400 error — on Opus 4.7/4.8, Sonnet 5, and Fable 5, replacing it with adaptive thinking https://platform.claude.com/docs/en/build-with-claude/effort plus a five-level effort setting. Google's Gemini 2.5 shipped a literal token dial thinkingBudget , 0–24,576 tokens ; Gemini 3 replaced it https://ai.google.dev/gemini-api/docs/thinking with a discrete thinking level , and sending both parameters in one request is a 400. OpenAI never shipped a token knob at all — reasoning effort https://developers.openai.com/api/docs/guides/reasoning started at minimal/low/medium/high on GPT-5 and has since sprouted xhigh first on the codex-max variant and a full none-through-max range on the newest models.That's three companies with very different API philosophies converging on the same abstraction: a small enum instead of a number. The interesting question is why — and Sebastian Raschka's recent survey of how labs actually train these controls supplies the answer. The effort knob isn't an inference-time setting that meters tokens. It's a trained behavior , and once you understand that, several things about the current API landscape stop being annoying and start being legible. The knob is a string in the chat template Reasoning models get their "thinking" from reinforcement learning with verifiable rewards: sample a chain of thought, check the final answer against a math checker or a test suite, reward accordingly. Crucially, the reasoning trace itself isn't graded — only the answer and the format. Left alone, this training recipe produces models that think a lot , because longer traces raise the odds of a correct answer and nothing in the reward penalizes verbosity. Effort control is bolted on during that same training, not afterwards. The recipe, common across the open-weight models where you can actually inspect it: put a plain-text tag like Reasoning effort: low in the system prompt, and apply a per-token length penalty during RL whose harshness depends on the tag. High effort gets a gentle penalty, low effort a steep one. The model learns three or four distinct reasoning styles keyed to a string. In gpt-oss https://huggingface.co/openai/gpt-oss-120b you can see this directly — the "API parameter" is literally a line in the Harmony system prompt. Qwen3 does a variant with /think and /no think soft switches learned during fine-tuning, backed by a hard switch where the tokenizer force-closes an empty