Skip to main content

Reasoning

Reasoning models stream reasoning_content deltas alongside content. Non-streamed calls return it on the message:
Some checkpoints (R1-distill style) embed <think>…</think> inside content instead of a separate channel. The server splits it out: the <think> span is appended to reasoning_content and stripped from content, so you only ever render one thinking block. Render reasoning_content in a collapsible block and content as the answer. In streams both arrive as deltas — accumulate each separately.

Effort

reasoning_effort sets how much the model thinks before it answers. The accepted values are off, low, high, and max. off stops thinking on a model that allows it. Any other value, including minimal, medium, and xhigh, is rejected with 400. Not every model offers every level. GET /v1/models lists each model’s reasoning_efforts and its reasoning_default. Sending a level the model does not offer returns 400 and names the levels it does. high and max are the model’s upper tiers, so their exact depth varies by model. effort and, on the Responses API, reasoning.effort are the same setting. If you send more than one, they must match. Leave the field unset and the model’s reasoning_default applies.