Модели, 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модели.