Алиасы параметров

Как передавать provider, reasoning_effort и allow_fallbacks прямо в строке model

Алиасы параметров

Если ваш клиент не умеет отправлять дополнительные поля в body, часть routing- и reasoning-настроек можно передать прямо в строке model.

Alias-формат поддерживается только для chat-style API: /v1/chat/completions, /v1/responses и /v1/messages.

Что это даёт

С помощью alias-формата можно:

  • выбрать конкретного провайдера через provider
  • задать глубину reasoning через reasoning_effort
  • включить или отключить fallback через allow_fallbacks

Если в model нет символа @, запрос обрабатывается как обычно.

Поддерживаемые эндпоинты

ЭндпоинтПоддержка
/v1/chat/completions✅
/v1/responses✅
/v1/messages✅
Embeddings❌
Audio❌
Media❌

Формат alias-строки

<model>@<key>=<value>&<key>=<value>

Примеры:

zai/glm-5.3-flash@reasoning_effort=high
zai/glm-5.3-flash@allow_fallbacks=false
anthropic/claude-fable-5.1@provider=Anthropic
zai/glm-5.3-flash@provider=Z.ai&reasoning_effort=high&allow_fallbacks=false

В ответах API возвращается canonical model без alias-суффикса. Например, если вы отправили zai/glm-5.3-flash@reasoning_effort=high, в ответе придёт zai/glm-5.3-flash.

Поддерживаемые alias-параметры

AliasВо что маппитсяЧто делает
providerprovider.only = [value]Выбирает конкретный provider routing path
reasoning_effortreasoning.effort = valueУправляет глубиной reasoning
allow_fallbacksprovider.allow_fallbacks = booleanРазрешает или запрещает fallback на другие провайдеры

provider

provider работает так же, как обычное поле provider.only: передавайте тот же идентификатор, который у вас уже работает в provider.only.

anthropic/claude-fable-5.1@provider=Anthropic

reasoning_effort

Маппится в canonical-поле reasoning.effort. Поддерживаемые значения:

  • max
  • xhigh
  • high
  • medium
  • low
  • minimal
  • none

Конкретная модель или провайдер могут поддерживать только часть значений.

zai/glm-5.3-flash@reasoning_effort=high

allow_fallbacks

Допустимы только значения true и false.

zai/glm-5.3-flash@allow_fallbacks=false

Примеры запросов

curl -X POST https://api.usellm.ru/v1/chat/completions \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "zai/glm-5.3-flash@reasoning_effort=high",
    "messages": [
      { "role": "user", "content": "Ответь одним словом: да" }
    ]
  }'

Эквивалент в обычном body

Alias-формат представляет собой сокращённую запись стандартных body-полей. Следующие запросы эквивалентны:

{
  "model": "zai/glm-5.3-flash@reasoning_effort=high",
  "messages": [{ "role": "user", "content": "Привет" }]
}
{
  "model": "zai/glm-5.3-flash@provider=Z.ai&allow_fallbacks=false",
  "messages": [{ "role": "user", "content": "Привет" }]
}

Конфликты alias и body

Если одно и то же поведение задано и через alias, и через обычные поля body, API вернёт 400.

Конфликтами считаются:

  • provider=... в model и любой объект provider в body
  • reasoning_effort=... в model и reasoning.effort в body
  • allow_fallbacks=... в model и provider.allow_fallbacks в body

Если вам нужна сложная routing-настройка (order, ignore, max_price и другие поля provider), используйте обычный body-контракт, а не alias-формат.

Пример конфликта, который вернёт 400:

{
  "model": "zai/glm-5.3-flash@reasoning_effort=high",
  "messages": [{ "role": "user", "content": "Привет" }],
  "reasoning": {
    "effort": "low"
  }
}

Ошибки валидации

API вернёт 400, если:

  • используется неизвестный alias-ключ
  • ключ повторяется несколько раз
  • значение пустое
  • строка alias имеет неправильный формат
  • alias конфликтует с body

Невалидные примеры:

openai/gpt-6-astra@
openai/gpt-6-astra@provider
openai/gpt-6-astra@provider=
openai/gpt-6-astra@provider=google=foo
openai/gpt-6-astra@provider=google&provider=openai
openai/gpt-6-astra@foo=bar

Ограничения

  • Поддерживаются только provider, reasoning_effort и allow_fallbacks
  • Provider-specific параметры через alias не поддерживаются
  • Percent-encoding и дополнительные escape-механизмы не поддерживаются
  • Alias-формат не распространяется на embeddings, audio и media

Следующие шаги