问题
MiniMax Token Plan API 在 summary 阶段频繁触发 HTTP 429,即使 PAGEINDEX_MAX_CONCURRENCY=1 仍会触发限流。原重试机制 max_retries=10, sleep=1s 冷却时间不足。
方案
从 VectifyAI/PageIndex PR #343 移植三个核心能力:
- SlidingWindowRateLimiter — 滑动窗口限速器,通过
PAGEINDEX_RPM_LIMIT 控制每分钟请求上限
- _extract_retry_delay() — 智能重试延迟:429 时解析 Retry-After 响应头,无头时指数退避+抖动
- _is_rate_limit_error() — 自动检测 HTTP 429 错误类型
改动
pageindex/index/utils.py — 新增 SlidingWindowRateLimiter 类 + 3 个 429 工具函数;llm_completion/llm_acompletion 用动态延迟替换硬编码 sleep
pageindex/config.py — 新增 rpm_limit 字段、PAGEINDEX_RPM_LIMIT env var、rpm_limit_scope()
pageindex/index/pipeline.py — build_index() 接入 rpm_limit_scope()
用法
PAGEINDEX_RPM_LIMIT=20 # 每分钟最多 20 次调用
问题
MiniMax Token Plan API 在 summary 阶段频繁触发 HTTP 429,即使
PAGEINDEX_MAX_CONCURRENCY=1仍会触发限流。原重试机制max_retries=10, sleep=1s冷却时间不足。方案
从 VectifyAI/PageIndex PR #343 移植三个核心能力:
PAGEINDEX_RPM_LIMIT控制每分钟请求上限改动
pageindex/index/utils.py— 新增 SlidingWindowRateLimiter 类 + 3 个 429 工具函数;llm_completion/llm_acompletion用动态延迟替换硬编码 sleeppageindex/config.py— 新增rpm_limit字段、PAGEINDEX_RPM_LIMITenv var、rpm_limit_scope()pageindex/index/pipeline.py—build_index()接入rpm_limit_scope()用法
PAGEINDEX_RPM_LIMIT=20 # 每分钟最多 20 次调用