单源 + 上游 429 无 Retry-After 时,一次调用挂满整个 stall window(生产配置下 >20 分钟) #22
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
一句话
单源场景下,上游回 429 且不带
Retry-After时,一次调用会挂满整个 stall window——生产配置LLM__BACKPRESSURE__STALL_WINDOW_S=1200下,每轮阻塞超过 20 分钟才报stalled。怎么发现的
2026-09-05 跑 T10 能力表实测(经 new-api 对 26 个模型逐个打真实请求)时撞到: claude 系三个型号的 key 撞上「7 天限额已用完」、gpt-5.4 全账号限流,上游一律回 429 且不带
Retry-After。探测用例因此每个型号卡住约 20 分钟,只能把 stall window 临时压到 60s 绕开。压到 45s 时实测 46.7s 报
stalled,路径已确认。为什么值得单独修
复现
单源(
LLM__X__1__*,不配第二个源),让上游稳定回 429 且响应头无Retry-After,发一次chat()。观察: 直到 stall window 耗尽才返回。可能的方向(未定)
Retry-After时用退避上限(LLM_RETRY_MAX_DELAY)而不是 stall window 兜底;TransientError.retry_after_s在缺失时取一个保守默认,而不是留空让上层等满;选型需评估与 issue #8(stall window 必须 > TIMEOUT_S × MAX_RETRIES)的相互作用。
现场数据
stalled