モデルルーティング
Codex がモデルを要求すると router.ts がこれを正確に一つの設定されたプロバイダーに解釈します。ルールは
順番に検査され、最初に一致したものが適用されます。
OpenAI では、設定済みの <selector>/gpt-* ID は、combo や provider の namespace より先に
codexAccountNamespaces を通じて 1 つの保存済み Codex アカウントに対応付けられます。bare
gpt-* ID は代わりに canonical openai provider を選択します。その codexAccountMode が
Pool(デフォルト、メイン + 追加アカウント)または Direct(現在の caller/メイン bearer)を決め、
model ID は変更しません。openai-apikey/<model> は API key transport を明示的に選択します。
これらの credential route は相互にフォールバックしません。
-
Codex account の exact selector — ID が
<selector>/<native-openai-model>で、その selector がcodexAccountNamespacesに設定されている場合、request は対応する保存済み account だけを使用し、bare native model を upstream に送ります。exact target が利用不能なら、Pool、 Direct、provider routing の次の規則へ進まず fail closed します。side/gpt-5.6-sol → provider "openai", model "gpt-5.6-sol", account selector "side" -
Combo ID または alias — 1 つ以上の combo が設定されている間は、canonical
combo/<id>または設定済み combo alias が provider namespace より先に concrete target を選択します。 combo が 1 つも設定されていない場合、文字どおりcomboという名前の legacy physical provider は通常の provider namespace として残ります。target selection と failover の動作は Combosを参照してください。 -
明示的
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"これは routed provider を明示する形式で、Codex のモデルピッカーがルーティングモデルに使う 形式です。同じ public ID が設定済み combo alias でもある場合はルール 2 が優先されます。指定した provider が無効の場合はルーティングせずエラーになります。
-
Bare native OpenAI-family ID —
gpt-*、o1-*、o3-*、o4-*などの ID は、canonical かつ有効なopenaiprovider と、その Pool または Direct account mode を使用します。 -
プロバイダーの
defaultModel— いずれかのプロバイダーのdefaultModelが ID と一致すればそのプロバイダーが 使われます(ID は変更なくそのまま渡されます)。 -
組み込みプレフィックスパターン — ID を既知のモデルファミリプレフィックスと照合し、該当名(または名前 プレフィックス)の設定されたプロバイダーにルーティングします:
プレフィックス プロバイダー claude-、claude-sonnet-、claude-opus-、claude-haiku-anthropicllama-、mixtral-、gemma-groqこの検査は名前のみを見ます。
defaultModel/models[]検査と異なり、現在は名前が一致したプロバイダーのdisabled値が true でもスキップしません。 -
プロバイダーの
models[]— プレフィックスルールに一致せず、有効なプロバイダーのmodels[]に ID が あればそのプロバイダーを使います。ルール 4 により、baregpt-*ID は別の provider のmodels[]が一致する前に canonical かつ有効なopenaiprovider に送られます。 -
デフォルトプロバイダー — いずれも一致しなければ ID は変更なく
config.defaultProviderに送信されます。 (デフォルトプロバイダーがない、または無効の場合はエラーになります。)
API キーと環境変数
Section titled “API キーと環境変数”どの経路が選ばれても、プロバイダーの apiKey は resolveEnvValue() で解釈されます:
${OPENAI_API_KEY} または $OPENAI_API_KEY の値はリクエスト時に環境から展開されるため、秘密値を
config.json に置く必要はまったくありません。
カタログ表示とコンテキスト制限
Section titled “カタログ表示とコンテキスト制限”リクエストルーティングとカタログ公開は異なる設定です。
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に 保存され、再読み込み後も残ります。再び有効にすると選択値を復元します。無効な間は保存値を制限として 適用しません。valueなしの{ "setAll": true }は、設定済みの全プロバイダーの上限を現在の グローバル値で有効にし、保存された選択値も置き換えます。
{ "contextCapValue": 350000, "providerContextCaps": { "anthropic": 350000, "cursor": 350000 }}- Codex account を明示的に指定するには
<selector>/<native-openai-model>(ルール 1)を 使用します。この route は exact かつ fail closed であり、別の account に暗黙に切り替わりません。 - ルーティングモデルは明示的に書いてください。 exact public ID が combo alias でない場合は
provider/model(ルール 3)を推奨します。provider を直接指定し、catalog 同期後に Codex が picker に表示するものと一致します。 - プロバイダーに
models[]またはdefaultModelを事前入力しておくと、短い ID(ルール 5/7)がprovider/プレフィックスなしで解釈されます。 - プレフィックスパターンは便利機能であり保証ではありません: 該当名(例:
anthropic、groq)の プロバイダーが実際に設定されているときのみ解釈されます。
これらのルールが読むプロバイダーフィールドは設定を参照してください。

