Configure Reasoning Effort¶
Use the reasoning control to change how much effort a model spends on the next answer. The available levels depend on the selected model. This setting is saved per chat.
Using the Reasoning Effort Slider in the Web UI¶
- Open a chat and open the model picker in the composer.
- Select a model with adjustable reasoning.
- Move the Reasoning effort slider to an available level. Keyboard users can focus the slider and use the arrow keys.
- Send your next message.
The picker offers only levels supported by the model's catalog entry. Models
with enabled mode have an on/off choice; native and none modes do not
provide adjustable effort. An optional-reasoning model also offers Off.
Choose a lower available level when latency matters, and increase it when the model needs more room to work through a task. Effort names are provider controls, not fixed token budgets or guarantees of answer quality.
Mandatory vs Optional Reasoning¶
reasoning_mandatory determines whether the UI allows Off. For a mandatory
model, reasoning remains enabled. Switching models can normalize the current
setting to a level supported by the new model.
Operators can inspect reasoning_efforts, reasoning_default_effort, and
reasoning_default_enabled on the admin Models page. For OpenRouter, use
Refresh provider metadata when those values need updating. See
Manage Models.
Programmatic Configuration via API¶
Set Reasoning Level¶
Send an authenticated request for a chat you own:
curl -X POST http://localhost:4567/api/v1/chats/YOUR_CHAT_UUID/reasoning \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reasoning_level": "high"}'
When high is supported, the response is:
message contains the normalized level actually saved, which can differ from
the requested level. For example, off on a mandatory model resolves to a
supported enabled level. Read the returned value when updating a client UI.
Supported Effort Values¶
The chat API accepts:
Use off to disable optional reasoning. none is an upstream provider value,
not a valid value for this chat endpoint; it returns HTTP 400 with
"Unsupported reasoning level". The adapter translates off to the
provider's request format when needed.
Accepted levels are normalized against the model's capabilities. An unsupported
named effort can map to the nearest supported level; a non-reasoning model
normalizes to off.
Reasoning Modes¶
| Catalog mode | User control |
|---|---|
effort |
Model-supported effort levels, plus Off when optional |
enabled |
On/off when optional; enabled when mandatory |
native |
Fixed provider behavior |
none |
No reasoning |
Preserved Reasoning Across Turns¶
Effort controls generation. Preservation controls which returned reasoning is sent with later requests. Changing effort does not erase stored traces, and showing a thinking block does not prove that a provider will accept it back.
See Preserved Reasoning for the storage/replay distinction and Model Catalog for capability fields.