GoRouter

Модели, endpoints и провайдеры

Как найти модель, выбрать endpoint и управлять маршрутизацией.

Задача

Найти доступную модель и отправить запрос на подходящий endpoint.

Рабочий пример

curl "https://gorouter.ru/api/v1/models?output_modalities=text,image"

Выбор конкретных провайдеров в inference-запросе:

{
  "model": "deepseek/deepseek-v4-flash-0731",
  "messages": [{"role": "user", "content": "Привет"}],
  "provider": {
    "order": ["DeepInfra"],
    "allow_fallbacks": false
  }
}

Важные параметры

  • /models без фильтра возвращает текстовые модели.
  • /embeddings/models, /images/models и /videos/models возвращают модели нужной модальности.
  • По умолчанию провайдеры сортируются по цене.
  • Переданный объект provider переопределяет настройки маршрутизации; доступные поля зависят от upstream.

Ответ

Каталог возвращает ID, архитектуру, поддерживаемые параметры, провайдеров и отображаемые цены. Используйте поле id без изменений.

Latest-алиасы

ID вида ~author/family-latest выбирает актуальную модель семейства. Например:

{
  "model": "~deepseek/deepseek-v4-flash-latest",
  "messages": [{"role": "user", "content": "Привет!"}],
  "max_tokens": 256
}

Такие ID поддерживаются в Chat Completions, Responses и веб-чате. Перед резервированием средств GoRouter получает цель из alias_target.slug каталога OpenRouter и фиксирует конкретную модель для этого запроса. При смене версии уже выполняющийся запрос продолжает работать с прежней моделью.

В каталоге сохраняется исходный id алиаса, а поле alias_target содержит { slug, name } текущей модели. Цены, контекст, параметры и endpoints относятся к целевой модели; model_id внутри endpoint содержит конкретный ID. В ответах генерации поле model также содержит фактически использованную модель. Для воспроизводимости отправляйте её ID напрямую.

Для latest-алиасов при обязательных рассуждениях значения reasoning.effort: "none", reasoning.enabled: false, reasoning.max_tokens: 0 и reasoning_effort: "none" преобразуются в минимальный поддерживаемый уровень; нулевой reasoning-бюджет удаляется. Конкретные ID сохраняют строгую семантику. Наценка и ручные скидки берутся из настроек выбранного алиаса, а фактическая стоимость — у его цели.

Алиас и цель должны быть включены в локальном каталоге. Новые модели появляются после штатной синхронизации. Неизвестная или отключённая цель возвращает 404 model_not_found; при недоступности свежего соответствия возвращается 503 model_resolution_unavailable, при отсутствии тарификационного контракта — 503 billing_unbounded. Просроченное соответствие и другие модели не используются как запасной вариант. Недоступные алиасы временно исключаются из списков выбора.

Уровни рассуждений

Доступные значения reasoning.effort зависят от выбранной модели. GoRouter строит переключатель веб-чата по полю reasoning.supported_efforts из каталога и не добавляет уровни, которых модель не объявила. Полная шкала OpenRouter отображается слева направо по возрастанию: minimal, low, medium, high, xhigh, max; конкретная модель может поддерживать только часть этих значений. Для необязательной модели крайним слева дополнительно показывается «Выкл.».

  • Массив supported_efforts задаёт точный список доступных уровней.
  • Значение null означает поддержку всей шкалы.
  • Отсутствие supported_efforts означает, что модель не предоставляет выбор effort. Если она принимает общий объект reasoning, веб-чат показывает только включение и выключение рассуждений.
  • default_effort задаёт уровень, выбираемый по умолчанию при включении рассуждений.
  • default_enabled задаёт исходное состояние. Если поле не опубликовано, остальные reasoning-возможности всё равно учитываются; обязательная модель считается включённой.
  • При mandatory: true рассуждения обязательны, поэтому веб-чат не показывает возможность их выключить.

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

Ошибки и ограничения

  • 404 model_not_found означает, что модель выключена или временно недоступна.
  • GoRouter не обещает поддержку параметра, которого нет в supported_parameters модели.

На этой странице