Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions messages/en/settings/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"enableOpenaiResponsesWebsocket": "Enable OpenAI Responses WebSocket",
"enableOpenaiResponsesWebsocketDesc": "When enabled, if a client opens a WebSocket connection to /v1/responses and the selected provider is a Codex type, CCH will attempt a sibling WebSocket to the upstream. If the upstream does not support WebSocket or the handshake fails, CCH gracefully falls back to standard HTTP Responses while keeping the client WebSocket open; the fallback is not counted toward circuit breakers. Non-WebSocket clients and non-Codex providers are unaffected.",
"enableHighConcurrencyMode": "Enable High-Concurrency Mode",
"enableHighConcurrencyModeDesc": "When enabled, CCH disables memory-heavy Replay, stream gating, provider-racing loser billing, client-abort retention, and session diagnostics, in addition to Redis debug and observability writes. Forwarding, core billing, and quota enforcement remain enabled.",
"highConcurrencyModeWarning": "High-concurrency mode disables Replay, stream gating, racing-loser billing, client-abort retention, and session diagnostics.",
"enableHighConcurrencyModeDesc": "When enabled, CCH disables memory-heavy Replay, stream gating, provider-racing loser billing, and session diagnostics, in addition to Redis debug and observability writes. Forwarding, core billing, quota enforcement, and bounded client-abort retention remain enabled.",
"highConcurrencyModeWarning": "High-concurrency mode disables Replay, stream gating, racing-loser billing, and session diagnostics. Bounded client-abort retention stays on.",
"enableResponseFixer": "Enable Response Fixer",
"enableResponseFixerDesc": "Automatically repairs common upstream response issues (encoding, SSE, truncated JSON). Enabled by default.",
"enableThinkingSignatureRectifier": "Enable Thinking Signature Rectifier",
Expand Down
4 changes: 2 additions & 2 deletions messages/ja/settings/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"enableOpenaiResponsesWebsocket": "OpenAI Responses WebSocket を有効化",
"enableOpenaiResponsesWebsocketDesc": "有効にすると、クライアントが /v1/responses に WebSocket 接続し、かつ Codex タイプのプロバイダーが選択された場合、CCH は上流にも WebSocket 接続を試みます。上流が WebSocket をサポートしない、またはハンドシェイクに失敗した場合は、クライアント WebSocket を開いたまま通常の HTTP Responses に優雅にフォールバックします。このフォールバックはサーキットブレーカーにカウントされません。非 WebSocket クライアントと非 Codex プロバイダーの動作は変わりません。",
"enableHighConcurrencyMode": "高並行モードを有効化",
"enableHighConcurrencyModeDesc": "有効にすると、Redis のデバッグスナップショットとリアルタイム Session 観測に加え、メモリ負荷の高い Replay、ストリームゲート、競合敗者の課金、クライアント中断保持、Session 診断を停止します。転送、基本課金、制限処理は維持されます。",
"highConcurrencyModeWarning": "高並行モードでは Replay、ストリームゲート、競合敗者の課金、クライアント中断保持、Session 診断を無効化します。",
"enableHighConcurrencyModeDesc": "有効にすると、Redis のデバッグスナップショットとリアルタイム Session 観測に加え、メモリ負荷の高い Replay、ストリームゲート、競合敗者の課金、Session 診断を停止します。有界のクライアント中断保持は維持されます。転送、基本課金、制限処理は維持されます。",
"highConcurrencyModeWarning": "高並行モードでは Replay、ストリームゲート、競合敗者の課金、Session 診断を無効化します。有界のクライアント中断保持は維持されます。",
"enableResponseFixer": "レスポンス整流を有効化",
"enableResponseFixerDesc": "上流応答の一般的な形式問題(エンコーディング、SSE、途切れた JSON)を自動修復します(既定で有効)。",
"enableThinkingSignatureRectifier": "thinking 署名整流を有効化",
Expand Down
4 changes: 2 additions & 2 deletions messages/ru/settings/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"enableOpenaiResponsesWebsocket": "Включить OpenAI Responses WebSocket",
"enableOpenaiResponsesWebsocketDesc": "Если включено, то когда клиент открывает WebSocket-соединение с /v1/responses и выбирается провайдер типа Codex, CCH попытается установить WebSocket-соединение с вышестоящим сервером. Если сервер не поддерживает WebSocket или рукопожатие не удастся, CCH плавно переключится на обычный HTTP Responses, сохраняя WebSocket клиента открытым; этот fallback не учитывается в circuit breaker. Клиенты без WebSocket и провайдеры, отличные от Codex, работают без изменений.",
"enableHighConcurrencyMode": "Включить режим высокой нагрузки",
"enableHighConcurrencyModeDesc": "При включении CCH отключает Redis-снимки для отладки и real-time-наблюдение Session, а также ресурсоёмкие Replay, stream-gate, тарификацию проигравших в гонке, сохранение при отмене клиентом и диагностику Session. Пересылка, базовый биллинг и лимиты сохраняются.",
"highConcurrencyModeWarning": "Режим высокой нагрузки отключает Replay, stream-gate, тарификацию проигравших в гонке, сохранение при отмене клиентом и диагностику Session.",
"enableHighConcurrencyModeDesc": "При включении CCH отключает Redis-снимки для отладки и real-time-наблюдение Session, а также ресурсоёмкие Replay, stream-gate, тарификацию проигравших в гонке и диагностику Session. Ограниченное сохранение при отмене клиентом остаётся включённым. Пересылка, базовый биллинг и лимиты сохраняются.",
"highConcurrencyModeWarning": "Режим высокой нагрузки отключает Replay, stream-gate, тарификацию проигравших в гонке и диагностику Session. Ограниченное сохранение при отмене клиентом остаётся включённым.",
"enableResponseFixer": "Включить исправление ответов",
"enableResponseFixerDesc": "Автоматически исправляет распространённые проблемы ответа у провайдеров (кодировка, SSE, обрезанный JSON). Включено по умолчанию.",
"enableThinkingSignatureRectifier": "Включить исправление thinking-signature",
Expand Down
4 changes: 2 additions & 2 deletions messages/zh-CN/settings/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@
"enableOpenaiResponsesWebsocket": "启用 OpenAI Responses WebSocket",
"enableOpenaiResponsesWebsocketDesc": "启用后,当客户端以 WebSocket 连接 /v1/responses 且选中 Codex 类型供应商时,CCH 会尝试与上游建立 WebSocket。若上游不支持或握手失败,将优雅降级到普通 HTTP Responses,客户端 WebSocket 保持打开;降级不计入熔断。非 WebSocket 客户端与非 Codex 供应商行为不变。",
"enableHighConcurrencyMode": "启用高并发模式",
"enableHighConcurrencyModeDesc": "开启后,除 Redis 调试快照与实时会话观测写入外,还会关闭高内存占用的 Replay、流式门禁、竞速输家计费、客户端中断保留计费和会话诊断。转发、基础计费与限额仍会执行。",
"highConcurrencyModeWarning": "高并发模式将关闭 Replay、流式门禁、竞速输家计费、客户端中断保留计费和会话诊断。",
"enableHighConcurrencyModeDesc": "开启后,除 Redis 调试快照与实时会话观测写入外,还会关闭高内存占用的 Replay、流式门禁、竞速输家计费和会话诊断。有界的客户端中断保留计费仍会执行,转发、基础计费与限额不受影响。",
"highConcurrencyModeWarning": "高并发模式将关闭 Replay、流式门禁、竞速输家计费和会话诊断。有界的客户端中断保留仍会执行。",
"interceptAnthropicWarmupRequests": "拦截 Warmup 请求(Anthropic)",
"interceptAnthropicWarmupRequestsDesc": "开启后,识别到 Claude Code 的 Warmup 探测请求将由 CCH 直接抢答短响应,避免访问上游供应商;该请求会记录在日志中,但不计费、不限流、不计入统计。",
"enableThinkingSignatureRectifier": "启用 thinking 签名整流器",
Expand Down
4 changes: 2 additions & 2 deletions messages/zh-TW/settings/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"enableOpenaiResponsesWebsocket": "啟用 OpenAI Responses WebSocket",
"enableOpenaiResponsesWebsocketDesc": "啟用後,當客戶端以 WebSocket 連線 /v1/responses 且命中 Codex 類型供應商時,CCH 會嘗試與上游建立 WebSocket 連線。若上游不支援或握手失敗,將優雅降級為一般 HTTP Responses,客戶端 WebSocket 保持開啟;降級不計入熔斷。非 WebSocket 客戶端與非 Codex 供應商行為不變。",
"enableHighConcurrencyMode": "啟用高並發模式",
"enableHighConcurrencyModeDesc": "開啟後,除 Redis 除錯快照與即時 Session 觀測寫入外,也會關閉高記憶體用量的 Replay、串流門控、競速輸家計費、客戶端中斷保留計費與 Session 診斷。轉發、基礎計費與限額仍會執行。",
"highConcurrencyModeWarning": "高並發模式將關閉 Replay、串流門控、競速輸家計費、客戶端中斷保留計費與 Session 診斷。",
"enableHighConcurrencyModeDesc": "開啟後,除 Redis 除錯快照與即時 Session 觀測寫入外,會關閉高記憶體用量的 Replay、串流門控、競速輸家計費與 Session 診斷;有界的客戶端中斷保留計費仍會執行。轉發、基礎計費與限額不受影響。",
"highConcurrencyModeWarning": "高並發模式將關閉 Replay、串流門控、競速輸家計費與 Session 診斷;有界的客戶端中斷保留仍會執行。",
"enableResponseFixer": "啟用回應整流",
"enableResponseFixerDesc": "自動修復上游回應中常見的編碼、SSE 與 JSON 格式問題(預設開啟)。",
"enableThinkingSignatureRectifier": "啟用 thinking 簽名整流器",
Expand Down
10 changes: 9 additions & 1 deletion src/app/v1/_lib/proxy/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,15 @@ export class ProxySession {
}

shouldRetainClientAbortBilling(): boolean {
return !this.highConcurrencyModeEnabled;
// High-concurrency mode keeps bounded client-abort retention (64 KiB metering +
// 3 MiB reservation, capped by DetachedStreamBudget) so a completed upstream
// stream that the client already closed (Codex: reads response.completed then
// hangs up) is still billed as 200 and the sticky/affinity binding is kept.
// Immediate cancel + discard in this mode previously discarded the completion
// marker, turning a successful request into 499 and clearing the binding,
// which broke prefix-cache affinity (40% hit loss) and caused per-request
// provider churn.
return true;
}

shouldBillHedgeLosers(): boolean {
Expand Down
Loading