Whether a Claude model takes the ADAPTIVE thinking form — thinking: { type: 'adaptive' } plus
output_config: { effort } — rather than the manual budget form thinking: { type: 'enabled', budget_tokens }.
Adaptive thinking arrived with Claude 4.6. The Claude 5 family REJECTS the budget form outright:
observed on claude-sonnet-5, HTTP 400 "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.
Every request that carried an effort level failed before reaching the model, which turned an
evaluation cell into 80% infrastructure loss. Claude 4.5 and earlier (including
claude-haiku-4-5-20251001) only know the budget form, so the split has to be by version (see
ParseClaudeVersion). A name with no version number keeps the budget form, which is the behaviour
every existing caller already had.
This answers only "which thinking form". Whether a model rejects sampling parameters is a separate
question with a different cutoff — see RejectsSamplingParams.
Whether a Claude model takes the ADAPTIVE thinking form —
thinking: { type: 'adaptive' }plusoutput_config: { effort }— rather than the manual budget formthinking: { type: 'enabled', budget_tokens }.Adaptive thinking arrived with Claude 4.6. The Claude 5 family REJECTS the budget form outright: observed on
claude-sonnet-5, HTTP 400"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.Every request that carried an effort level failed before reaching the model, which turned an evaluation cell into 80% infrastructure loss. Claude 4.5 and earlier (includingclaude-haiku-4-5-20251001) only know the budget form, so the split has to be by version (seeParseClaudeVersion). A name with no version number keeps the budget form, which is the behaviour every existing caller already had.This answers only "which thinking form". Whether a model rejects sampling parameters is a separate question with a different cutoff — see RejectsSamplingParams.