Модели OpenRouter (группа op)
Группа op открывает чат-модели из каталога OpenRouter. Название модели — op/<автор>/<модель>, например op/openai/gpt-4o-mini. Запрос и ответ как у OpenAI: POST /v1/chat/completions (см. раздел Чат).
Тело запроса уходит в OpenRouter как есть, поэтому параметры модели описаны в документации OpenRouter: Parameters и Provider routing. Здесь написано только то, что отличается у нас: как найти модель и провайдера, что поддерживается и что нет.
Как найти модель
GET /v1/modelsвозвращает все продаваемые модели с ценами в кредитах. Модели OpenRouter начинаются сop/.- Названия те же, что на openrouter.ai/models. Нужно добавить только префикс
op/. - Бесплатные варианты (
…:free) тоже продаются, но только при положительном API-балансе: см. Чат. - Суффикс работает только там, где такой вариант есть в каталоге отдельной записью (как у
:free). Суффиксы-ярлыки OpenRouter:nitro,:floorи:onlineне работают: ответ404 model_not_found.:nitroи:floorзаменяет полеprovider.sort, ниже.
Провайдеры модели: список и цены
Одну модель обычно запускают несколько провайдеров, у них разные цена, точность вычислений и скорость. Список с ценами в кредитах:
curl https://api.6io.io/v1/models/op/meta-llama/llama-3.3-70b-instruct/providers \
-H "Authorization: Bearer sixio_sk_..."Ответ (сокращённо):
{
"id": "op/meta-llama/llama-3.3-70b-instruct",
"name": "Meta: Llama 3.3 70B Instruct",
"context": 131072,
"pricing": {"currency": "credits", "prompt_per_million": "9.480000000000", "completion_per_million": "30.810000000000", "request": "0.000000000000"},
"providers": [
{
"name": "DeepInfra",
"tag": "deepinfra/turbo",
"quantization": "fp8",
"context": 131072,
"max_output": 16384,
"uptime_30m": 99.8,
"default": true,
"pricing": {"currency": "credits", "prompt_per_million": "9.480000000000", "completion_per_million": "30.810000000000", "request": "0.000000000000"}
}
]
}- Провайдеры идут по возрастанию цены.
default: trueу того, к кому запрос уйдёт первым, если вы не выбирали провайдера. tag— то, что подставляется вprovider.order,onlyиignore. Короткое имя (deepinfra) подходит ко всем вариантам провайдера (deepinfra/turbo).quantization— точность вычислений (fp8,fp16,bf16,int4…),uptime_30m— доступность за 30 минут в процентах.- Это работает только для
op/. Уvn/списка провайдеров нет: Venice сама запускает свои модели.
То же видно в консоли: вкладка «Модели», нажмите на модель.
Как выбрать провайдера
Без выбора запрос уходит самому дешёвому провайдеру с точностью fp8 или выше (fp8, mxfp8, fp16, bf16, fp32), а при его сбое следующему по цене. У закрытых моделей точность не указывается, для них фильтра нет.
Свой выбор задаёт поле provider в теле запроса, формат OpenRouter:
{
"model": "op/meta-llama/llama-3.3-70b-instruct",
"messages": [{"role": "user", "content": "Привет"}],
"provider": {"order": ["novita", "deepinfra"], "allow_fallbacks": false}
}Поле provider |
Что делает |
|---|---|
order |
каких провайдеров пробовать и в каком порядке |
only |
только этих провайдеров |
ignore |
всех, кроме этих |
allow_fallbacks |
false — не переходить к другим провайдерам, если выбранные недоступны |
quantizations |
допустимая точность: int4, int8, fp4, fp6, fp8, fp16, bf16, fp32, unknown и другие из документации OpenRouter |
sort |
порядок выбора: price, throughput или latency (подробнее ниже) |
require_parameters |
true — только провайдеры, которые понимают все параметры запроса |
data_collection |
deny — только провайдеры, которые не сохраняют данные |
zdr |
true — только провайдеры с нулевым хранением данных |
max_price |
потолок цены (prompt, completion, request, image); в единицах и долларах OpenRouter, а не в кредитах, см. их документацию |
preferred_min_throughput, preferred_max_latency |
предпочтительная скорость и задержка (мягкое условие) |
Как мы обрабатываем provider:
- Если вы не задали
sortилиorder, мы добавляемsort: "price". - Если вы не задали
quantizations,onlyиorder, мы добавляем фильтр точности fp8 и выше (только когда у модели есть такой провайдер). - Всё остальное передаётся как есть.
- Резерв считается по ценам провайдера, к которому запрос уйдёт первым. Если он заранее не известен (например, задан
order), берётся наибольшая цена среди подходящих провайдеров. Списывается всегда фактическая стоимость.
Примеры:
{"provider": {"sort": "throughput"}}
{"provider": {"sort": "latency"}}
{"provider": {"only": ["deepinfra"], "allow_fallbacks": false}}
{"provider": {"quantizations": ["fp16", "bf16"]}}
{"provider": {"ignore": ["novita"]}}Сортировка
"sort": "price"— самый дешёвый провайдер (у нас это уже по умолчанию). В OpenRouter то же делает суффикс:floor."sort": "throughput"— самый быстрый по числу токенов в секунду. В OpenRouter то же делает суффикс:nitro."sort": "latency"— с наименьшей задержкой до первого токена.- Объектная форма
{"sort": {"by": "throughput", "partition": "none"}}тоже принимается:partitionуправляет тем, сортируются ли провайдеры внутри каждой модели или все вместе. Она нужна только когда моделей несколько, а полеmodelsу нас не поддерживается, так что обычно хватает строки.
Плагины и веб-поиск
Пока не поддерживаются. Такие запросы отклоняются до списания с ответом 400 unsupported_parameter:
- поле
plugins(веб-поиск{"id": "web"}, разбор PDF и другие плагины OpenRouter); - поле
web_search_options(суффикс модели:onlineдаёт404 model_not_found); - серверные инструменты OpenRouter в
tools: типыopenrouter:…; - поле
models(список запасных моделей) иpreset.
Причина в деньгах. Веб-поиск и плагины стоят отдельно от токенов (по документации OpenRouter, у поиска Exa сейчас $0,007 за запрос плюс $0,001 за каждый результат сверх десяти), и эта сумма не входит в резерв. Пока мы её не учитываем, принимать такие запросы нельзя.
Что можно сделать сейчас:
- искать в интернете самим и класть найденный текст в
messages; - использовать обычный вызов функций (
toolsс типомfunction): он работает как у OpenAI; - вместо
modelsотправить запрос сprovider.orderиallow_fallbacks, а при ошибке повторить его с другой моделью в своём коде.
Что работает как у OpenRouter
Остальные параметры запроса уходят как есть: temperature, top_p, max_tokens, stop, tools и tool_choice, response_format (структурированный вывод), reasoning и другие. Какие из них понимает конкретная модель и провайдер, показывает GET https://openrouter.ai/api/v1/models/<автор>/<модель>/endpoints (поле supported_parameters) или страница модели на openrouter.ai.
Деньги
Цена в кредитах считается от стоимости у поставщика (usage.cost в ответе), см. Баланс и цены. Бесплатные модели и ошибки провайдеров описаны в разделах Чат и Повторы и сбои.