Перейти к основному содержимому

Выбор провайдера

Одну и ту же модель обслуживают несколько провайдеров. Они отличаются ценой, скоростью, набором поддерживаемых параметров и тем, что делают с вашими данными. Поле provider позволяет задать правила выбора самому, а не полагаться на умолчание.

Требовать поддержку всех параметров​

Главное правило для агентов. Без него параметр, который провайдер не умеет, будет молча проигнорирован:

{
"model": "openrouter/anthropic/claude-opus-5",
"messages": [{"role": "user", "content": "..."}],
"response_format": {"type": "json_schema", "json_schema": {"name": "x", "strict": true, "schema": {}}},
"provider": {"require_parameters": true}
}

Если подходящего провайдера нет, придёт 404 с текстом No endpoints found that can handle the requested parameters — явный отказ вместо ответа не в том формате.

Запретить сбор данных​

{"provider": {"data_collection": "deny"}}

Запрос уйдёт только тем провайдерам, которые не сохраняют содержимое для обучения. Отдельно есть режим нулевого хранения:

{"provider": {"zdr": true}}

Со своей стороны мы тела запросов и ответов не храним: в журнале остаются только модель, количество токенов и стоимость. Что делает провайдер на том конце — регулируется этими флагами.

Порядок и запрет подмены​

{
"provider": {
"order": ["anthropic", "google-vertex"],
"allow_fallbacks": false
}
}

order задаёт очередь, allow_fallbacks: false запрещает уходить к тем, кого нет в списке. Без этого при недоступности первого провайдера запрос уйдёт к любому другому — обычно это хорошо, но если у вас договор о хранении данных или требования к региону, лучше запретить.

Ограничить конкретными провайдерами​

{"provider": {"only": ["anthropic"]}}

Если указать несуществующего, ошибка содержит список реально доступных — удобно для отладки:

{
"error": {
"code": 404,
"metadata": {
"available_providers": ["novita"],
"requested_providers": ["definitely-not-a-real-provider"]
}
}
}

Сколько это стоило на самом деле​

Ответ содержит фактическую стоимость запроса и стоимость у провайдера:

{
"usage": {
"prompt_tokens": 2252,
"completion_tokens": 7,
"cost": 0.002287,
"cost_details": {"upstream_inference_cost": 0.002287}
}
}

Эти два числа совпадают: за токены мы наценку не берём. Чтобы получать блок usage в потоковом режиме, передайте "stream_options": {"include_usage": true}.

Что дальше​