Маршрутизация моделей
Когда Codex запрашивает модель, router.ts разрешает её ровно в одного настроенного провайдера.
Правила проверяются по порядку; побеждает первое совпадение.
Для OpenAI настроенный id <selector>/gpt-* через codexAccountNamespaces сопоставляется ровно
с одним сохранённым аккаунтом Codex до проверки пространств имён combo или провайдеров. Id
gpt-* без префикса вместо этого выбирают канонический провайдер openai. Его
codexAccountMode определяет Pool (по умолчанию; основной плюс добавленные аккаунты) или Direct
(bearer текущего вызывающего/основного аккаунта), не меняя id модели. openai-apikey/<model> явно
выбирает транспорт по API-ключу. Эти маршруты учётных данных не откатываются друг на друга.
Приоритет правил
Заголовок раздела «Приоритет правил»-
Точный селектор аккаунта Codex — если id имеет вид
<selector>/<native-openai-model>, а селектор настроен вcodexAccountNamespaces, запрос использует только сопоставленный сохранённый аккаунт и отправляет upstream голый id нативной модели. Если точный целевой аккаунт недоступен, запрос завершается с отказом (fail closed), не переходя к Pool, Direct или маршрутизации провайдера.side/gpt-5.6-sol → provider "openai", model "gpt-5.6-sol", account selector "side" -
Id или алиас combo — пока настроен хотя бы один combo, канонический
combo/<id>или настроенный алиас combo выбирает конкретную цель до проверки пространств имён провайдеров. Если combo не настроены, legacy physical provider с буквальным именемcomboостаётся обычным пространством имён провайдера. Выбор целей и поведение failover описаны в разделе Combo. -
Явный
provider/model— если id содержит/и часть до него совпадает с именем настроенного провайдера, используется этот провайдер, а id усекается до части после косой черты.anthropic/claude-opus-5 → provider "anthropic", model "claude-opus-5"ollama-cloud/glm-5.2 → provider "ollama-cloud", model "glm-5.2"openrouter/openai/gpt-5.6-sol → provider "openrouter", model "openai/gpt-5.6-sol"Это явная форма маршрутизируемого провайдера, и именно её селектор модели Codex использует для маршрутизируемых моделей. Если тот же публичный id настроен как алиас combo, первым срабатывает правило 2. Если указанный провайдер отключён, эта явная форма выбрасывает ошибку вместо маршрутизации.
-
Голый id нативного семейства OpenAI — id вида
gpt-*,o1-*,o3-*илиo4-*использует канонический включённый провайдерopenaiи его настроенный режим Pool или Direct. -
defaultModelпровайдера — еслиdefaultModelкакого-либо провайдера равен id, используется этот провайдер (id передаётся без изменений). -
Встроенные шаблоны префиксов — id сопоставляется с известными префиксами семейств моделей и направляется настроенному провайдеру с таким именем (или префиксом имени):
Префиксы Провайдер claude-,claude-sonnet-,claude-opus-,claude-haiku-anthropicllama-,mixtral-,gemma-groqЭтот сопоставитель работает только по имени и, в отличие от проверок
defaultModel/models[], в настоящее время не отфильтровывает совпавшего провайдера, у которого флагdisabledравен true. -
models[]провайдера — если ни одно правило префикса не сработало, а активный провайдер перечисляет id в своёмmodels[], используется этот провайдер. По правилу 4 idgpt-*без префикса отправляется каноническому включённому провайдеруopenaiдо того, как сможет сработать заявка черезmodels[]другого провайдера. -
Провайдер по умолчанию — если ничего не совпало, id отправляется в
config.defaultProviderбез изменений. (Если провайдер по умолчанию не настроен или отключён, маршрутизация выбрасывает ошибку.)
API-ключи и переменные окружения
Заголовок раздела «API-ключи и переменные окружения»Какой бы маршрут ни был выбран, apiKey провайдера разрешается через resolveEnvValue():
значение ${OPENAI_API_KEY} или $OPENAI_API_KEY разворачивается из окружения в момент
запроса, поэтому секретам вовсе не обязательно храниться в config.json.
Видимость каталога и лимиты контекста
Заголовок раздела «Видимость каталога и лимиты контекста»Маршрутизация и видимость каталога — независимые механизмы:
disabledModelsскрывает маршрутизируемые id с пространством имён из каталога Codex и/v1/models; нативный GPT-слаг без префикса остаётся в каталоге сvisibility: "hide". Прямой запрос к такой модели при этом не отклоняется.- Непустой
selectedModelsпровайдера — ещё один список разрешённых для каталога. Живое обнаружение и прямая маршрутизация продолжают работать; сужается только вывод в каталог и/v1/models. provider.disabled: trueубирает провайдера из обнаружения каталога. Явные запросыprovider/modelзавершаются ошибкой, а проверкиdefaultModel/models[]его пропускают.providerContextCapsзадаёт видимые для Codex лимиты контекста по провайдерам.contextCapValue— значение по умолчанию для дашборда (350 000); само по себе оно не применяет ограничение, пока провайдер не указан вproviderContextCaps. Изменение значения в дашборде обновляет только активные лимиты и только при включённом переключателе «применить ко всем маршрутизируемым провайдерам»; иначе каждый провайдер сохраняет свой лимит. Обычные известные окна можно только уменьшать; нативные модели с поддержкой длинного контекста могут расширять окно до собственного поддерживаемого предела. Фактический предел вышестоящей модели не меняется. При отключении лимита выбор сохраняется вproviderContextCapValues, в том числе после перезагрузки. Повторное включение восстанавливает выбор. Сохранённое значение не ограничивает окно, пока лимит отключён.{ "setAll": true }безvalueвключает лимиты всех настроенных провайдеров с текущим глобальным значением и заменяет их сохранённые значения.
{ "contextCapValue": 350000, "providerContextCaps": { "anthropic": 350000, "cursor": 350000 }}- Чтобы явно выбрать аккаунт Codex, используйте
<selector>/<native-openai-model>(правило 1). Этот маршрут точный и fail closed: он никогда незаметно не переключается на другой аккаунт. - Для маршрутизируемых моделей указывайте маршрут явно. Если точный публичный id не является
алиасом combo, предпочитайте
provider/model(правило 3). Эта форма прямо называет провайдера и совпадает с тем, что Codex показывает в селекторе после синхронизации каталога. - Заполните
models[]илиdefaultModelу провайдера, чтобы короткие id (правила 5/7) разрешались без префиксаprovider/. - Шаблоны префиксов — это удобство, а не гарантия: они срабатывают, только если провайдер с
таким именем (например,
anthropicилиgroq) действительно настроен.
Поля провайдера, которые читают эти правила, описаны в разделе Конфигурация.

