Маршрутизация моделей
Когда Codex запрашивает модель, router.ts разрешает её ровно в одного настроенного провайдера.
Правила проверяются по порядку; побеждает первое совпадение.
Для OpenAI id gpt-* без префикса выбирают один провайдер openai. Его codexAccountMode
определяет Pool (по умолчанию; основной плюс добавленные аккаунты) или Direct (bearer текущего
вызывающего/основного аккаунта), не меняя id модели. openai-apikey/<model> явно выбирает
транспорт по API-ключу. Эти два маршрута учётных данных не откатываются друг на друга.
Приоритет правил
Заголовок раздела «Приоритет правил»-
Явный
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 использует для маршрутизируемых моделей. Если указанный провайдер отключён, эта явная форма выбрасывает ошибку вместо маршрутизации.
-
defaultModelпровайдера — еслиdefaultModelкакого-либо провайдера равен id, используется этот провайдер (id передаётся без изменений). -
Встроенные шаблоны префиксов — id сопоставляется с известными префиксами семейств моделей и направляется настроенному провайдеру с таким именем (или префиксом имени):
Префиксы Провайдер claude-,claude-sonnet-,claude-opus-,claude-haiku-anthropicgpt-,o1-,o3-,o4-id без префикса используют настроенный режим аккаунта openai; для транспорта по API-ключу используйтеopenai-apikey/llama-,mixtral-,gemma-groqЭтот сопоставитель работает только по имени и, в отличие от проверок
defaultModel/models[], в настоящее время не отфильтровывает совпавшего провайдера, у которого флагdisabledравен true. -
models[]провайдера — если ни одно правило префикса не сработало, а активный провайдер перечисляет id в своёмmodels[], используется этот провайдер. Порядок здесь важен: когда настроен провайдер с именем OpenAI, idgpt-*без префикса попадёт к нему раньше, чем сработает заявка через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. Лимиты только понижают известное контекстное окно; они никогда не повышают его и не меняют фактический предел вышестоящей модели.
{ "contextCapValue": 350000, "providerContextCaps": { "anthropic": 350000, "cursor": 350000 }}- Для маршрутизируемых моделей указывайте маршрут явно. Предпочитайте
provider/model(правило 1) — эта форма однозначна и совпадает с тем, что Codex показывает в селекторе после синхронизации каталога. - Заполните
models[]илиdefaultModelу провайдера, чтобы короткие id (правила 2/4) разрешались без префиксаprovider/. - Шаблоны префиксов — это удобство, а не гарантия: они срабатывают, только если провайдер с
таким именем (например,
anthropic,openai,groq) действительно настроен.
Поля провайдера, которые читают эти правила, описаны в разделе Конфигурация.

