reasoning_effort tells the model how much thinking to do before it answers. More effort means better answers on hard problems, and a bigger bill — thinking tokens are output tokens.
The levels#
| Value | Use it for |
|---|---|
none | No thinking. Fastest and cheapest. |
minimal | A moment of consideration. Simple multi-step questions. |
low | Everyday reasoning — comparisons, short derivations. |
medium | The sensible default when you know a question is not trivial. |
high | Genuinely hard problems: proofs, tricky debugging, planning. |
xhigh | The most we will let a model think. Slow and expensive. |
max is accepted as a synonym for xhigh.
Bala has no reasoning levels
upfyn-bala reports an empty supported_efforts list. Yuva and Rishi support all six. Read the list from GET /v1/models rather than assuming.Using it#
response = client.chat.completions.create(model="upfyn-rishi",messages=[{"role": "user", "content": "Prove that sqrt(2) is irrational."}],reasoning_effort="high",max_tokens=8000, # leave room: the budget is taken out of this)
Effort and max_tokens interact#
On Rishi, effort becomes a thinking-token budget that is taken out of the same allowance as the answer. The gateway reserves 512 tokens of headroom so a model cannot think itself out of room to reply.
| Effort | Thinking budget on Rishi |
|---|---|
minimal | 1,024 tokens |
low | 2,048 |
medium | 4,096 |
high | 8,192 |
xhigh | 16,384 |
Too small a max_tokens silently drops the thinking
Ifmax_tokens cannot fit the budget plus headroom, the reasoning request is dropped rather than the call failing. Ask for high with max_tokens: 2000 and you will get an ordinary answer at ordinary quality. Give the model room.On the other models the six levels are mapped onto the upstream’s own three-rung ladder, so xhigh and high can land on the same setting. The value is never ignored — it is translated.
What it costs you#
Thinking tokens appear in completion_tokens_details.reasoning_tokens and are billed at the normal output rate.
"usage": {"prompt_tokens": 24,"completion_tokens": 1840,"total_tokens": 1864,"completion_tokens_details": {"reasoning_tokens": 1602 // thinking, billed like any other output token}}
- Start at
mediumand move up only when you can see the answers are wrong. - Do not set a high effort on a classification or extraction task — there is nothing to think about, and you pay for it anyway.
- Watch
reasoning_tokensin your logs before rolling a higher effort out everywhere.
One thing that will 400#
Sending both reasoning_effort and a nested reasoning.effort with different values is rejected with unsupported_parameter rather than one silently winning. Pick one.
Fast mode is a different dial
service_tier: "priority" asks for faster scheduling, not less thinking — but no Upfyn model offers a priority tier today, so none advertises Fast in /api.json. When a model's upstream does support it, the catalogue will say so; Fast mode will never swap in a smaller model.
