Skip to content

OpenAI reasoning.effort: ошибка «Unsupported value» (unsupported_value) — причины и решения ​

Вы установили уровень рассуждения (reasoning effort) — none, minimal, max — и API возвращает HTTP 400 с сообщением о том, что данное значение не поддерживается этой моделью, за которым следует список допустимых значений. Ниже объясняется, почему проверка reasoning effort выполняется для каждой модели, какие текущие модели поддерживают определенные уровни и как перестать «зашивать» (hard-coding) одно и то же значение для всех моделей.

Краткий ответ

Ошибка unsupported_value в параметре reasoning.effort (Responses API) или reasoning_effort (Chat Completions) означает, что модель поддерживает настройку уровня рассуждения, но не тот уровень, который вы указали. Поддержка различается в зависимости от модели: gpt-6.1-sol и gpt-6-astra отклоняют none; ни одна из актуальных страниц моделей GPT-6 или GPT-5.6 Sol не упоминает minimal. Используйте значение из списка «Supported values» в сообщении об ошибке — OpenAI рекомендует low в качестве замены как для none (на моделях, где оно не поддерживается), так и для minimal. Вместо глобальной настройки лучше хранить маппинг параметров для каждой модели.

Симптомы и значение ошибки ​

В Responses API отправка none модели, которая его не поддерживает, выглядит так:

json
{
  "error": {
    "message": "Unsupported value: 'none' is not supported with the 'gpt-6-astra' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.",
    "type": "invalid_request_error",
    "param": "reasoning.effort",
    "code": "unsupported_value"
  }
}

То же сообщение появляется для gpt-6.1-sol:

text
Unsupported value: 'none' is not supported with the 'gpt-6.1-sol' model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.

Две особенности позволяют легко устранить эту ошибку:

  • Сообщение указывает модель, которая отклонила значение. Это важно, если клиент незаметно для вас переключил модель.
  • В нем перечислены допустимые значения. Вам не нужно гадать — любое значение из этого списка пройдет проверку.

Не путайте эту ошибку с похожей:

json
{
  "error": {
    "message": "Unsupported parameter: 'reasoning.effort' is not supported with this model.",
    "type": "invalid_request_error",
    "param": "reasoning.effort",
    "code": "unsupported_parameter"
  }
}

Ошибка unsupported_parameter означает, что модель вообще не поддерживает reasoning effort — обычно это модель, не предназначенная для глубоких рассуждений. Решение заключается в том, чтобы полностью убрать объект reasoning. Информацию о других ошибках параметров (max_tokens, temperature) см. в разделе Unsupported parameter: max_tokens.

Почему это происходит ​

  1. Список значений является надмножеством. В справочнике API OpenAI указаны none, minimal, low, medium, high, xhigh и max как для reasoning.effort, так и для reasoning_effort, с оговоркой, что не все модели поддерживают каждое значение. Авторитетный список для конкретной модели находится на странице этой модели.
  2. Одна настройка, много моделей. Глобальная конфигурация (например, reasoning_effort = "none" для скорости или minimal из старой конфигурации) отлично работает на одной модели, но отклоняется следующей.
  3. Клиент сменил модель, но сохранил настройки. В репозитории Codex от OpenAI было несколько проблем, когда приложение переключало поток на gpt-6-astra, сохраняя настройку none, после чего каждый следующий запрос завершался этой ошибкой.
  4. minimal — это «пережиток». Он фигурирует в списке значений API, но ни одна из актуальных страниц моделей, проверенных для этой статьи (gpt-6.1-sol, gpt-6-astra, gpt-6-sol, gpt-6-luna, gpt-5.6-sol), его не поддерживает.

Какие модели поддерживают какие значения ​

Согласно страницам моделей OpenAI на 13 ноября 2026 г.:

Модельnoneminimallowmediumhighxhighmax
gpt-6.1-sol——✓✓ (по умолч.)✓✓✓
gpt-6-astra——✓✓✓✓✓
gpt-6-sol✓—✓✓ (по умолч.)✓✓✓
gpt-6-luna✓—✓✓ (по умолч.)✓✓✓
gpt-5.6-sol✓—✓✓ (по умолч.)✓✓✓

В обоих справочниках API указано, что medium является значением по умолчанию, если параметр опущен. Поддержка меняется по мере выпуска новых моделей, поэтому лучше перепроверять страницу модели или просто читать список «Supported values» в сообщении об ошибке, а не полагаться на эту таблицу как на константу.

Решение 1: Отправьте значение, которое принимает модель ​

Самый быстрый способ: используйте одно из значений из сообщения об ошибке. В Responses API:

bash
curl https://byesu.com/v1/responses \
  -H "Authorization: Bearer sk-YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "input": "Find the off-by-one bug in: for i in range(1, len(xs)): print(xs[i])",
    "reasoning": {"effort": "low"}
  }'

В Chat Completions эта же настройка передается как строка верхнего уровня:

bash
curl https://byesu.com/v1/chat/completions \
  -H "Authorization: Bearer sk-YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "messages": [{"role": "user", "content": "Find the off-by-one bug in: for i in range(1, len(xs)): print(xs[i])"}],
    "reasoning_effort": "low"
  }'

Руководство OpenAI по миграции на GPT-6 предлагает две конкретные замены: для gpt-6-astra и gpt-6.1-sol используйте low там, где вы использовали none; а если в запросе использовалось minimal, начните с low и сравните результаты.

Решение 2: Храните маппинг параметров для каждой модели ​

Если ваш код обращается к нескольким моделям, сделайте effort функцией от модели с резервным вариантом (fallback), который переключается на ближайший поддерживаемый уровень вместо ошибки:

python
from openai import OpenAI

client = OpenAI(api_key="sk-YOUR_TOKEN", base_url="https://byesu.com/v1")

LEVELS = ["none", "minimal", "low", "medium", "high", "xhigh", "max"]

SUPPORTED = {
    "gpt-6.1-sol": {"low", "medium", "high", "xhigh", "max"},
    "gpt-6-astra": {"low", "medium", "high", "xhigh", "max"},
    "gpt-6-sol":   {"none", "low", "medium", "high", "xhigh", "max"},
    "gpt-6-luna":  {"none", "low", "medium", "high", "xhigh", "max"},
    "gpt-5.6-sol": {"none", "low", "medium", "high", "xhigh", "max"},
}

def effort_for(model: str, wanted: str) -> str | None:
    allowed = SUPPORTED.get(model)
    if allowed is None:
        return None                      # неизвестная модель: пусть API использует значения по умолчанию
    if wanted in allowed:
        return wanted
    i = LEVELS.index(wanted)
    # Предпочитаем следующий уровень вверх (больше рассуждений), затем ищем вниз
    for lvl in LEVELS[i + 1:] + LEVELS[:i][::-1]:
        if lvl in allowed:
            return lvl
    return None

def ask(model: str, prompt: str, wanted: str = "none"):
    kwargs = {"model": model, "input": prompt}
    effort = effort_for(model, wanted)
    if effort:
        kwargs["reasoning"] = {"effort": effort}
    return client.responses.create(**kwargs)

print(effort_for("gpt-6-astra", "none"))   # -> low
print(effort_for("gpt-6-luna", "minimal")) # -> low

Округление «вверх», а не «вниз» — это осознанный выбор: запрос, для которого требовалось минимум рассуждений, получит их чуть больше. Это немного увеличит задержку (latency), но редко ухудшает качество. Если задержка для вас критичнее, измените порядок поиска.

Решение 3: Повторите запрос один раз, используя список из ошибки ​

Если вы не можете поддерживать таблицу моделей (например, если вы используете прокси перед множеством моделей), распарсьте список «Supported values» и повторите запрос ровно один раз:

python
import re
import openai

def create_with_effort(**kwargs):
    try:
        return client.responses.create(**kwargs)
    except openai.BadRequestError as e:
        err = (e.body or {}).get("error", e.body) or {}
        if err.get("code") != "unsupported_value" or err.get("param") != "reasoning.effort":
            raise
        allowed = re.findall(r"'([a-z]+)'", err.get("message", "").split("Supported values are:")[-1])
        if not allowed:
            raise
        fallback = "low" if "low" in allowed else allowed[0]
        kwargs["reasoning"] = {**kwargs.get("reasoning", {}), "effort": fallback}
        return client.responses.create(**kwargs)

Логируйте каждый случай срабатывания fallback. Автоматическое понижение с max до xhigh или повышение с none до low меняет время отклика и длину вывода, поэтому важно знать, когда это происходит.

Взаимодействие Effort с инструментами и параметрами выборки ​

Выбор effort — это не только вопрос валидации:

  • Параметры сэмплирования. Руководство OpenAI по миграции рекомендует удалять temperature, top_p и top_logprobs, если effort не равен none. Если вы переключаете gpt-6-luna с none на low, уберите и эти поля — см. Unsupported parameter: max_tokens.
  • Вызов функций (Function calling) в Chat Completions. Согласно страницам моделей OpenAI, gpt-6-sol и gpt-6-luna поддерживают вызов функций в Chat Completions только при reasoning_effort: "none", а для gpt-6.1-sol / gpt-6-astra требуется использование Responses API. Если вы использовали none только для того, чтобы задействовать инструменты в Chat Completions, переход на Responses API будет более чистым решением.
  • Скорость и использование токенов. В справочнике API указано, что меньший effort может означать более быстрые ответы и меньшее количество токенов рассуждения. Токены рассуждения учитываются в лимитах вывода и контекстном окне, поэтому высокий effort также может привести к ошибкам контекстного окна или достижению лимита вывода.

Codex и другие клиенты ​

Codex считывает настройку effort из параметра model_reasoning_effort в файле ~/.codex/config.toml. Если вы меняете модели, убедитесь, что значение effort валидно для новой модели — none работает на gpt-6-sol, но не на gpt-6-astra или gpt-6.1-sol. В руководстве по Codex CLI на byesu показана рабочая конфигурация. В любом клиенте с выпадающим списком настроек действует то же правило: выпадающий список может предлагать уровни, которые выбранная модель отклонит.

Если вы работаете с GPT через byesu ​

byesu — это шлюз AI API с эндпоинтом, совместимым с OpenAI, доступным по адресу https://byesu.com/v1. Он поддерживает как Chat Completions, так и Responses и работает по модели оплаты по факту использования без подписки.

  • Работают оба формата параметров. Используйте reasoning_effort в /v1/chat/completions и reasoning.effort в /v1/responses; правила допустимости значений для каждой конкретной модели остаются в силе.
  • Сначала проверьте строку модели. Поскольку ошибка называет модель, сравните ее с идентификатором, который вы собирались использовать — копируйте ID из списка моделей в консоли или через запрос GET /v1/models.

Чтобы начать работу, следуйте краткому руководству.

FAQ ​

Что означает ошибка «Unsupported value: 'none' is not supported with the model»? ​

Это ошибка 400 invalid_request_error с параметром reasoning.effort и кодом unsupported_value. Модель поддерживает настройку reasoning.effort, но не тот уровень, который вы отправили. В сообщении об ошибке перечислены поддерживаемые значения; выберите одно из них и повторите запрос.

Какие значения reasoning effort поддерживает OpenAI? ​

В справочнике API указаны none, minimal, low, medium, high, xhigh и max, при этом отмечено, что не каждая модель рассуждения поддерживает каждое значение. Поддержка зависит от модели: например, gpt-6.1-sol и gpt-6-astra принимают значения от low до max, но не none или minimal, в то время как gpt-6-sol, gpt-6-luna и gpt-5.6-sol поддерживают и none.

Что использовать вместо minimal? ​

Согласно руководству по миграции на GPT-6 от OpenAI, при переносе запроса, использовавшего minimal, следует начать с low, а затем сравнить результаты. Для моделей gpt-6.1-sol и gpt-6-astra используйте low везде, где вы ранее использовали none.

В чем разница между reasoning_effort и reasoning.effort? ​

Это одна и та же настройка в двух разных API. Chat Completions принимает строку reasoning_effort верхнего уровня; Responses API принимает объект reasoning с полем effort. Оба по умолчанию имеют значение medium, если параметр опущен, и оба проверяют значение на соответствие конкретной модели.

Почему вместо этого я получаю ошибку «Unsupported parameter: 'reasoning.effort'»? ​

Этот вариант с кодом unsupported_parameter означает, что модель вообще не принимает reasoning effort, как правило, потому что это не модель с поддержкой рассуждений. Для такой модели удалите весь объект reasoning, вместо того чтобы подбирать другое значение.

Возникла проблема? Напишите в поддержку или в наш чат.