diff --git a/docs-site/src/content/docs/fr/guides/codex-app-models.md b/docs-site/src/content/docs/fr/guides/codex-app-models.md index 2c782dffe0..dbed813c87 100644 --- a/docs-site/src/content/docs/fr/guides/codex-app-models.md +++ b/docs-site/src/content/docs/fr/guides/codex-app-models.md @@ -187,7 +187,7 @@ Sur le réseau, les adaptateurs routés convertissent ou plafonnent les niveaux anciens modèles natifs dont l'échelle réelle s'arrête à `xhigh`, `nativeEffortClamp` convertit une sélection directe `max` ou `ultra` en `xhigh` (GPT-5.5, par exemple). Sol, Terra et Luna possèdent un véritable niveau `max`. -## Règles du niveau rapide +## Règles des niveaux Fast et Ultrafast Codex enregistre le mode rapide ainsi : @@ -199,8 +199,16 @@ fast_mode = true ``` Toutefois, le catalogue de modèles et l'identifiant du niveau employé dans la requête d'exécution utilisent -`priority`. opencodex préserve cette distinction. Les modèles OpenAI natifs transférés conservent la prise en -charge du mode rapide ; les fournisseurs routés sont conditionnés par leurs capacités. `service_tier` n'est +`priority`. opencodex préserve cette distinction. Les catalogues Codex actuels exposent aussi le niveau +Ultrafast contrôlé par accès sous la forme `service_tier = "ultrafast"`. Le fallback intégré ne l'annonce que +pour `gpt-5.6-sol` ; une ligne `gpt-daybreak-blue-latest` autorisée hérite des capacités de Sol. Terra et Luna +conservent Fast sans recevoir Ultrafast. La source Codex épinglée conserve intentionnellement +`additional_speed_tiers` à `["fast"]` : Ultrafast appartient à `service_tiers`. Laissez le réglage Fast +global d'opencodex sur Auto pour préserver un `ultrafast` choisi par le modèle ; forcer Fast sélectionne +`priority` à la place. + +Les modèles OpenAI natifs transférés conservent leurs niveaux de vitesse déclarés ; les fournisseurs routés +sont conditionnés par leurs capacités. `service_tier` n'est retiré que si le fournisseur déclare `supportsServiceTier: false` (le registre classe OpenAI canonique comme `true`, et DeepSeek ainsi que Volcengine Ark comme `false`). Les passerelles personnalisées non classées conservent intactes les valeurs transmises par l'appelant et ne reçoivent jamais d'injection. Une passerelle @@ -208,7 +216,7 @@ personnalisée peut l’activer globalement avec `supportsServiceTier: true`, ou modèles avec `modelSupportsServiceTier: { "verified-model": true }`. Une valeur exacte `false` restreint une valeur globale `true`, tandis que `supportsServiceTier: false` reste fermé par défaut. La décision finale de l’adaptateur et du modèle régit à la fois les métadonnées du catalogue et l’injection à l’exécution ; -l’option rapide n’est donc jamais annoncée lorsqu’elle ne peut être respectée. Une destination +une option de vitesse n’est donc jamais annoncée lorsqu’elle ne peut être respectée. Une destination `openai-chat` peut autoriser tous les modèles autrement admissibles avec `chatServiceTier: true`, ou uniquement des modèles précis avec `modelSupportsServiceTier` ; les routes Responses n’ont pas besoin de cette autorisation supplémentaire sur le protocole Chat. diff --git a/docs-site/src/content/docs/guides/codex-app-models.md b/docs-site/src/content/docs/guides/codex-app-models.md index c84f8f6407..2699125062 100644 --- a/docs-site/src/content/docs/guides/codex-app-models.md +++ b/docs-site/src/content/docs/guides/codex-app-models.md @@ -225,9 +225,9 @@ On the wire, routed adapters map or clamp unsupported tiers. For older native mo ladder stops at `xhigh`, `nativeEffortClamp` maps a direct `max` or an `ultra` selection to `xhigh` (for example, GPT-5.5). Sol, Terra, and Luna have a real `max` rung. -## Fast tier rules +## Fast and Ultrafast tier rules -Codex stores fast mode as: +Codex stores Fast mode as: ```toml service_tier = "fast" @@ -236,15 +236,22 @@ service_tier = "fast" fast_mode = true ``` -But the model catalog and runtime request tier id use `priority`. opencodex preserves that split. -Native OpenAI passthrough models keep fast support; routed providers are capability-gated — +The model catalog and runtime request tier id use `priority`, and opencodex preserves that split. +Current Codex catalogs also expose access-controlled Ultrafast as model-owned +`service_tier = "ultrafast"`. The pinned fallback advertises it only on `gpt-5.6-sol`; an entitled +`gpt-daybreak-blue-latest` row inherits Sol's capability metadata. Terra and Luna retain Fast but do +not gain Ultrafast. The pinned Codex source intentionally leaves `additional_speed_tiers` at +`["fast"]`: Ultrafast lives in `service_tiers`. Leave opencodex's global Fast setting on Auto to +preserve a model-selected `ultrafast`; forcing Fast explicitly selects `priority` instead. + +Native OpenAI passthrough models keep their declared speed tiers; routed providers are capability-gated — `service_tier` is stripped only when the provider declares `supportsServiceTier: false` (the registry classifies canonical OpenAI as `true`, DeepSeek and Volcengine Ark as `false`), while unclassified custom gateways keep caller-supplied values untouched and never get an injection. A custom gateway can opt in globally with `supportsServiceTier: true`, or narrowly with `modelSupportsServiceTier: { "verified-model": true }`; an exact `false` narrows a provider default of `true`, while provider-level `false` remains fail-closed. The same final adapter/model -decision controls both catalog metadata and runtime injection, so the fast option is never +decision controls both catalog metadata and runtime injection, so a speed option is never advertised where it cannot be honored. An `openai-chat` destination can authorize every otherwise eligible model with `chatServiceTier: true`, or authorize only exact models with `modelSupportsServiceTier`; Responses routes do not need that extra Chat wire authorization. diff --git a/docs-site/src/content/docs/ja/guides/codex-app-models.md b/docs-site/src/content/docs/ja/guides/codex-app-models.md index f654b183d0..cd482282e5 100644 --- a/docs-site/src/content/docs/ja/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ja/guides/codex-app-models.md @@ -89,7 +89,7 @@ exact selector 行が表示されず、切り替えることもできません 回線上では、ルーティングされたアダプターがサポートされていない層をマップまたはクランプします。実際のラダーが `xhigh` で停止する古いネイティブ モデルの場合、`nativeEffortClamp` は直接 `max` または `ultra` 選択を `xhigh` にマップします (GPT-5.5 など)。ソル、テラ、ルナは本物の `max` ラングを持っています。 -## 高速層のルール +## Fast / Ultrafast 層のルール Codex は高速モードを次のように保存します。 @@ -100,7 +100,9 @@ service_tier = "fast" fast_mode = true ``` -ただし、モデル カタログとランタイム リクエスト層 ID は `priority` を使用します。opencodex はその分割を保持します。ネイティブ OpenAI パススルー モデルは高速サポートを維持します。ルーティングされたプロバイダーはケイパビリティでゲートされ、`supportsServiceTier: false` と宣言された場合のみ `service_tier` が削除されます (レジストリは正規 OpenAI を `true`、DeepSeek と Volcengine Ark を `false` に分類します)。未分類のカスタム ゲートウェイは呼び出し元の値をそのまま保持し、注入もされません。そのため、受け入れられない場所で高速オプションがアドバタイズされることはなく、カスタム ゲートウェイは `true` で明示的にオプトインできます。 +ただし、モデル カタログとランタイム リクエスト層 ID は `priority` を使用します。opencodex はその分割を保持します。現在の Codex カタログは、アクセス制御された Ultrafast も `service_tier = "ultrafast"` として公開します。組み込み fallback がこれを公開するのは `gpt-5.6-sol` だけで、利用資格のある `gpt-daybreak-blue-latest` 行は Sol の能力を継承します。Terra と Luna は Fast のみを維持し、Ultrafast は追加されません。固定した Codex ソースでは `additional_speed_tiers` を意図的に `["fast"]` のままにし、Ultrafast は `service_tiers` だけで表します。モデルで選んだ `ultrafast` を維持するには opencodex のグローバル Fast 設定を Auto のままにしてください。Fast を強制すると、代わりに `priority` が選択されます。 + +ネイティブ OpenAI パススルー モデルは宣言済みの速度層を維持します。ルーティングされたプロバイダーはケイパビリティでゲートされ、`supportsServiceTier: false` と宣言された場合のみ `service_tier` が削除されます (レジストリは正規 OpenAI を `true`、DeepSeek と Volcengine Ark を `false` に分類します)。未分類のカスタム ゲートウェイは呼び出し元の値をそのまま保持し、注入もされません。そのため、受け入れられない場所で速度オプションがアドバタイズされることはなく、カスタム ゲートウェイは `true` で明示的にオプトインできます。 ## サブエージェントの選択 diff --git a/docs-site/src/content/docs/ko/guides/codex-app-models.md b/docs-site/src/content/docs/ko/guides/codex-app-models.md index e114ab2b01..022c09cca3 100644 --- a/docs-site/src/content/docs/ko/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ko/guides/codex-app-models.md @@ -156,7 +156,7 @@ wire에서는 라우팅 어댑터가 지원하지 않는 tier를 매핑하거나 이전 네이티브 모델에서는 `nativeEffortClamp`가 직접 지정한 `max` 또는 `ultra` 선택을 `xhigh`로 바꿉니다. 예를 들면 GPT-5.5가 그렇습니다. Sol, Terra, Luna에는 실제 `max` 단계가 있습니다. -## Fast tier 규칙 +## Fast 및 Ultrafast tier 규칙 Codex는 fast 모드를 다음처럼 저장합니다. @@ -168,10 +168,18 @@ fast_mode = true ``` 하지만 모델 카탈로그와 런타임 요청 tier id는 `priority`를 씁니다. opencodex는 이 분리를 그대로 -유지합니다. 네이티브 OpenAI passthrough 모델은 fast 지원을 유지하고, 라우팅된 프로바이더는 +유지합니다. 최신 Codex 카탈로그는 접근 권한이 필요한 Ultrafast도 +`service_tier = "ultrafast"`로 노출합니다. 내장 fallback은 `gpt-5.6-sol`에만 이를 광고하며, +권한이 확인된 `gpt-daybreak-blue-latest` 행은 Sol의 케이퍼빌리티를 상속합니다. Terra와 Luna는 +Fast만 유지하고 Ultrafast를 추가하지 않습니다. 고정된 Codex 원본은 `additional_speed_tiers`를 +의도적으로 `["fast"]`로 유지하며, Ultrafast는 `service_tiers`에만 표시합니다. 모델에서 고른 +`ultrafast`를 보존하려면 opencodex의 전역 Fast 설정을 Auto로 두어야 합니다. Fast를 강제로 +켜면 대신 `priority`가 선택됩니다. + +네이티브 OpenAI passthrough 모델은 선언된 속도 tier를 유지하고, 라우팅된 프로바이더는 케이퍼빌리티로 게이트되어 프로바이더가 `supportsServiceTier: false`를 선언한 경우에만 `service_tier`가 제거됩니다(레지스트리가 정식 OpenAI를 `true`, DeepSeek과 Volcengine Ark를 `false`로 분류). 미분류 커스텀 게이트웨이는 호출자가 준 값을 그대로 보존하고 주입도 받지 않습니다. 따라서 -처리 불가능한 곳에 fast 옵션이 노출되지 않으며, 커스텀 게이트웨이는 `true`로 명시적으로 옵트인할 수 있습니다. +처리 불가능한 곳에 속도 옵션이 노출되지 않으며, 커스텀 게이트웨이는 `true`로 명시적으로 옵트인할 수 있습니다. ## 서브에이전트 선택 diff --git a/docs-site/src/content/docs/ru/guides/codex-app-models.md b/docs-site/src/content/docs/ru/guides/codex-app-models.md index f7c7f6a2a0..68d0f9f352 100644 --- a/docs-site/src/content/docs/ru/guides/codex-app-models.md +++ b/docs-site/src/content/docs/ru/guides/codex-app-models.md @@ -137,7 +137,7 @@ routed provider-id `provider/model`. Account-qualified id `/ { expect(sol?.description).toBe("Latest frontier agentic coding model."); expect(sol?.availability_nux).toBeDefined(); + // Codex 0.151 exposes model-owned service tiers. Ultrafast is currently Sol-only; + // Terra and Luna keep the existing Fast row and must not inherit the new tier. + expect(sol?.service_tiers).toEqual([ + { id: "priority", name: "Fast", description: "1.5x speed, increased usage" }, + { + id: "ultrafast", + name: "Ultrafast", + description: "The fastest available responses for latency-sensitive work.", + }, + ]); + expect(terra?.service_tiers).toEqual([ + { id: "priority", name: "Fast", description: "1.5x speed, increased usage" }, + ]); + expect(luna?.service_tiers).toEqual([ + { id: "priority", name: "Fast", description: "1.5x speed, increased usage" }, + ]); + // Per-slug multi-agent generation: sol/terra v2, luna v1. expect(sol?.multi_agent_version).toBe("v2"); expect(terra?.multi_agent_version).toBe("v2"); @@ -2914,6 +2931,12 @@ describe("Codex catalog routed normalization", () => { supports_search_tool: true, multi_agent_version: "v2", }); + expect(source?.service_tiers).toEqual(upstreamNativeEntry("gpt-5.6-sol")?.service_tiers); + expect(source?.service_tiers).toContainEqual({ + id: "ultrafast", + name: "Ultrafast", + description: "The fastest available responses for latency-sensitive work.", + }); expect(source).not.toHaveProperty("availability_nux"); expect(source?.base_instructions).toContain("powered by the gpt-daybreak-blue-latest"); expect(source?.base_instructions).not.toContain("based on GPT-5"); diff --git a/tests/service-tier-capability.test.ts b/tests/service-tier-capability.test.ts index fd1a418602..138e8fd33b 100644 --- a/tests/service-tier-capability.test.ts +++ b/tests/service-tier-capability.test.ts @@ -419,10 +419,18 @@ describe("the gate fires on the live handleResponses path", () => { expect("service_tier" in off).toBe(false); }); - test("canonical OpenAI preserves a caller value when fastMode is unset", async () => { - const body = await drive("openai-apikey", openAiKeyProvider(), "gpt-5.5", { service_tier: "flex" }); - expect(body.service_tier).toBe("flex"); - }); + test.each(["flex", "ultrafast"])( + "canonical OpenAI preserves caller service_tier=%s when fastMode is unset", + async serviceTier => { + const body = await drive( + "openai-apikey", + openAiKeyProvider(), + "gpt-5.6-sol", + { service_tier: serviceTier }, + ); + expect(body.service_tier).toBe(serviceTier); + }, + ); test("xAI API-key runtime injects priority while OAuth does not", async () => { const keyBody = await drive("xai", xaiKeyProvider(), "grok-4.6", {}, true);