feeeei
|
ab0fcd1a0e
|
fix(gemini): Skipped 错误策略对齐 OpenAI,上游 4xx 不再硬改 500
ErrorPolicySkipped(池模式、或自定义错误码未命中)原来在响应写出上
自成一派:v1beta 原生把上游 4xx 硬改 500 后原文透传,/v1/messages
硬传 500 进映射(客户端拿到 502)。下游网关据此把请求级错误当可重
试的服务端故障反复换号,耗尽后改写成 All available accounts
exhausted(2026-08-17 gemini 生产事故链)。现对齐 OpenAI 路径语义:
- Skipped 只豁免账号状态标记,不豁免换号:可 failover 状态码一律
返回 UpstreamFailoverError(poolModeSkippedFailoverError 泛化为
skippedErrorPolicyFailoverError,同账号重试标记仍仅池模式携带)
- 池模式的不可 failover 4xx 保真:v1beta 原码+原文透传(新
writeGeminiNativeUpstreamError 与 ErrorPolicyNone 共用同一写出,
并补记 ops 事件),/v1/messages 与 chat completions 按真实状态
码映射
- 自定义错误码未命中且不可 failover:三路径统一 500 + "Upstream
gateway error" 固定文案,上游细节仅记 ops 错误日志
- 400 属确定性请求错误:mapped 写出回传脱敏后的上游 message,客户
端可据此定位非法字段
|
2026-08-18 11:24:39 +08:00 |
|
feeeei
|
cbc2a3dd46
|
修复池模式 Gemini 账号被 429 打上账号级限流
- 429 的标记点在重试循环内,先于 CheckErrorPolicy 执行,池模式豁免只能落在
handleGeminiUpstreamError 自身;否则一次上游 429 会把账号锁到 PST 午夜,
即便重试已经成功返回客户端
- 判定条件与 HandleUpstreamError 对齐:自定义错误码优先级高于池模式;
401/403/529 仍委派给 RateLimitService,临时不可调度规则不受影响
- chat completions 路径的策略分发改为只有 None / Matched 才处理账号状态,
与 messages 兼容层的 switch 一致,ErrorPolicySkipped 不再漏进来
|
2026-08-08 16:51:48 +08:00 |
|
feeeei
|
fd7e2039d3
|
fix(gemini): 完善gemini号池模式时retryable失效问题
此前 Gemini 三条转发路径对池模式账号命中 ErrorPolicySkipped 时直接把
上游错误体透传给客户端(强制标 500),既不同账号重试也不换号,
pool_mode_retry_count 配置完全不生效;而 Anthropic/OpenAI 等路径
会构造 UpstreamFailoverError 交给 handler 层按池模式配置重试后换号。
- 新增 poolModeSkippedFailoverError:池模式 + 可 failover 状态码时
返回 UpstreamFailoverError,RetryableOnSameAccount 按
pool_mode_retry_status_codes(默认 401/403/429)判定
- 原生 v1beta(ForwardNative)与 Claude messages 兼容路径的
Skipped 分支接入;非池模式的自定义错误码透传行为不变
- chat completions 兼容路径的 failover 错误补上
RetryableOnSameAccount 池模式判定
|
2026-07-26 09:52:47 +08:00 |
|
Heatherm Huang
|
ef2a22be70
|
fix(routing): isolate temporary cooldowns by model
|
2026-07-18 15:35:30 +08:00 |
|
yangzc2004-bit
|
87fac30459
|
fix: use tier cooldown for google one gemini 429
|
2026-05-16 00:16:38 +08:00 |
|
kyx236
|
6aa8cbbf20
|
feat: 二次 401 直接升级为错误状态,添加 DB 回退确保生效
账号首次 401 仅临时不可调度,给予 token 刷新窗口;若恢复后再次 401
说明凭证确实失效,直接升级为错误状态以避免反复无效调度。
- 缓存中 reason 为空时从 DB 回退读取,防止升级判断失效
- ClearError 同时清除临时不可调度状态,管理员恢复后重新给予一次机会
- 管理后台账号列表添加"临时不可调度"状态筛选
- 补充 DB 回退场景单元测试
|
2026-03-04 20:25:15 +08:00 |
|
erio
|
a67d9337b8
|
feat: integrate CheckErrorPolicy into Gemini error handling paths
|
2026-02-09 06:55:45 +08:00 |
|