Skip to content

Commit e0487c0

Browse files
committed
fix(responses): gate service tiers by provider capability
1 parent aae9426 commit e0487c0

17 files changed

Lines changed: 169 additions & 18 deletions

File tree

docs-site/src/content/docs/guides/codex-app-models.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,10 @@ fast_mode = true
166166
```
167167

168168
But the model catalog and runtime request tier id use `priority`. opencodex preserves that split.
169-
Native OpenAI passthrough models keep fast support; routed non-OpenAI models strip service-tier
170-
metadata so the fast option is not advertised where it cannot be honored.
169+
Native OpenAI passthrough models keep fast support. Responses providers only receive proxy-generated
170+
OpenAI-specific `service_tier` when their registry capability allows it; an omitted capability keeps
171+
caller-supplied values for compatibility but does not inject fastMode. DeepSeek V4 Flash's native
172+
Responses route is explicitly marked unsupported, so the field stays out of its upstream request.
171173

172174
## Subagent selection
173175

docs-site/src/content/docs/ja/guides/codex-app-models.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ fast_mode = true
141141
```
142142

143143
一方モデルカタログとランタイムリクエストの tier ID は `priority` です。opencodex はこの差を維持します。
144-
ネイティブ OpenAI パススルーモデルは fast サポートを保存し、ルーティングされた非 OpenAI モデルでは service-tier
145-
メタデータを消して処理できない fast オプションが表示されないようにします。
144+
ネイティブ OpenAI パススルーモデルは fast をサポートします。Responses provider は registry capability が許可する場合だけ
145+
proxy が生成した OpenAI 固有の `service_tier` を受け取ります。未設定なら呼び出し側の値は互換性のため維持しますが、
146+
fastMode は注入しません。DeepSeek V4 Flash は未対応として明示されるため、ネイティブ Responses ルートは上流へ送りません。
146147

147148
## サブエージェントの選択
148149

docs-site/src/content/docs/ja/reference/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ timing side channel を防ぐため定数時間(`timingSafeEqual`)で比較
166166
| `adapter` | `string` | `openai-chat``openai-responses``anthropic``google``kiro``cursor``azure-openai`(または別名 `azure`)のいずれか。 |
167167
| `baseUrl` | `string` | 上流 API base URL。固定 endpoint を持つ大半の組み込み provider は一致しない URL を無視します。新しく追加された衝突保護付き API-key preset は、以前からある同名 custom provider の送信先を維持します。[固定プロバイダーのエンドポイント](#固定プロバイダーのエンドポイント)を参照してください。 |
168168
| `responsesPath?` | `string` | `key` 認証の `openai-responses` リクエストに使う任意の相対 resource path。`/` で始め、URL scheme、query、fragment を含めてはいけません。省略時は従来の `/v1/responses` URL 構築を維持します。 |
169+
| `supportsServiceTier?` | `boolean` | Responses の tier 能力。`true` は proxy の `fastMode` による OpenAI `service_tier` の設定/削除、`false` は未対応 upstream への送信前削除、未設定は呼び出し側の値を維持し proxy の注入を行わないことを意味します。registry preset が補完するため、custom provider は上流仕様で確認できる場合だけ `true` にしてください。 |
169170
| `disabled?` | `boolean` | 設定はディスクに残すがルーティングとモデル/カタログ一覧から除外します。 |
170171
| `apiKey?` | `string` | API キーまたはリクエスト時に解釈する `${ENV_VAR}` / `$ENV_VAR` 参照。 |
171172
| `apiKeyTransport?` | `"x-api-key" \| "bearer"` | Anthropic API キーのヘッダー方式。デフォルトはネイティブの `x-api-key` です。`Authorization: Bearer <key>` が必要な互換 gateway では `"bearer"` を設定します。key 認証の `anthropic` プロバイダーでのみ有効です。 |

docs-site/src/content/docs/ko/guides/codex-app-models.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,9 @@ fast_mode = true
143143
```
144144

145145
반면 모델 카탈로그와 런타임 요청의 tier id는 `priority`입니다. opencodex는 이 차이를 유지합니다.
146-
네이티브 OpenAI 패스스루 모델은 fast 지원을 보존하고, 라우팅된 비 OpenAI 모델에서는 service-tier
147-
메타데이터를 지워 처리할 수 없는 fast 옵션이 표시되지 않게 합니다.
146+
네이티브 OpenAI 패스스루 모델은 fast를 지원합니다. Responses provider에는 registry capability가 허용할 때만
147+
proxy가 생성한 OpenAI 전용 `service_tier`가 전달됩니다. capability를 생략하면 호환성을 위해 호출자 값은 유지하지만
148+
fastMode가 주입하지는 않습니다. DeepSeek V4 Flash는 미지원으로 명시되어 네이티브 Responses 경로에서 업스트림으로 보내지 않습니다.
148149

149150
## 서브에이전트 선택
150151

docs-site/src/content/docs/ko/reference/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ timing side channel을 막기 위해 상수 시간(`timingSafeEqual`)으로 비
173173
| `adapter` | `string` | `openai-chat`, `openai-responses`, `anthropic`, `google`, `kiro`, `cursor`, `azure-openai`(또는 별칭 `azure`) 중 하나. |
174174
| `baseUrl` | `string` | 업스트림 API base URL. 고정 endpoint를 쓰는 대부분의 기본 제공 provider는 일치하지 않는 URL을 무시합니다. 새로 승격된 충돌 보호 API-key preset은 기존의 같은 이름 custom provider 목적지를 유지합니다. [고정 프로바이더 엔드포인트](#고정-프로바이더-엔드포인트)를 참조하세요. |
175175
| `responsesPath?` | `string` | `key` 인증 `openai-responses` 요청에 사용할 선택적 상대 resource path. `/`로 시작해야 하며 URL scheme, query, fragment를 포함할 수 없습니다. 생략하면 기존 `/v1/responses` URL 구성을 유지합니다. |
176+
| `supportsServiceTier?` | `boolean` | Responses tier capability입니다. `true`는 proxy `fastMode`가 OpenAI `service_tier`를 설정/삭제하게 하고, `false`는 지원하지 않는 업스트림으로 보내기 전에 삭제하며, 생략하면 호출자가 보낸 값은 유지하고 proxy는 주입하지 않습니다. registry preset이 보완하므로 custom provider는 업스트림 문서에서 확인된 경우에만 `true`로 설정하세요. |
176177
| `disabled?` | `boolean` | 설정은 디스크에 남기되 라우팅과 모델/카탈로그 목록에서 제외합니다. |
177178
| `apiKey?` | `string` | API 키 또는 요청 시점에 해석할 `${ENV_VAR}` / `$ENV_VAR` 참조. |
178179
| `apiKeyTransport?` | `"x-api-key" \| "bearer"` | Anthropic API 키 헤더 방식입니다. 기본값은 네이티브 `x-api-key`이며, `Authorization: Bearer <key>`를 요구하는 호환 gateway에는 `"bearer"`를 설정합니다. key 인증 `anthropic` 프로바이더에서만 유효합니다. |

docs-site/src/content/docs/reference/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ or bind the forward explicitly to loopback (`ssh -L 127.0.0.1:20100:localhost:10
315315
| `adapter` | `string` | One of `openai-chat`, `openai-responses`, `anthropic`, `google`, `kiro`, `cursor`, `azure-openai` (or alias `azure`). |
316316
| `baseUrl` | `string` | Upstream API base URL. Most built-in fixed endpoints ignore a mismatch; newly promoted collision-safe key presets preserve an older same-named custom destination. See [Fixed provider endpoints](#fixed-provider-endpoints). |
317317
| `responsesPath?` | `string` | Optional relative resource path for key-auth `openai-responses` requests. It must start with `/` and contain no URL scheme, query, or fragment. When omitted, the adapter keeps its legacy `/v1/responses` URL construction. |
318+
| `supportsServiceTier?` | `boolean` | Responses service-tier capability: `true` lets proxy `fastMode` set/remove OpenAI's fast/priority `service_tier`; `false` strips the field for an upstream that rejects it; omitted preserves a caller-supplied value and does not let `fastMode` inject one. Registry presets backfill this capability; custom providers should set `true` only when documented upstream. |
318319
| `disabled?` | `boolean` | Keep the provider on disk but exclude it from routing and model/catalog listings. |
319320
| `apiKey?` | `string` | API key, or an `${ENV_VAR}` / `$ENV_VAR` reference resolved at request time. |
320321
| `apiKeyTransport?` | `"x-api-key" \| "bearer"` | Anthropic API-key header style. Defaults to native `x-api-key`; set `"bearer"` for compatible gateways that require `Authorization: Bearer <key>`. Valid only for key-auth `anthropic` providers. |

docs-site/src/content/docs/ru/guides/codex-app-models.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,10 @@ fast_mode = true
174174
```
175175

176176
Но каталог моделей и id уровня в запросах во время выполнения используют `priority`. opencodex
177-
сохраняет это разделение. Нативные модели OpenAI с пробросом сохраняют поддержку fast; у
178-
маршрутизируемых не-OpenAI-моделей метаданные service tier удаляются, чтобы опция fast не
179-
предлагалась там, где её нельзя обеспечить.
177+
сохраняет это разделение. Нативные модели OpenAI с пробросом сохраняют поддержку fast. Responses-провайдеры
178+
получают созданное proxy поле `service_tier` только при разрешённой registry capability; при отсутствии capability
179+
значение вызывающей стороны сохраняется для совместимости, но proxy не выполняет инъекцию fastMode. DeepSeek V4 Flash
180+
явно помечен как неподдерживающий поле, поэтому его нативный Responses-маршрут не отправляет его upstream.
180181

181182
## Выбор подагентов
182183

docs-site/src/content/docs/ru/reference/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ Responses и Chat Completions принимают только выделенны
198198
| `adapter` | `string` | Одно из `openai-chat`, `openai-responses`, `anthropic`, `google`, `kiro`, `cursor`, `azure-openai` (или алиас `azure`). |
199199
| `baseUrl` | `string` | Базовый URL вышестоящего API. Большинство встроенных провайдеров с фиксированными конечными точками игнорируют несовпадающий адрес; новые API-key preset с защитой от коллизий сохраняют назначение старого одноимённого custom provider. См. [Фиксированные конечные точки провайдеров](#фиксированные-конечные-точки-провайдеров). |
200200
| `responsesPath?` | `string` | Необязательный относительный путь ресурса для запросов `openai-responses` с аутентификацией `key`. Должен начинаться с `/` и не содержать схему URL, query или fragment. Если поле опущено, сохраняется прежнее построение URL `/v1/responses`. |
201+
| `supportsServiceTier?` | `boolean` | Capability уровня Responses: `true` разрешает proxy `fastMode` устанавливать/удалять OpenAI `service_tier`, `false` удаляет поле перед отправкой upstream, который его не поддерживает, а отсутствие значения сохраняет поле от вызывающей стороны и запрещает инъекцию proxy. Registry preset дополняет capability; для custom provider задавайте `true` только при подтверждении в документации upstream. |
201202
| `disabled?` | `boolean` | Провайдер остаётся на диске, но исключается из маршрутизации и списков моделей/каталога. |
202203
| `apiKey?` | `string` | API-ключ или ссылка `${ENV_VAR}` / `$ENV_VAR`, разрешаемая в момент запроса. |
203204
| `apiKeyTransport?` | `"x-api-key" \| "bearer"` | Способ передачи API-ключа Anthropic. По умолчанию используется нативный `x-api-key`; для совместимых gateway, требующих `Authorization: Bearer <key>`, задайте `"bearer"`. Допустимо только для `anthropic` provider с key-аутентификацией. |

docs-site/src/content/docs/zh-cn/guides/codex-app-models.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,9 @@ fast_mode = true
136136
```
137137

138138
模型目录和运行时请求使用的 tier id 则是 `priority`。opencodex 会保留这一差异。原生 OpenAI
139-
透传模型继续支持 fast;路由到非 OpenAI provider 的模型会移除 service-tier 元数据,避免显示
140-
无法兑现的 fast 选项。
139+
透传模型继续支持 fast。只有 registry capability 明确允许时,Responses provider 才会收到
140+
proxy 注入的 OpenAI 专用 `service_tier`;未设置 capability 时为兼容性保留调用方已有值,但不由
141+
fastMode 注入。DeepSeek V4 Flash 的原生 Responses 路由明确标记为不支持,因此不会把该字段发送给上游。
141142

142143
## 子代理选择
143144

docs-site/src/content/docs/zh-cn/reference/configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ Codex Direct 透传,两个 bearer 域不能混淆。仪表盘的 API 标签页
165165
| `adapter` | `string` | `openai-chat``openai-responses``anthropic``google``kiro``cursor``azure-openai`(或别名 `azure`)之一。 |
166166
| `baseUrl` | `string` | 上游 API base URL。大多数固定端点的内置 provider 会忽略不一致的地址;新加入且启用冲突保护的 API-key preset 会保留旧有同名 custom provider 的目标。见[固定的 provider 端点](#固定的-provider-端点)|
167167
| `responsesPath?` | `string` | `key` 认证的 `openai-responses` 请求可选相对 resource path。必须以 `/` 开头,且不得包含 URL scheme、query 或 fragment。省略时保留原有的 `/v1/responses` URL 构造。 |
168+
| `supportsServiceTier?` | `boolean` | Responses 的 service-tier 能力:`true` 允许 proxy 的 `fastMode` 设置/移除 OpenAI fast/priority 的 `service_tier``false` 会为拒绝该字段的上游移除它;省略时保留调用方已有值,且不让 `fastMode` 注入。registry preset 会回填此能力;自定义 provider 只有在上游文档明确支持时才应设为 `true`|
168169
| `disabled?` | `boolean` | 配置保留在磁盘上,但从路由和模型/目录列表排除。 |
169170
| `apiKey?` | `string` | API key,或在请求时解析的 `${ENV_VAR}` / `$ENV_VAR` 引用。 |
170171
| `apiKeyTransport?` | `"x-api-key" \| "bearer"` | Anthropic API key 的请求头方式。默认使用原生 `x-api-key`;兼容 gateway 要求 `Authorization: Bearer <key>` 时设为 `"bearer"`。仅适用于使用 key 认证的 `anthropic` provider。 |

0 commit comments

Comments
 (0)