> ## Documentation Index
> Fetch the complete documentation index at: https://docs.overcontrolgroup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reasoning

> Ask a Lume model to spend more effort on a reply. The reply is still text.

You can ask the model to spend more effort on a reply. The response you get back is still the reply itself. It does not include a reasoning trace, a thinking block, or hidden reasoning text.

Leaving the field out is the same as asking for no extra effort. The examples use `lume-3.5`.

## Chat Completions

`POST /v1/chat/completions` needs the scope `chat:completions`. Set `reasoning_effort` to `none` or `high`.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.overcontrolgroup.com/v1/chat/completions \
    -H "Authorization: Bearer $OVERCONTROL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "lume-3.5",
      "max_tokens": 256,
      "reasoning_effort": "high",
      "messages": [
        {"role": "user", "content": "Which is larger, 3/7 or 5/12? Answer in one sentence."}
      ]
    }'
  ```

  ```python Python theme={null}
  import os
  from openai import OpenAI

  client = OpenAI(
      api_key=os.environ["OVERCONTROL_API_KEY"],
      base_url="https://api.overcontrolgroup.com/v1",
  )

  response = client.chat.completions.create(
      model="lume-3.5",
      max_tokens=256,
      reasoning_effort="high",
      messages=[
          {
              "role": "user",
              "content": "Which is larger, 3/7 or 5/12? Answer in one sentence.",
          }
      ],
  )

  print(response.choices[0].message.content)
  ```
</CodeGroup>

The success body is an ordinary chat completion. Read the reply from `choices[0].message.content`. `tool_calls` or `function_call` appear only when the model decided to call a tool. There is no reasoning field on the message.

Any other value for `reasoning_effort` is HTTP 400:

```json theme={null}
{
  "error": {
    "message": "Unsupported value for 'reasoning_effort'",
    "type": "invalid_request_error",
    "param": "reasoning_effort",
    "code": "unsupported_value"
  }
}
```

The response includes `X-Request-Id`.

## Messages

`POST /v1/messages` needs `messages:create` and `anthropic-version: 2023-06-01`. You can set effort in either of two places.

`thinking.type` maps like this:

| `thinking.type` | Effort |
| - | - |
| `disabled` | No extra effort. |
| `adaptive` | High effort. |
| `enabled` | High effort. You also send `budget_tokens`, at least 1024 and less than `max_tokens`. That number is checked and then dropped. It is not a budget of reasoning tokens you can read back. |

`output_config.effort` maps `low` to no extra effort, and `medium`, `high`, and `max` to high effort.

If you send both, `output_config.effort` wins. `effort` set to `low` means no extra effort even when `thinking.type` is `enabled` or `adaptive`. The two fields do not combine. If you send only one, that field is the one that counts.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.overcontrolgroup.com/v1/messages \
    -H "x-api-key: $OVERCONTROL_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "lume-3.5",
      "max_tokens": 256,
      "output_config": {"effort": "high"},
      "messages": [
        {"role": "user", "content": "Which is larger, 3/7 or 5/12? Answer in one sentence."}
      ]
    }'
  ```

  ```python Python theme={null}
  import os
  from anthropic import Anthropic

  client = Anthropic(
      api_key=os.environ["OVERCONTROL_API_KEY"],
      base_url="https://api.overcontrolgroup.com",
  )

  message = client.messages.create(
      model="lume-3.5",
      max_tokens=256,
      output_config={"effort": "high"},
      messages=[
          {
              "role": "user",
              "content": "Which is larger, 3/7 or 5/12? Answer in one sentence.",
          }
      ],
  )

  print(message.content[0].text)
  ```
</CodeGroup>

The success body is an ordinary Messages reply. `content` holds `text` or `tool_use`. It does not hold a `thinking` block, a `redacted_thinking` block, or reasoning text. If you send those blocks on an earlier assistant turn, they are checked and then dropped.

## Next

<CardGroup cols={2}>
  <Card title="Generate text" icon="message" href="/text/generate">
    The same reply with no extra effort.
  </Card>

  <Card title="Structured outputs" icon="braces" href="/text/structured-outputs">
    Ask the reply to be JSON.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.