
OpenAI, Claude, Gemini Reasoning Control Parameters Compared — Design Philosophy of reasoning_effort / budget_tokens / thinkingLevel
This page has been translated by machine translation. View original
Introduction
There are many situations where you want to control how much an LLM "thinks." For simple questions, you want quick answers; for complex reasoning, you want it to think carefully.
While using reasoning_effort with OpenAI's o-series, a question suddenly came to mind: "How do I do the same thing with Claude or Gemini? What are the parameter names? What's the granularity?"
After looking into it, I found that each of the three companies has implemented reasoning volume control with different design philosophies.
Reasoning Volume Control Parameters from Three Companies
OpenAI o-series: reasoning_effort
{
"model": "o4-mini",
"reasoning_effort": "high"
}
- Values: 3 levels —
low/medium/high - Simple with little room for confusion
- Internal token count is left to the model
Claude (extended thinking): budget_tokens
{
"model": "claude-opus-4-6",
"thinking": {
"type": "enabled",
"budget_tokens": 8192
}
}
- Values: number of tokens (minimum 1024)
- Upper limit is within
max_tokens - Allows developers to precisely manage reasoning costs
Gemini 3.0+: thinkingLevel
{
"model": "gemini-3.0-pro",
"generationConfig": {
"thinkingConfig": {
"thinkingLevel": "high"
}
}
}
- Values: levels such as
none/low/medium/high - Migrated from the Gemini 2.5 era's
thinkingBudget(token count specification) to level specification - The model internally converts to an appropriate token count
Comparison Table
| Aspect | OpenAI o-series | Claude (extended thinking) | Gemini 3.0+ |
|---|---|---|---|
| Parameter name | reasoning_effort |
thinking.budget_tokens |
thinkingConfig.thinkingLevel |
| Specification method | Level (3 steps) | Token count | Level |
| Minimum value | low |
1024 tokens | none (thinking OFF) |
| Maximum value | high |
Up to max_tokens |
high |
| Cost predictability | Coarse | Precise | Coarse |
| Developer control | Low | High | Low |
Spectrum of Design Philosophies
Arranging the three companies by "granularity of control" reveals a clear spectrum.

OpenAI: The "Developers shouldn't have to think about it" camp
Just three levels. No room for hesitation. A design that trusts the model and leaves "how much to think" up to the model.
Suitable for: Prototyping, cases where strict management of reasoning costs is unnecessary
Gemini: The "Levels are enough" camp
Similar to OpenAI, but it sits slightly in the middle of the spectrum because it includes none (thinking completely OFF). What's interesting is that Gemini once implemented token count specification (thinkingBudget) in version 2.5, but reverted to level specification in 3.0. This suggests they tried fine-grained control and concluded that "levels are enough."
Suitable for: Cases where you want to toggle thinking ON/OFF, cases where level-based control is sufficient
Claude: The "Developers manage precisely" camp
Specified directly by token count. Developers can control the upper limit of tokens used for reasoning, making cost prediction the most accurate.
Suitable for: Cost management in production environments, cases where you want to finely tune the trade-off between reasoning volume and latency
How to Use Each in Practice
| Use case | Recommended setting |
|---|---|
| Chatbot (simple Q&A) | OpenAI: low / Claude: 1024-2048 / Gemini: low |
| Code generation & analysis | OpenAI: medium / Claude: 4096-8192 / Gemini: medium |
| Complex reasoning, math, logic problems | OpenAI: high / Claude: 16384+ / Gemini: high |
| No reasoning needed (simple conversion/extraction) | Gemini: none / Claude: thinking disabled / OpenAI: N/A |
Summary
- All three companies offer "reasoning volume control," but their design approaches differ
- Want to manage costs precisely → Claude's
budget_tokensis the best fit - Want to keep it simple → OpenAI's
reasoning_effortor Gemini'sthinkingLevel - Want to turn off thinking entirely → Gemini's
noneis explicit about it
When building multi-model applications, designing a wrapper that abstracts away the differences between these three parameters makes switching between models much easier.
