Skip to content

Commit 2f3b859

Browse files
authored
Merge pull request lidge-jun#862 from luvs01/docs/806-codex-routing-semantics
docs(codex): clarify pool routing and account continuity
2 parents eeef701 + b455a91 commit 2f3b859

26 files changed

Lines changed: 471 additions & 226 deletions

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ refresh <provider> Force-refresh Codex or provider quota reports.
223223
auto-switch <provider> <on|off|status|threshold N> Control the Codex pool threshold.
224224
remove <provider> <id> --yes Remove a stored account or key after an existence check.
225225
add-key <provider> [--label <label>] Add a key read only from piped stdin.
226-
Codex pool switches apply to new sessions; running threads keep their account.
226+
Codex pool selection applies to the next request after clearing existing affinity; in-flight requests keep their captured account.
227227
```
228228

229229
すべてのサブコマンドはプロキシが実行中である必要があり、CLI が記録されたランタイムポートを自動的に探します。成功は
@@ -268,9 +268,12 @@ API エラーは終了コード 1 です。認証情報フィールドは manage
268268
#### `ocx account use <provider> <account-or-key-id|main> [--json]`
269269

270270
既存の Codex アカウント、OAuth アカウント、または API key を選びます。`openai``main` は Codex App ログインを
271-
選択します。Codex の選択は **新しいセッション** から適用され、既存の thread は現在のアカウントを維持します。auto-switch
272-
threshold がオンなら後で手動 pin を上書きできます。不明なプロバイダーや id は終了
273-
コード 1 です。`--json` は次を返します。
271+
選択します。Codex Pool の選択は process-local affinity を消去し、既存の表示タスクを含む次のリクエストから適用されます。プロキシ再起動や affinity eviction 後もタスクは未紐付けになり得ますが、処理中のリクエストは取得済みアカウントを維持します。この選択は Pool routing のみを制御し、Direct mode は caller-owned/native main credential を使い続けます。使用量ベースのプロアクティブ切り替え、401/403 再認証、429/retry-after cooldown、除外、出力前 429/402 の障害回復により、後で別の適格 Pool アカウントが選ばれる場合があります。これらの回復経路は使用量ベース切り替えが off でも有効です。アカウント変更後も OpenCodex は会話コンテキストを再生しますが、provider prompt cache は再ウォームアップが必要な場合があります。
272+
不明なプロバイダーや id は終了コード 1 です。`--json` は次を返します。
273+
**401/403** では、そのアカウントへのプロセスローカルな affinity を解除し、再認証を要求します。
274+
**429** では `Retry-After` を尊重してアカウントの cooldown を開始し、affinity を解除したうえで、
275+
別の適格な Pool アカウントへリクエストを切り替えることがあります。これらの障害回復は
276+
`autoSwitchThreshold: 0` でも有効であり、`0` が無効にするのは使用量に基づく予防的な切り替えだけです。
274277

275278
```text
276279
{ ok: true, provider, type, activeId }

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ namespaced selected id を bare id に変えます。
5454
| `pausedCodexAccountIds?` | `string[]` | `[]` | Codex Auth で再開するまで、今後のすべての Pool 選択から除外するアカウント ID。メインを一時停止した場合は `__main__` も含みます。 |
5555
| `codexAccountNamespaces?` | `Record<string,string>` || 公開 model selector namespace から保存済み Codex アカウント target への任意 map。この foundation layer は map を検証・保存しますが、picker row の追加や routing の変更は行いません。 |
5656
| `activeCodexAccountId?` | `string` || 手動選択した pool アカウント。既存 thread affinity を消去して次のリクエストから適用し、処理中のリクエストは現在のアカウントを維持します。 |
57-
| `autoSwitchThreshold?` | `number` | `80` | 新しいセッション自動切替用の使用量百分率 threshold。既知の 5 時間、週次、30 日 quota window のうち最も高いスコアを使います`0` なら quota 自動切替をオフにします。`quota` 戦略と `fill-first` の drain threshold にも使います|
58-
| `accountPoolStrategy?` | `"quota" \| "round-robin" \| "fill-first"` | `"quota"` | Codex pool の新しいセッション rotation 戦略。**新しいセッションのみ**に適用され、既存 thread idaffinity を維持します`quota`(既定)— アクティブアカウントが `autoSwitchThreshold` を超えたら既知 usage 最小を選択`round-robin` — 適格アカウント間を smooth weighted で均等分散。`fill-first` cooldown、使用不可、または(設定時)`autoSwitchThreshold` までアクティブアカウントを使い切り(未知 usage は強制切替しない)、安定ソート順で次へ|
59-
| `accountPoolStickyLimit?` | `number` | `1` | 1 回の round-robin 選択で次へ進む前に保持する成功的新セッション bind 数。範囲 1–100。`accountPoolStrategy``round-robin` のときのみ。 |
57+
| `autoSwitchThreshold?` | `number` | `80` | 使用量ベースのプロアクティブ切り替えしきい値。`quota` は紐付け済み/未紐付けタスクの次のリクエストを再評価でき、`fill-first` は未紐付け割り当ての使い切り基準としてのみ使用し、通常の `round-robin` 選択は使用しません。既知の 5 時間、週次、30 日 quota window の最大スコアを使います`0` は使用量ベースの切り替えだけを無効にし、未紐付け割り当てや障害回復は無効にしません|
58+
| `accountPoolStrategy?` | `"quota" \| "round-robin" \| "fill-first"` | `"quota"` | 新規/未紐付け Codex リクエストの割り当て戦略。live な `(parent thread id, quota scope)` affinity がなければ未紐付けで、プロキシ再起動や affinity リセット後は既存の表示タスクも未紐付けになり得ます`quota` はアクティブアカウントがなければ既知 usage 最小の適格アカウントを選び、適格なアクティブアカウントが `autoSwitchThreshold` 未満なら維持します。しきい値到達後は、未紐付けリクエストまたは紐付け済みタスクの次のリクエストを usage の低い適格アカウントへ移せます`round-robin` は未紐付けリクエストを均等分散し、`fill-first` cooldown、使用不可、または drain threshold までアクティブアカウントへ割り当てます|
59+
| `accountPoolStickyLimit?` | `number` | `1` | 1 回の round-robin 選択で次へ進む前に保持する新規/未紐付けタスク割り当て数。カウンターは上流の成功後ではなくタスクの紐付け時に増えます。範囲 1–100。`accountPoolStrategy``round-robin` のときのみ。 |
6060
| `upstreamFailoverThreshold?` | `number` | `3` | 一時的な上流失敗が連続して起きたのち、以降の新しいセッションを別の適合 pool アカウントに failover する回数。`0` なら失敗ベースの failover をオフにします。 |
6161
| `modelCacheTtlMs?` | `number` | `300000` | プロバイダー別 `/models` キャッシュの有効期間(5 分)。 |
6262
| `appOwnedMemoryBudgetMb?` | `number` | `256` | 退避可能なアプリ所有の保持状態(ログ、キャッシュ、Blob、継続応答ペイロード)に対するプロセス全体の上限(MiB)です。有効範囲は 64〜4096 で、RSS やネイティブランタイムメモリの上限ではありません。 |
@@ -85,14 +85,26 @@ model picker entry の作成、session の固定、Pool / Direct routing の変
8585
:::note[Codex アカウントプール]
8686
pool アカウントの追加と quota 更新はダッシュボードの **Codex Auth** ページで処理してください。設定には secret で
8787
ないアカウント metadata だけを保存し、access/refresh token は強化された Codex アカウント credential store に別途
88-
保管します。既存 thread id はアカウント affinity を維持し、新しいセッションは `accountPoolStrategy`、quota、cooldown、health に
89-
応じて自動ルーティングされます。
88+
保管します。Pool routing は新規/未紐付け割り当て、使用量ベースのプロアクティブ切り替え、障害回復に分かれます。
89+
紐付け済みタスクは通常 affinity を維持しますが、`quota` はしきい値超過後の次のリクエストで再紐付けでき、
90+
pause、cooldown、再認証、障害処理も独立して routing を消去または変更できます。未紐付けリクエストには
91+
プロキシ再起動や affinity リセット後の既存タスクも含まれます。出力前の **429/402** は使用量ベースの
92+
切り替えがオフでも同じリクエストで適格な代替アカウントへ 1 回再試行できます。アカウント変更後も会話
93+
コンテキストは保持・再生されますが、アカウント間の provider prompt cache 再利用は保証されません。
9094
一時停止したアカウントと quota metadata は表示されたままですが、自動切り替え、再試行/failover 選択、cooldown 復旧プローブ、手動有効化の対象外です。
9195
一時停止するとそのアカウントの thread affinity map も消去されます。処理中のリクエストは取得済み credential を維持しますが、以降のターンは再ルーティングされ、一時停止中のアカウントは再利用できません。
9296
状態は再起動後も保持され、すべてのアカウントが一時停止中なら Pool ルーティングは別のアカウントを暗黙に選ばず失敗します。
9397
**上限到達を一括停止** は credential がある適格アカウントだけを先に更新し、関連する quota window が今回 100% と確認できたアカウントだけを停止します。credential がないアカウントや、quota が不明、または更新に失敗したアカウントは変更しません。
94-
95-
**rotation 戦略**(新しいセッションのみ;bound thread は不変):`quota`(既定)— `autoSwitchThreshold` 超過時に最小 usage を選択;`round-robin` — 均等分散、`accountPoolStickyLimit`(既定 `1`、1–100)で 1 選択あたりの成功 bind 数;`fill-first` — アクティブアカウントを cooldown、再認証、または threshold まで使い切り(未知 usage は強制切替しない)後、安定ソート順で次へ。rotation は provider enforcement を回避しません — 複数アカウント利用は ToS 違反の可能性があります。
98+
**401/403** では、そのアカウントへのプロセスローカルな affinity を解除し、再認証を要求します。
99+
**429** では `Retry-After` を尊重してアカウントの cooldown を開始し、affinity を解除したうえで、
100+
別の適格な Pool アカウントへリクエストを切り替えることがあります。これらの障害回復は
101+
`autoSwitchThreshold: 0` でも有効であり、`0` が無効にするのは使用量に基づく予防的な切り替えだけです。
102+
103+
**割り当てとプロアクティブ切り替え戦略:** `quota`(既定)はアクティブアカウントがない場合に最小 usage の適格アカウントを選び、適格なアクティブアカウントが `autoSwitchThreshold` 未満なら維持します。`autoSwitchThreshold` 超過後は紐付け済みタスクの次のリクエストも再紐付けできます。`round-robin`
104+
未紐付けリクエストを均等分散し、しきい値は通常の rotation を変えません。`accountPoolStickyLimit`
105+
(既定 `1`、1–100)は成功応答ではなく割り当て/紐付け数を数えます。`fill-first` は未紐付けリクエストを
106+
cooldown、再認証、または drain threshold までアクティブアカウントへ割り当て、正常な紐付け済みタスクは
107+
affinity を維持します。これらの戦略は provider enforcement を回避しません。
96108
:::
97109

98110
### 管理型レコード形式

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ refresh <provider> Force-refresh Codex or provider quota reports.
256256
auto-switch <provider> <on|off|status|threshold N> Control the Codex pool threshold.
257257
remove <provider> <id> --yes Remove a stored account or key after an existence check.
258258
add-key <provider> [--label <label>] Add a key read only from piped stdin.
259-
Codex pool switches apply to new sessions; running threads keep their account.
259+
Codex pool selection applies to the next request after clearing existing affinity; in-flight requests keep their captured account.
260260
```
261261

262262
모든 하위 명령은 프록시가 실행 중이어야 하며 CLI가 기록된 런타임 포트를 자동으로 찾습니다. 성공은
@@ -309,9 +309,12 @@ API 오류는 종료 코드 1입니다. 자격 증명 필드는 management API
309309
#### `ocx account use <provider> <account-or-key-id|main> [--json]`
310310

311311
기존 Codex 계정, OAuth 계정 또는 API key를 선택합니다. `openai`에서 `main`은 Codex App 로그인을
312-
선택합니다. Codex 선택은 **새 세션**부터 적용되며 기존 thread는 현재 계정을 유지합니다. auto-switch
313-
threshold가 켜져 있으면 나중에 수동 pin을 덮어쓸 수 있습니다. 알 수 없는 프로바이더나 id는 종료
314-
코드 1입니다. `--json`은 다음을 반환합니다.
312+
선택합니다. Codex Pool 선택은 프로세스 로컬 affinity를 지우고 기존에 보이던 작업을 포함한 다음 요청부터 적용됩니다. 프록시 재시작이나 affinity eviction 뒤에도 작업이 바인딩 없는 상태가 될 수 있지만, 진행 중인 요청은 이미 확보한 계정을 유지합니다. 이 선택은 Pool 라우팅만 제어하며 Direct mode는 호출자 소유/native main credential을 계속 사용합니다. 사용량 기반 선제 전환, 401/403 재인증, 429/retry-after cooldown, 제외, 출력 전 429/402 실패 복구는 나중에 다른 적격 Pool 계정을 선택할 수 있습니다. 이러한 복구 경로는 사용량 기반 전환이 꺼져 있어도 동작합니다. 계정이 바뀌어도 OpenCodex는 대화 문맥을 재생하지만 프로바이더 측 prompt cache는 다시 예열해야 할 수 있습니다.
313+
알 수 없는 프로바이더나 id는 종료 코드 1입니다. `--json`은 다음을 반환합니다.
314+
**401/403**이 발생하면 해당 계정의 프로세스 로컬 affinity를 해제하고 재인증을 요구합니다.
315+
**429**에서는 `Retry-After`를 준수해 계정 cooldown을 시작하고 affinity를 해제한 뒤,
316+
다른 적격 Pool 계정으로 요청을 전환할 수 있습니다. 이러한 실패 복구는
317+
`autoSwitchThreshold: 0`에서도 계속 작동하며, `0`은 사용량 기반 선제 전환만 비활성화합니다.
315318

316319
```text
317320
{ ok: true, provider, type, activeId }

0 commit comments

Comments
 (0)