An Anthropic-dialect thinking: {"type": "disabled"} sent to an OpenAI-family upstream maps to no effort at all (openai_engine::reasoning_effort documents that disabled leaves the vendor default). That was harmless while OpenAI models did not reason by default. It no longer is:
- gpt-6-sol, gpt-6-luna (and gpt-6-astra) reason when no effort is sent; live,
temperature: 0.5 without an effort is a 400 on all three.
- Chat completions refuse function tools while a gpt-5.6 or gpt-6 model reasons: "Function tools with reasoning_effort are not supported for gpt-6-sol in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'."
So POST /v1/messages {"model": "gpt-6-sol", "thinking": {"type": "disabled"}, "tools": [...]} against a chat-protocol gpt-6-sol gets a vendor 400. The same request against a Converse id (us.openai.gpt-6-sol) or a Responses-protocol model reasons and bills reasoning tokens the client disabled.
The chat surface's OpenRouter-style reasoning: {enabled: false} already maps to none, so the two ways of saying "no reasoning" behave differently today.
Proposal: map disabled to effort none on the OpenAI wires and Converse reasoning_config. openai_effort then clamps it per model: Astra becomes low, GPT-5.0 becomes minimal. This changes behavior for every OpenAI-family upstream, so it needs a decision before a PR.
An Anthropic-dialect
thinking: {"type": "disabled"}sent to an OpenAI-family upstream maps to no effort at all (openai_engine::reasoning_effortdocuments thatdisabledleaves the vendor default). That was harmless while OpenAI models did not reason by default. It no longer is:temperature: 0.5without an effort is a 400 on all three.So
POST /v1/messages {"model": "gpt-6-sol", "thinking": {"type": "disabled"}, "tools": [...]}against a chat-protocol gpt-6-sol gets a vendor 400. The same request against a Converse id (us.openai.gpt-6-sol) or a Responses-protocol model reasons and bills reasoning tokens the client disabled.The chat surface's OpenRouter-style
reasoning: {enabled: false}already maps tonone, so the two ways of saying "no reasoning" behave differently today.Proposal: map
disabledto effortnoneon the OpenAI wires and Conversereasoning_config.openai_effortthen clamps it per model: Astra becomeslow, GPT-5.0 becomesminimal. This changes behavior for every OpenAI-family upstream, so it needs a decision before a PR.