Прозрачная маршрутизация и flight breakdown

Прозрачный роутер PlusVibe: явный выбор маршрута через :alias или auto-route по стратегии ключа. Публичные псевдонимы, failover, reveal/debug-заголовки x-plusvibe-route и поля route/address_as в истории.

PlusVibe — прозрачный маршрутизатор: вы либо явно выбираете публичный вариант через суффикс :alias, либо оставляете имя модели без суффикса — тогда шлюз сам подбирает маршрут по стратегии аккаунта/ключа и при сбоях переключается на другой доступный вариант. В ответах и истории используются только публичные идентификаторы маршрутов.

Два режима: pin или auto

ПараметрТипОписание
Явный pinmodel:alias или model:NЗапрос всегда идёт через выбранный вариант. Межвариантный failover отключён: при 429/5xx ошибка возвращается как есть (допускается повтор на том же варианте).
Auto (bare model)только имя моделиШлюз выбирает вариант по настройкам аккаунта или ключа. При 429/5xx и пустом 200 пробует другие варианты той же модели с ограничениями по стоимости и входным данным.
"model": "claude-opus-4.8"          // auto — стратегия аккаунта/ключа
"model": "claude-opus-4.8:sub"      // pin — только :sub, без переключения на :nexus
"model": "claude-opus-4.8:2"        // pin — вариант №2 из каталога (устаревший :N синтаксис)

Публичные псевдонимы (:alias)

Суффикс после двоеточия — это публичный идентификатор маршрута, а не имя upstream. Полный перечень для конкретной модели — в каталоге (Модели, колонка «В API»). Основные псевдонимы:

ПараметрТипОписание
:subaliasПубличный вариант модели. Доступность и цена указаны в каталоге.
:networkaliasПубличный вариант модели; цена и доступность указаны в каталоге.
:sub5aliasПубличный вариант для совместимых моделей.
:sub5plusaliasРасширенный GPT-5.6 sub-пул (Plus tier).
:sub5maxaliasMax-tier пул для Claude-моделей.
:nexusaliasПубличный вариант с широким каталогом, обычно дороже.
:pixel / :flowaliasМедиа-маршруты (изображения/видео), не чат.
Подробнее о вариантах одной модели — в разделе Модели → Провайдеры. Если суффикс для модели недоступен, запрос вернёт 400.

Настройки аккаунта и ключа

Для auto-запросов (bare model) в личном кабинете задаются:

ПараметрТипОписание
routingStrategystringpriority (по умолчанию) — порядок providerPriority, иначе первый вариант в каталоге; price — самый дешёвый для нас вариант; latency — самый быстрый по недавним замерам; default — жёстко первый eligible вариант.
providerPriorityсписокПриоритет внутренних тегов провайдеров (в кабинете — человекочитаемые имена). Используется при strategy=priority. Ключ переопределяет аккаунт.
disabledProvidersсписокИсключить провайдеров из auto-маршрутизации. Объединяется по ключу и аккаунту (union). Явный :alias по-прежнему можно вызвать, если вариант существует.
cacheOnlybooleanТолько варианты с поддержкой кэша промпта — выгодно при повторяющемся префиксе.
Настройки применяются только к запросам без явного суффикса. Поля ключа имеют приоритет над настройками аккаунта. Также см. allowedModels и лимиты в таблице ниже.

Стратегия маршрутизации

ПараметрТипОписание
priority (по умолчанию)strategyОбычный маршрут по умолчанию.
pricestrategyВыбирать вариант с наименьшей ценой среди доступных для модели.
latencystrategyВыбирать самый быстрый по недавним замерам вариант.
cacheOnlybooleanТолько кэширующие варианты — выгодно при повторяющемся префиксе промпта.
Стратегия применяется только к запросам по умолчанию. Если вы явно указали вариант суффиксом (например :sub) — он всегда уважается и маршрутизация его не переопределяет. Настраивается в личном кабинете для аккаунта или для конкретного ключа (ключ имеет приоритет над аккаунтом).

Явный выбор провайдера

Добавьте псевдоним провайдера через двоеточие — он уважается независимо от стратегии маршрутизации. Полный список псевдонимов и примеры — в разделе Модели → Провайдеры.

"model": "claude-opus-4.8"        // auto — стратегия аккаунта/ключа
"model": "claude-opus-4.8:sub"    // явно зафиксировать провайдера :sub
"model": "claude-opus-4.8:nexus"  // явно зафиксировать провайдера :nexus

Лимиты ключа

Для каждого API-ключа в кабинете можно задать:

ПараметрТипОписание
allowedModelsсписок моделейБелый список моделей, которые разрешено вызывать этим ключом. Пусто — разрешены все. Запрос модели вне списка получает 403.
routingStrategy / cacheOnlyпереопределениеСвоя стратегия и фильтр кэша для ключа — переопределяют настройки аккаунта.
limitRubлимит тратЛимит расходов на ключ.
allowedIpsбелый список IPОграничение по IP (см. раздел «Аутентификация»).
Это удобно для раздачи ключей командам и интеграциям: один ключ — только дешёвые модели, другой — с лимитом трат, третий — со своей стратегией. Всё настраивается в личном кабинете.

Режим «Самый быстрый» для модели

В кабинете: Модели → карточка модели → Маршрутизация → «Самый быстрый», для всех ключей или для одного. Запрос без суффикса идёт в канал с самым быстрым первым токеном по живым замерам за последние 15 минут. Каналы на паузе после сбоев пропускаются, пока есть здоровые; каналы дороже вашего лимита цены не выбираются никогда. Цена — цена канала, который ответил. На запросы с явным :alias режим не влияет.

Лимит цены

Лимит в ₽ за 1 млн токенов сравнивается с ценой канала из каталога — той, что списывается. Должны пройти обе ноги, вход и выход. Запрос без суффикса идёт только в каналы не дороже лимита, в том числе при переключении после сбоя.

ПараметрТипОписание
Лимит цены, ₽/1 млннастройка ключаAPI-ключи → ключ → «Лимит цены»: вход и/или выход. Действует на каждый запрос этого ключа.
max_priceчисло или объектЛимит для одного запроса в теле: число ограничивает обе ноги, {"input": 2.5, "output": 10} — раздельно. Может только сузить лимит ключа, не расширить.
{
  "model": "deepseek-v4.1-flash",
  "messages": [{"role": "user", "content": "привет"}],
  "max_price": {"input": 2.5, "output": 10}
}
Если под лимит не проходит ни один канал, запрос не отправляется и не списывается: ответ 422 с типом price_ceiling_no_lane (лимит ключа) или price_bound_no_lane (max_price) и ценой самого дешёвого доступного канала. Закреплённый :alias дороже лимита тоже получает 422 — вместо него мы не подставляем другой канал.

Failover (только auto)

При bare model шлюз может переключиться на другой публичный вариант той же модели, если текущий вернул 429, 5xx или пустой 200 без контента. Ограничения:

  • Запросы с изображениями/PDF не переключаются на другой провайдер (vision-совместимость).
  • Failover не уходит на вариант существенно дороже (кроме strategy=price).
  • Есть верхняя граница числа попыток на один клиентский запрос.
  • При pin (:alias) межпровайдерный failover отключён — вы получаете ошибку выбранного маршрута.

Повтор с экспоненциальной задержкой при 429 описан в Ошибки и лимиты.

Flight breakdown — какой маршрут обслужил запрос

Для доверенных reveal/debug-клиентов после выполнения запроса (включая auto) доступны заголовки с тем, какой публичный вариант реально отработал. Обычным клиентам эти данные не возвращаются.

Заголовки ответа для доверенных reveal/debug-клиентов (chat / messages / responses)

ПараметрТипОписание
x-plusvibe-routestringПубличный псевдоним маршрута: sub, sub5plus, network, cxc, …
x-plusvibe-modelstringЗначение model для повторного pin: base или base:alias (например gpt-5.6-luna:sub5plus). При явном pin совпадает с вашим выбором.
x-pv-generation-idstringID записи в истории (не-stream). См. Баланс и история.
curl -sD - https://plusvibeapi.ru/v1/chat/completions \
  -H "Authorization: Bearer $PLUSVIBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"ping"}],"max_tokens":8}' \
  -o /dev/null | grep -i x-plusvibe

# x-plusvibe-route: sub5plus
# x-plusvibe-model: gpt-5.6-luna:sub5plus

История использования

В GET /v1/generations, GET /v1/usage и кабинете к каждой записи добавлены поля:

ПараметрТипОписание
modelstringБазовое имя модели (без внутренних суффиксов).
routestring | nullПубличный :alias победившего маршрута.
address_asstringТочное значение для поля model при повторном pin (как в каталоге addressAs).
cost_detailobjectКак рассчитано списание: строки токенов со ставкой за 1 млн (lines), надбавки (adjustments) и сумма (total). Если запрос обслужил ценовой уровень поставщика, а не базовый тариф, rateBasis = "tier", строки показаны по ставке этого уровня и в сумме дают списание, а tier называет эту ставку.
В теле ответа OpenAI-совместимых эндпоинтов по-прежнему скрыты upstream-бренды, внутренние суффиксы в model и cost_usd (кроме клиентов с reveal-исключением). Flight breakdown — только в заголовках и истории, без поломки SDK.

Ограничения

PlusVibe не предоставляет «сырой» waterfall с перечислением upstream-провайдеров в теле запроса. Управление — через публичные :alias, стратегию ключа и auto-failover внутри каталога модели. Нет отдельного API «ignore providers» или ZDR-флагов маршрутизации.

Маршрутизация PlusVibe API — :alias, auto-route, failover, flight breakdown | PlusVibe API