Skip to content

feat(zhipu): 为 429 Rate Limit 添加指数退避重试挽回机制#242

Merged
ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
ThreeFish-AI/lahore-v2
May 23, 2026
Merged

feat(zhipu): 为 429 Rate Limit 添加指数退避重试挽回机制#242
ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
ThreeFish-AI/lahore-v2

Conversation

@ThreeFish-AI

@ThreeFish-AI ThreeFish-AI commented May 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • ZhipuVendor 添加 HTTP 429 Rate Limit 专用重试挽回机制,max_attempt = 5(1 初始 + 4 重试),采用指数退避 + Full Jitter 策略(1s → 2s → 4s → 8s,上限 30s),优先尊重 server retry-after header 提供的恢复时间建议
  • 覆写 send_message()(非流式)和 send_message_stream()(流式),429 时自动重试,非 429 状态码直接透传不触发重试
  • 重试对 executor 完全透明——仅在全部重试耗尽后才触发 failover 到下游 vendor,降低不必要的 vendor 切换频率

Motivation

当前 zhipu 遇到 429 时直接触发 failover,无法通过合理等待后自行恢复。429 是瞬态限流错误,通常在短时间内即可恢复,引入重试机制可让 zhipu 自救,避免过早切换到其他 vendor。

Implementation Details

  • 延迟计算:复用 routing/retry.pyRetryConfig + calculate_delay()(指数退避 + Full Jitter),以及 routing/rate_limit.pyparse_rate_limit_headers() + compute_effective_retry_seconds()(server retry-after 解析)
  • 流式安全性:429 错误在 BaseVendor.send_message_stream() 的 status code 检查阶段即 raise(在任何 data chunk yield 之前),重试不会导致已发出数据不一致
  • 新增 9 个测试用例覆盖:非流式/流式重试成功、重试耗尽、非 429 不重试、retry-after header 尊重、退避延迟指数增长验证、API key 缺失快速失败等场景

Test Plan

  • uv run pytest tests/test_zhipu.py -v — 27 个测试全部通过(含 9 个新增 429 重试用例)
  • uv run pytest tests/ -x -q — 全量 1459 测试通过,零回归

🤖 Generated with Claude Code, CodeX, Gemini
Co-Authored-By: Aurelius Huangthreefish.ai@gmail.com

ZhipuVendor 遇到 HTTP 429 时自动重试最多 5 次(1 初始 + 4 重试),
采用指数退避 + Full Jitter 策略(1s → 2s → 4s → 8s),
优先尊重 server retry-after header 提供的恢复时间建议。
重试对 executor 完全透明,仅在全部重试耗尽后才触发 failover。

🤖 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>
- 将 send_message_stream 中 yield 移至 try/except 外部,避免
  async generator 意外捕获外部 athrow 抛入的 HTTPStatusError;
- 删除 test_stream_429_retries_and_succeeds 中未生效的首段 mock 代码。

🤖 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 668858b into feature/1.x.x May 23, 2026
5 of 6 checks passed
@ThreeFish-AI
ThreeFish-AI deleted the ThreeFish-AI/lahore-v2 branch May 23, 2026 10:08
@ThreeFish-AI ThreeFish-AI mentioned this pull request May 27, 2026
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