Skip to content

feat(zhipu): 将 529 过载异常纳入指数退避重试范畴#261

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/retry-529-backoff
Jun 15, 2026
Merged

feat(zhipu): 将 529 过载异常纳入指数退避重试范畴#261
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/retry-529-backoff

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

CC 在使用 Zhipu(GLM) vendor 时,除 429(Rate Limit 限流)外还会遇到 529(Overloaded 并发过载)。当前 Zhipu vendor 仅对 429 做就地指数退避重试挽回,529 不会被内部重试,直接交由上层 failover 处理,导致不必要的供应商切换与请求失败。本 PR 将 529 纳入与 429 完全一致的退避重试范畴。

主要变更

  • 扩展重试范畴:新增 _BACKOFF_RETRY_STATUS = frozenset({429, 529}) 作为「可退避重试状态码」单一事实源;非流式 send_message 与流式 send_message_stream 改用集合判定,429/529 共用同一退避策略(max=5、1s→2s→4s→8s、Full Jitter、优先尊重 server retry-after)。
  • 修复流式 529 忽略 retry-after 缺陷:流式延迟计算原先把真实状态码传给 parse_rate_limit_headers(仅对 429/403 解析),导致 529 忽略 server retry-after;现统一改用 _compute_retry_delay_from_headers(固定按 429 语义解析),并删除冗余的 _compute_retry_delay_from_response,实现延迟逻辑去重。日志同步带入真实状态码。
  • 测试与文档:在 tests/test_zhipu.py 对称补全 5 个 529 用例(非流式/流式重试成功与耗尽、流式 retry-after 回归);同步 docs/arch/design-patterns.md §3.12 Vendor 级重试说明。

影响与验证

改动局限在 Zhipu,未触碰 rate_limit.py / base.py / executor 等共享模块,耗尽重试后状态码原样返回仍走既有 failover/CircuitBreaker 路径,与 429 完全对称、对现有行为零影响。验证:全量回归 uv run pytest -q 1601 passed,ruff lint/format 全部通过。

🤖 Generated with Claude Code

Zhipu vendor 原仅对 429 限流做就地指数退避重试,529(Overloaded
并发过载)直接交由上层 failover。现扩展内部重试以涵盖 529,与 429
共用同一退避策略(max=5、1s→2s→4s→8s、Full Jitter、优先尊重 server
retry-after),降低请求失败率与不必要的 failover。

- 新增 _BACKOFF_RETRY_STATUS={429,529} 作为可重试状态码单一事实源
- 非流式/流式判定改用集合,日志带入真实状态码
- 修复流式延迟计算忽略 529 retry-after 的缺陷,并去重延迟逻辑
- 对称补全 529 非流式/流式重试与 retry-after 回归测试
- 同步 design-patterns.md §3.12 Vendor 级重试说明

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI merged commit 9ef03fb into feature/1.x.x Jun 15, 2026
6 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/retry-529-backoff branch June 15, 2026 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant