IanShaw
|
16b15e870d
|
修复 5888 与 5925 的同号重试语义冲突
|
2026-08-20 18:16:38 -07:00 |
|
IanShaw027
|
7c53a842e4
|
合并上游 main,保留 5925 的 Grok 重试上限与 5888 的协议兼容修复
同账号重试采用次数上限加 deadline;畸形 tools 在出站前删除;compaction 422 与结构化错误扫描一并保留。
|
2026-08-21 08:49:44 +08:00 |
|
IanShaw
|
c628b3eea7
|
让 Grok stream idle 重试上限作用于主路径
|
2026-08-20 07:07:55 -07:00 |
|
IanShaw
|
ad26172b83
|
完善 Grok 限流冷却与用量兼容
|
2026-08-20 02:32:43 -07:00 |
|
IanShaw
|
c374ff2951
|
完善 OpenAI 网关切换与运维错误语义
|
2026-08-19 23:13:40 -07:00 |
|
cyh
|
74fcdf3d42
|
fix(openai): preserve exponential capacity backoff
|
2026-08-08 01:02:02 +08:00 |
|
wucm667
|
a2acbf553b
|
fix(handler): avoid cache billing on same-account retry
|
2026-07-20 02:20:58 +08:00 |
|
shaw
|
a0593b0bf8
|
fix(gateway): 客户端断开后 failover 静默终止,不再误报 502 账号耗尽
上游请求经 detachUpstreamContext(WithoutCancel) 有意脱离客户端取消(保
计费),但 failover 循环仍用原始 c.Request.Context() 重新选号:客户端
断开后上游返回 520 等可 failover 错误时,重新选号必然得到 context
canceled,被误判为账号耗尽,记录并返回通用 502。
修复:客户端已断开 ⇒ failover 静默终止。
- 新增 failoverClientGone(c):请求 ctx 已取消时先停 compact 心跳
(建立 happens-before,对齐其它终结路径),响应未提交则标 499
(statusClientClosedRequest,与并发槽取消路径同惯例)
- 7 个 OpenAI 内联 failover 循环(Responses/Messages/chat_completions/
embeddings/images/grok_media/alpha_search)加双 guard:换号前 +
选号失败分支入口;guard 位于 ReportOpenAIAccountScheduleResult(false)
之后、RecordOpenAIAccountSwitch/池模式重试之前,账号健康副作用
(service 层 detached ctx)不受影响
- FailoverState.HandleFailoverError/HandleSelectionExhausted 入口加
ctx.Err() 检查返回 FailoverCanceled,取消不再改动 failover 状态;
全部 10 个 FailoverCanceled 分支统一调用 failoverClientGone 归类 499
- 上游 detach 与计费设计不变;真实上游 520 事件仍完整落 ops
(面板显示码 COALESCE(upstream_status_code,status_code)=520,
错误率/告警口径不变)
测试:新增 openai_responses_failover_cancel_test.go 复现 issue 场景
(520+取消 ⇒ 不切号、499、无 502 终态)+ 在线客户端对照(正常切换、
耗尽 502);failover_loop_test.go 补入口取消用例并修正取消语义断言。
Fixes #4257
|
2026-07-15 09:29:05 +08:00 |
|
Heatherm Huang
|
343390057d
|
fix(grok): fail over OAuth credential errors safely
|
2026-07-14 14:55:30 +08:00 |
|
feeeei
|
c7c933776d
|
fix: 池模式同账号重试次数配置对 Anthropic/Gemini/通用转发路径生效
e643fc38 引入 pool_mode_retry_count 账号配置时,只覆盖了 OpenAI 族
handler 的内联重试循环;走 HandleFailoverError 的 Anthropic/
Antigravity/Gemini/通用转发路径仍硬编码同账号重试 3 次,配置不生效。
为 HandleFailoverError 增加 retryLimit 参数,由调用方传入
account.GetPoolModeRetryCount();未配置账号默认仍为 3 次,行为不变。
|
2026-07-13 12:57:00 +08:00 |
|
kyx236
|
e643fc382c
|
feat: 支持 API Key 上游池模式同账号重试次数配置与自定义错误策略
|
2026-03-08 14:12:17 +08:00 |
|
erio
|
09166a52f8
|
refactor: extract failover error handling into FailoverState
- Extract duplicated failover logic from gateway_handler.go (3 places)
and gemini_v1beta_handler.go into shared failover_loop.go
- Introduce FailoverState with HandleFailoverError and HandleSelectionExhausted
- Move helper functions (needForceCacheBilling, sleepWithContext) into failover_loop.go
- Add comprehensive unit tests (32+ test cases)
- Delete redundant gateway_handler_single_account_retry_test.go
|
2026-02-24 18:08:04 +08:00 |
|