Конфигурация маршрутизации
Маршрутизация преобразует id модели, отправленный клиентом, в конкретного провайдера и модель upstream.
Поля маршрутизации верхнего уровня
Заголовок раздела «Поля маршрутизации верхнего уровня»| Поле | Тип | По умолчанию | Значение |
|---|---|---|---|
defaultProvider |
string |
"openai" |
Последний провайдер, используемый, если ни одно более раннее правило модели не совпало. Должен называть включённого настроенного провайдера. |
combos? |
Record<string, OcxComboConfig> |
{} |
Виртуальные модели combo/<id>, построенные из упорядоченных целей provider/model. |
Порядок разрешения модели
Заголовок раздела «Порядок разрешения модели»opencodex разрешает запрошенную модель в следующем порядке:
- Канонический
combo/<id>или настроенный алиас combo. Канонические id проверяются до алиасов. - Явное пространство имён
<provider>/<model>, где префикс называет настроенного провайдера. - Голый id нативного семейства OpenAI, например
gpt-*,o1-*,o3-*илиo4-*, направляемый через канонического включённого провайдераopenai. - Точное совпадение с
defaultModelпровайдера. - Известный префикс семейства моделей провайдера.
- Точное совпадение с моделью в настроенном списке
modelsпровайдера. defaultProviderс сохранением запрошенного id модели.
Отключённые провайдеры исключаются. Явное пространство имён отключённого провайдера завершается ошибкой, а не переходит к следующим правилам. Для правил, которые могут совпасть с несколькими провайдерами, записи проверяются в порядке их добавления в JSON. Поэтому используйте явные пространства имён, если голая модель может быть неоднозначной.
Combo (config.combos)
Заголовок раздела «Combo (config.combos)»Каждый ключ combo — это id, соответствующий шаблону [A-Za-z0-9][A-Za-z0-9._-]{0,63}. Он всегда
доступен напрямую как combo/<id> и может также предоставлять один alias. Алиасы должны быть
уникальны, не могут занимать пространство имён combo/ и не могут использовать зарезервированные
голые нативные семейства, например gpt-*, o1-*, o3-*, o4-* или codex-*.
| Ключ | Тип | По умолчанию | Значение |
|---|---|---|---|
targets |
{ provider: string; model: string; weight?: number }[] |
required | Упорядоченные конкретные маршруты. weight находится в диапазоне 1–10000 и по умолчанию равен 1. |
strategy? |
"failover" | "round-robin" |
"failover" |
Стратегия выбора. Порядок целей задаёт приоритет failover; веса формируют плавный взвешенный round-robin. |
stickyLimit? |
number |
1 |
Число успешных запросов, удерживаемых в одной партии round-robin. Диапазон 1–100. |
defaultEffort? |
"low" | "medium" | "high" | "xhigh" | "max" | "ultra" | null |
unset | Применяется, только если вызывающая сторона не задала effort, а выбранная цель объявляет эту ступень. |
alias? |
string |
— | Необязательный публичный id модели вместо канонического slug в селекторе. |
{ "defaultProvider": "openai", "combos": { "coding": { "targets": [ { "provider": "anthropic", "model": "claude-sonnet-5" }, { "provider": "openrouter", "model": "qwen/qwen3-coder-plus" } ], "strategy": "failover", "defaultEffort": "high", "alias": "coding-primary" } }}Поведение стратегий, повторяемые ошибки, cooldown, ограничения шифрованных задач v2 и команды управления описаны в разделе Combos.
Допустимость в каталоге
Заголовок раздела «Допустимость в каталоге»Combo остаётся доступной для прямой маршрутизации, даже если её нельзя вывести в списке. ocx sync,
/v1/models и селектор Codex показывают её, только когда у каждой цели есть возможности, которые
можно пересечь:
- положительный
contextWindow, полученный из live-метаданных, подсказок registry или полей провайдераmodelContextWindows/contextWindow; и - непустое пересечение
inputModalities, при этом отсутствие значения у участника трактуется как["text"].
Голый id relay без метаданных контекста или цели с непересекающимися модальностями исключают combo из каталога. Sync выводит итоговое предупреждение, а дашборд помечает её как Needs attention. Добавьте метаданные контекста, согласуйте модальности или выберите модели с обнаруживаемыми совместимыми возможностями.

