What replaces budget_tokens?
output_config.effort, with thinking type adaptive. The migration guide says there is no fixed mapping from a token budget to an effort level.
A request that sends thinking type enabled and budget_tokens fails on claude-sonnet-5-5. Remove the budget and set an effort level.
"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior. The Sonnet 5.5 migration guide says Claude Sonnet 4.6 still accepts thinking type enabled with budget_tokens as a deprecated setting, and Claude Sonnet 4.5 and Claude Haiku 4.5 use that setting for all thinking. claude-sonnet-5-5 returns a 400. There is no fixed mapping from a budget to an effort level. Source: Claude Sonnet 5.5 migration guide, checked October 20, 2026.
| Model id | What the source says |
|---|---|
claude-sonnet-5-5 | Returns 400 for thinking type enabled. Use adaptive thinking and output_config.effort. |
claude-sonnet-4-6 | The migration guide says this model still accepts budget_tokens as a deprecated setting. |
claude-sonnet-4-5-20250929 | The migration guide says Claude Sonnet 4.5 uses budget_tokens for all thinking. |
Remove budget_tokens. The migration guide's after request uses thinking type adaptive and output_config.effort. The guide's example uses high, and it also lists max, xhigh, medium, and low.
client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[{"role": "user", "content": "Hello"}],
)
client.messages.create(
model="claude-sonnet-5-5",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[{"role": "user", "content": "Hello"}],
)
Source: Claude Sonnet 5.5 migration guide, checked October 20, 2026.
Do not send thinking type enabled with budget_tokens. LiteLLM documents a thinking parameter on Anthropic calls. Pass the adaptive object from the migration guide. LiteLLM's reasoning_effort map is documented for Claude 4.6 and 4.7, not for claude-sonnet-5-5.
import litellm
response = litellm.completion(
model="anthropic/claude-sonnet-5-5",
messages=[{"role": "user", "content": "Hello"}],
thinking={"type": "adaptive"},
)
Source: LiteLLM Anthropic provider, checked October 20, 2026.
The AI SDK Anthropic docs show thinking type adaptive plus effort on providerOptions.anthropic. They also say the provider converts thinking type enabled with budgetTokens to adaptive for claude-opus-5-5, claude-fable-5, and claude-fable-5-1. They do not name claude-sonnet-5-5 for that conversion, so set adaptive yourself.
import { anthropic, type AnthropicProviderOptions } from "@ai-sdk/anthropic";
import { generateText } from "ai";
const { text } = await generateText({
model: anthropic("claude-sonnet-5-5"),
prompt: "Hello",
providerOptions: {
anthropic: {
thinking: { type: "adaptive" },
effort: "high",
} satisfies AnthropicProviderOptions,
},
});
Source: AI SDK Anthropic provider, checked October 20, 2026.
output_config.effort, with thinking type adaptive. The migration guide says there is no fixed mapping from a token budget to an effort level.