Introduction
A reasoning effort parameter comparison across Claude, GPT-5.6, and Gemini turns up a problem most developers hit the hard way: these controls look interchangeable, but they are not. Anthropic, OpenAI, and Google each ship a parameter that trades reasoning depth for speed and cost — and each one works differently enough that porting a setting from one API to another can silently change behavior, latency, or your bill.
Claude calls its control effort, set through output_config.effort. OpenAI calls its control reasoning.effort. Google calls its control thinking_level. All three accept level names like “low,” “medium,” and “high” — which is exactly why they get treated as equivalent when they aren’t.
Claude’s effort parameter affects every token in a response — text, tool calls, and thinking. Gemini’s thinking_level affects only the internal thinking process. GPT-5.6’s reasoning.effort sits alongside a separate reasoning.mode setting (standard vs. pro) that changes how the parameters interact.
This reasoning effort parameter comparison covers the current parameter names, levels, and defaults for each provider, walks through a working code example for each, and flags the migration pitfalls that show up when teams move a workload between them. For more API configuration breakdowns like this one, see AI Discovery Wire’s AI Tutorials coverage.
What “Reasoning Effort” Means Across Providers
All three parameters answer the same underlying question — how much internal computation should the model spend before it responds — but they answer it at different scopes. Claude’s effort is the broadest: it governs the entire response, including tool calls and explanatory text, not just thinking. GPT-5.6’s reasoning.effort governs reasoning-token generation specifically, and is combined with a separate reasoning.mode switch for “pro” runs that do more model work on hard tasks. Gemini’s thinking_level governs only the model’s internal “thinking process” step before it produces output.
In practice this means the same level name — “medium,” say — does not imply the same behavior on two different platforms, and none of the three vendors intend it to.
Claude’s Effort Parameter
Claude’s effort parameter is set through output_config.effort in a Messages API request, and it is available on all currently supported Claude models with no beta header required. By default, Claude uses high effort — setting effort to "high" produces exactly the same behavior as omitting the parameter entirely.
| Level | Description | Typical use case |
|---|---|---|
| max | No constraints on token spending | Deepest possible reasoning and analysis |
| xhigh | Extended capability for long-horizon work | Long-running agentic and coding tasks |
| high (default) | High capability, equivalent to not setting the parameter | Complex reasoning, difficult coding, agentic tasks |
| medium | Balanced approach with moderate token savings | Agentic tasks balancing speed, cost, and performance |
| low | Most efficient, some capability reduction | Simple tasks needing best speed and lowest cost, e.g. subagents |
A detail that trips up teams moving between Claude model generations: recommended defaults shift per model. Opus 4.8, Opus 5, and Sonnet 5 all default to high effort on the API and in Claude Code, but the recommended starting point differs — Opus 4.7 and 4.8 guidance suggests starting at xhigh for coding and agentic work, while Sonnet 5 guidance suggests staying at the high default for most tasks and reserving xhigh for the hardest coding problems.
Changing effort mid-conversation invalidates cached prompt prefixes, because effort shapes how the prompt itself is rendered. If a long session relies on prompt caching, pick one effort level at the start and hold it constant rather than adjusting it turn to turn. This is the first data point in our reasoning effort parameter comparison worth flagging before you migrate a cached workflow.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
messages=[
{"role": "user", "content": "Summarize the trade-offs between microservices and monoliths."}
],
output_config={"effort": "medium"},
)
for block in response.content:
if block.type == "text":
print(block.text)
GPT-5.6’s Reasoning.effort
GPT-5.6 exposes reasoning depth through reasoning.effort in the Responses API, with six named levels: none, low, medium, high, xhigh, and max. If the parameter is omitted, GPT-5.6 defaults to medium in both its standard and “pro” reasoning modes. The none setting is distinct from the other providers’ lowest tiers — it behaves like a non-reasoning model rather than a lightly-reasoning one, which makes it the closest thing to a true “reasoning off” switch among the three providers.
Reasoning mode (reasoning.mode: "standard" or "pro") is a separate axis from effort: mode selects how much overall model work goes into producing a final answer, while effort controls reasoning depth within that mode.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.6",
input="Summarize the trade-offs between microservices and monoliths.",
reasoning={"effort": "medium"},
)
print(response.output_text)
Gemini’s Thinking_level
Gemini 3-series models control reasoning depth through thinking_level, which replaced the older numeric thinking_budget parameter. Gemini 3 and Gemini 3 Flash default to HIGH, allowing the model more tokens for complex, multi-step reasoning; Gemini 3 Flash also introduced MINIMAL and MEDIUM levels for throughput-optimized and balanced use cases respectively. As of Gemini 3.5 Flash, Google’s own migration guidance explicitly recommends replacing thinking_budget with thinking_level across all Gemini 3.x models, and default effort on that model shifted from high to medium.
You cannot use thinking_level and the legacy thinking_budget parameter in the same request — Google’s API returns a 400 error if both are set. Any code still passing thinking_budget needs to migrate before combining it with newer Gemini 3.x features.
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-pro-preview",
contents="Summarize the trade-offs between microservices and monoliths.",
config=types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_level="high")
),
)
print(response.text)
Side-by-Side Comparison
This is the core of the reasoning effort parameter comparison: the table below lines up the three parameters directly. Because level names overlap (“medium,” “high”) without meaning the same thing, treat this as a translation reference rather than a one-to-one mapping.
| Provider | Parameter | Levels available | Default |
|---|---|---|---|
| Claude | output_config.effort | low, medium, high, xhigh, max | high |
| GPT-5.6 | reasoning.effort | none, low, medium, high, xhigh, max | medium |
| Gemini 3.x | thinking_level | minimal, low*, medium, high (varies by model) | high (medium on Gemini 3.5 Flash) |
| Provider | Governs | Notable gotcha |
|---|---|---|
| Claude | All response tokens — text, tool calls, and thinking | Changing effort between requests breaks prompt-cache hits |
| GPT-5.6 | Reasoning-token generation, separate from reasoning.mode | Chat Completions API and function tools can’t both be used together unless effort is “none” |
| Gemini 3.x | Internal thinking step only | Cannot combine thinking_level with legacy thinking_budget — returns a 400 error |
*Level availability varies by specific Gemini 3.x model; check the model page before assuming a level is supported.
Migration Pitfalls
The three gotchas above are the ones most likely to break a working integration when a team ports a workload from one provider to another. Any reasoning effort parameter comparison used for a real migration should also check the following:
- Don’t assume “medium” means the same thing twice. Verify quality and latency on your own evaluation set after any cross-provider migration rather than reusing a level name.
- Check tool-calling interactions separately. Lower effort levels on Claude reduce the number of tool calls made; GPT-5.6’s tool-calling restriction at non-“none” effort is a hard API constraint, not just a quality tradeoff.
- Re-check defaults on every model upgrade. Anthropic, OpenAI, and Google have all changed default effort/level behavior within a single model family in 2026 — a default that held on one version isn’t guaranteed on the next.
Choosing a Level for Your Workload

Latency-sensitive, simple tasks (classification, short lookups, chat): start at the lowest or near-lowest level on any provider, then raise only if evaluations show a real quality gap.
Agentic and coding workloads: start near each provider’s recommended default (Claude: high, stepping to xhigh for hard coding tasks; GPT-5.6: medium, testing high/xhigh; Gemini: high) and step down only after measuring quality on your own tasks.
Frontier, high-stakes tasks: Claude’s max and GPT-5.6’s max are built for this; Gemini’s high is currently its ceiling on most 3.x models.
There is no single “equivalent” setting across all three APIs. The practical takeaway from this reasoning effort parameter comparison is to treat effort/reasoning/thinking level as a per-provider tuning knob, verified against your own evaluation set, rather than a value you carry over unchanged.
FAQ
What does the effort parameter do in Claude’s API?
It controls how many tokens Claude spends on an entire response — including text, tool calls, and thinking — trading response thoroughness against speed and cost. It’s set through output_config.effort and defaults to high.
Do GPT, Claude, and Gemini use the same reasoning effort levels?
No. They use similar-sounding level names (low, medium, high) but different parameter scopes, different default levels, and different maximum tiers — see the comparison tables above.
What is the default reasoning effort for GPT-5.6?
GPT-5.6 defaults to medium reasoning effort when reasoning.effort is omitted, in both standard and pro reasoning modes.
Is Gemini’s thinking_budget parameter deprecated?
Google’s own migration guidance for Gemini 3.5 Flash says the numeric thinking_budget parameter is no longer recommended across Gemini 3.x models, in favor of the thinking_level string enum. The two parameters also can’t be combined in one request.
Does higher reasoning effort always improve output quality?
Not reliably. Independent evaluations have found mixed results — sometimes a mid-level setting outperforms the highest one on a specific task type. Treat effort as a variable to test on your own evaluation set, not a dial to maximize by default.
Sources
- Claude Platform Docs — Effort — official parameter reference, levels, and per-model defaults
- OpenAI API — Reasoning models guide — official reference for reasoning.effort and reasoning.mode
- OpenAI API — Model guidance (GPT-5.6) — confirms GPT-5.6’s six effort levels
- Google AI for Developers — Gemini thinking — official thinking_level reference
- Google AI for Developers — What’s new in Gemini 3.5 Flash — confirms thinking_budget deprecation and default change
This reasoning effort parameter comparison synthesizes official API documentation from Anthropic, OpenAI, and Google, current as of August 8, 2026. All three providers have changed default reasoning-effort behavior more than once within 2026; parameter names, levels, and defaults should be re-verified against the linked vendor documentation before relying on them in production, and this page is scheduled for quarterly review.
Leave a Reply