mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-09-19 16:39:15 +00:00
问题:上游返回上下文超窗时,客户端(pi)既不压缩也不重试,只看到一条 普通上游错误。链路两处叠加: 1. 措辞不在客户端识别列表里。pi 靠 @earendil-works/pi-ai 的 OVERFLOW_PATTERNS(25 条正则)判断超窗,而 justworker 返回的是 「请精简对话历史…(Context window is full…)」——与那 25 条一条都不匹配 (最接近的 /context window exceeds limit/i 也不命中,因为措辞是 "is full" 而非 "exceeds limit")。 2. AUTO 链路的每条 tier 错误按 80 字节 OneLine 截断,而 "Context window is full" 这类短诊断词常出现在尾部,正好被按字节切掉(直连路径是 160 才保住)。 修法: - 新增 overflowMarkers 识别超窗措辞(含中文写法),命中时把客户端可见 错误归一化为 context_length_exceeded 前缀——它命中 pi 的 /context[_ ]length[_ ]exceeded/i,超窗因此可被发现并触发压缩重试。 - AUTO 链路每条 tier 错误宽度 80→160,短诊断词不再被截断。 归一化只加前缀,原始诊断信息保留,便于定位是哪一层超窗。 测试:internal/gateway/overflow_err_test.go(5 例,含「标记必须命中 pi 正则」、非超窗不得误标、80 vs 160 宽度的回归对比)。