# Рассуждения

Управляйте рассуждениями моделей, читайте их рассуждения и токены рассуждений.

Модели с рассуждениями думают, прежде чем ответить. Это поддерживают модели с возможностью **Рассуждения** в [каталоге](/models).

## Глубина рассуждений

```json
{
  "model": "openai/gpt-oss-120b",
  "messages": [{ "role": "user", "content": "Is 1001 a prime number?" }],
  "reasoning": { "effort": "low" },
  "max_tokens": 4000
}
```

| Поле `reasoning` | Значение                                                                            |
| ---------------- | ----------------------------------------------------------------------------------- |
| `effort`         | `minimal`, `low`, `medium` или `high`: насколько много модель думает.               |
| `max_tokens`     | Бюджет токенов на рассуждения — для моделей, которые принимают его вместо `effort`. |
| `exclude`        | `true`: модель все равно думает, но рассуждения не возвращаются.                    |
| `enabled`        | `false` отключает рассуждения, если модель это позволяет.                           |

`reasoning_effort` (поле OpenAI) работает как сокращение для `effort`.

В регионе Россия сохраняется только глубина: роутер передает `reasoning.effort` как `reasoning_effort` и удаляет остальную часть `reasoning`.

## Как прочитать рассуждения

Если модель возвращает рассуждения, они приходят в `message.reasoning` (или `reasoning_content`, в зависимости от модели); в потоке — в `delta.reasoning` или `delta.reasoning_content`.

## Токены и стоимость

Токены рассуждений — это выходные токены: они оплачиваются по цене вывода и входят в `max_tokens`. С лимитом по умолчанию 4096 модель может потратить его целиком на рассуждения и закончить с `finish_reason: "length"` и пустым ответом, поэтому задавайте `max_tokens` с запасом.

`usage.completion_tokens_details.reasoning_tokens` показывает, сколько выходных токенов ушло на рассуждения.
