Hubris
Возможности

Reasoning токены

Контроль над reasoning-моделями (o1, R1, Claude thinking) через параметр reasoning_effort.

Reasoning токены

Серия reasoning-моделей (OpenAI o1, DeepSeek R1, Claude с включённым thinking) перед основным ответом тратит токены на «внутреннее размышление». Эти reasoning-токены не показываются в choices[0].message.content, но учитываются в счёте.

Когда использовать

Reasoning-модели лучше справляются с задачами, требующими многошагового рассуждения:

  • Математика, логика, доказательства.
  • Анализ кода и поиск багов.
  • Сложные стратегические решения с несколькими переменными.
  • Юридические и научные тексты с цепочкой выводов.

Для коротких ответов (классификация, переформулирование, простые вопросы) reasoning-модели — overkill: тратят больше токенов и дают тот же результат, что и обычные.

Управление

Передайте параметр reasoning_effort в запросе:

curl -s https://api.hubris.pw/v1/chat/completions \
  -H "Authorization: Bearer sk-gw-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Если есть число, простое и сумма цифр которого тоже простое — какое наименьшее?"}],
    "reasoning_effort": "high"
  }'

Допустимые значения:

  • "low" — минимум reasoning, быстрее и дешевле.
  • "medium" — баланс (default для большинства reasoning-моделей).
  • "high" — максимум, для сложных задач.

Не все модели поддерживают reasoning_effort — если модель его не понимает, апстрим вернёт ошибку или просто проигнорирует.

Биллинг

Reasoning-токены входят в completion_tokens и тарифицируются по обычной цене выходных токенов модели:

{
  "usage": {
    "prompt_tokens": 50,
    "completion_tokens": 1200,
    "total_tokens": 1250,
    "completion_tokens_details": {
      "reasoning_tokens": 1100
    }
  }
}

В примере выше из 1200 completion-токенов 1100 ушли на reasoning, и только 100 — на финальный ответ. Это нормально для сложных задач: модель «обдумывает» дольше, чем пишет.

Поле completion_tokens_details.reasoning_tokens информативное — показывает, сколько именно ушло на размышления. Денежная стоимость такая же, как для обычных completion-токенов.

Как читать ответ

Сам процесс рассуждения скрыт — его не видно в message.content. Видно только финальный ответ:

{
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "Ответ: 23 (простое, сумма цифр 5 — простое)"
    },
    "finish_reason": "stop"
  }]
}

У некоторых моделей в перспективе появится поле reasoning рядом с content — мы пробросим его как есть от провайдера, без нормализации.

Стриминг

Стриминг работает как обычно: chunk-и приходят по мере генерации финального ответа. Reasoning-фаза происходит ДО первого chunk-а — значит, для задач с высоким reasoning_effort первый chunk может прийти через 10–30 секунд молчания, а не сразу.

Что дальше