OhMyGPT

Thinking

Turn reasoning on, off, or down for Claude, Gemini, and GPT models from any protocol.

Reasoning tokens are billed as output tokens, so controlling them controls cost and latency. Use your protocol's own reasoning fields with any model: a reasoning_effort sent on Chat Completions takes effect on Claude and Gemini models too.

Controls per protocol

ProtocolFields
Chat Completionsreasoning_effort; thinking: {"type": "enabled", "budget_tokens": N}, {"type": "adaptive"}, or {"type": "disabled"}; OpenRouter's reasoning object and include_reasoning
Responsesreasoning.effort
Messagesthinking, output_config.effort
GeminigenerationConfig.thinkingConfig: thinkingLevel, thinkingBudget, includeThoughts

On a model's native protocol, these fields reach the model as you sent them and follow the vendor's documentation: reasoning_effort on GPT, thinking on Claude through Messages, thinkingConfig on Gemini through the Gemini endpoint, and vendor fields such as DeepSeek's thinking or Qwen's enable_thinking on Chat Completions.

On Chat Completions, reasoning_effort takes precedence over the reasoning object, which takes precedence over include_reasoning. Effort levels are none, minimal, low, medium, high, and xhigh.

Claude

On Chat Completions, Responses, or Gemini, Claude models take these settings:

You sendEffect on Claude
thinking: {"type": "enabled", "budget_tokens": N}Extended thinking with that budget
thinking: {"type": "adaptive"}Claude decides when and how much to think
reasoning_effort / reasoning.effortClaude's effort level; on Claude Fable 5 and 5.1 it also turns on adaptive thinking
thinking: {"type": "disabled"}Thinking off
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-4-5",
    "max_tokens": 1500,
    "messages": [{"role": "user", "content": "What is 17 * 23? Reply with the number only."}],
    "thinking": {"type": "enabled", "budget_tokens": 1024}
  }'
{
  "choices": [
    {
      "finish_reason": "stop",
      "native_finish_reason": "end_turn",
      "message": {
        "role": "assistant",
        "content": "391",
        "reasoning": "17 * 23 = ?\n\nLet me calculate this:\n17 * 23 = 17 * 20 + 17 * 3\n= 340 + 51\n= 391",
        "reasoning_details": [{ "type": "reasoning.text", "text": "17 * 23 = ?\n\n…", "signature": "EuoCCrgB…", "index": 0 }]
      }
    }
  ],
  "usage": { "prompt_tokens": 51, "completion_tokens": 60, "total_tokens": 111, "completion_tokens_details": { "reasoning_tokens": 54 } }
}

Newer Claude models think adaptively. Use the setting each model takes:

ModelUse
Claude Opus 5.5, Opus 5, Sonnet 5.5, Sonnet 5, Haiku 5.5, Fable 5, Fable 5.1, Opus 4.8, Opus 4.7{"type": "adaptive"} with an effort level, instead of a token budget
Claude Opus 5.5, Fable 5, Fable 5.1A low effort level to keep thinking short; these models always think
Earlier Claude models{"type": "enabled", "budget_tokens": N}

Other settings reach the model as you sent them; if the model doesn't take one, its own error comes back to you, and a rejected request is not charged.

Gemini

On Chat Completions, Responses, or Messages, Gemini models take these settings:

You sendEffect on Gemini
thinking: {"type": "enabled", "budget_tokens": N}Thinking budget of N tokens, thoughts returned
reasoning_effort: "low", "medium", "high"Thinking level, thoughts returned
reasoning_effort: "none" or thinking: {"type": "disabled"}The model's lowest thinking level, no thoughts returned

Measured on google/gemini-3.1-flash-lite with the same prompt as above:

reasoning_effortcompletion_tokens_details.reasoning_tokens
noneabsent; the model did not think
low118
high229
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.1-flash-lite",
    "messages": [{"role": "user", "content": "What is 17 * 23? Reply with the number only."}],
    "reasoning_effort": "none"
  }'

Other models

For GPT, DeepSeek, Qwen, and other models whose native protocol is Chat Completions, an effort level from any protocol becomes reasoning_effort. On GPT reasoning models, leave temperature and top_p at their defaults while reasoning is on.

Reasoning in the response

Reasoning tokens are reported in usage on every protocol:

ProtocolField
Chat Completionsusage.completion_tokens_details.reasoning_tokens
Responsesusage.output_tokens_details.reasoning_tokens
GeminiusageMetadata.thoughtsTokenCount
Messagesincluded in usage.output_tokens

The visible reasoning comes back as reasoning and reasoning_details on Chat Completions, reasoning output items on Responses, thinking blocks on Messages, and parts with "thought": true on Gemini.

On this page