Repository navigation
[Bug] pi-ai 路由声明的 contextWindow 未进入 resolveModelInfo,导致自动压缩静默失效、超限被误报为「额度已用尽」(0.2.0-rc.2) #9022
Replies: 2 comments
⭐ 你的链条我逐行核实了——而且它正好证实了我另一条回答里的推断1. 代码(
|
|
三样都补齐了,逐条对应你的 4.4。 1.
|
⭐ 你的链条我逐行核实了——而且它正好证实了我另一条回答里的推断1. 代码(
|
|
三样都补齐了,逐条对应你的 4.4。 1.
|
Uh oh!
There was an error while loading. Please reload this page.
[Bug] pi-ai 路由声明的
contextWindow未进入resolveModelInfo,导致自动压缩静默失效、超限被误报为「额度已用尽」(0.2.0-rc.2)摘要
在
llm-pi-ai的 providermodels[]中显式声明了contextWindow和maxTokens,但compaction-basic的自动压缩对该路由完全失效:它在压力路径上调ctx.llm.resolveModelInfo()得到info.context === undefined,随即抛TargetPressureConfigError,压缩中止,请求原样发出,被网关以 HTTP 400 拒绝。UI 最终显示 「当前请求的额度已用尽」,但网关的真实响应是 上下文超限 —— 文案与实际错误不一致,会把排查方向带偏。
关键矛盾:异常信息写着 "configure contextWindow on that adapter model",但 pi-ai 路由的
contextWindow已经配在 provider 的models[]里了,只是没有进入llm服务的 model-info 解析链。这条指引对 pi-ai 路由不成立。复现步骤
0.2.0-rc.2,profiledesktop,挂载dsh-llm-pi-aicordis.patch.yml声明一个 OpenAI 兼容网关路由:contextWindow × thresholdRatio(默认thresholdRatio = .8、headroomTokens = 65536,见resolveConfig())观测到的现象
UI 报错文案:
网关侧同一时刻的真实响应:
{"error":{"message":"estimated input tokens exceed the model's context limit", "type":"invalid_request_error","code":"invalid_request_error"}}把该响应体喂给
@deepseek-ai/dsh-llm的isQuotaExceededError五条正则实测:QUOTA(额度)正则 ×5即:网关的错误分类是正确的,是 UI 文案把它错误地呈现成了额度问题。
代码路径
@deepseek-ai/dsh-compaction-basic0.2.0-rc.2,lib/index.js:形成死循环:压缩需要先知道窗口 → 但要触发溢出判定必须先发请求 → 而压缩在压力阶段就已经失败,
context-overflow分支永远进不去。补充:手动
/compact(dsh-command-compact)不受影响,可正常完成 —— 后端本身可用,问题只在自动路径的容量解析。环境信息
0.2.0-rc.2(DSH Desktop,Windows x64,Electron 44.0.0,Node 24.18.1)@deepseek-ai/dsh-llm-pi-ai/@deepseek-ai/dsh-compaction-basic均0.2.0-rc.2/v1/chat/completions一个重要的复现前提:该网关的
/v1/models返回 OpenRouter 风格嵌套 schema:顶层没有
context_length/max_output_tokens。DSH 的模型发现解析扁平字段,因此必须手填contextWindow—— 而手填的值又没进入resolveModelInfo,正是本 issue 的触发条件。冒烟测试
dsh-llm-pi-ai/dsh-compaction-basic0.2.0-rc.2api: openai-completions+ 手填contextWindow: 1048576/maxTokens: 65536)estimated input tokens exceed the model's context limitisQuotaExceededError的五条正则 → 全部不命中;上下文超限正则命中 3 条/compact→ 压缩正常完成(证明后端可用,问题在自动路径)0.2.0-rc.2)。步骤 1-3、5 为本次实际执行并记录的输出。引用代码
@deepseek-ai/dsh-compaction-basic/lib/index.js—compactIfNeeded()中resolveModelInfo后的info.context === void 0抛错分支,以及context-overflow分支的早返回@deepseek-ai/dsh-compaction-basic/lib/index.js—resolveConfig():DEFAULT_THRESHOLD_RATIO = .8、headroomTokens = config.headroomTokens ?? 65536、auto: config.auto ?? true@deepseek-ai/dsh-llm—isQuotaExceededError()正则集合,以及CONTEXT_WINDOW_EXCEEDED_CODE的判定路径对应主仓库源码路径形如
packages/compaction/compaction-basic/src/index.ts。建议方向(供参考)
问题核心是 pi-ai 路由声明的
contextWindow没有汇入llm的 model-info。可能的最小修复面:dsh-llm-pi-ai在注册路由时把models[].contextWindow/maxTokens一并注册进 model-info;compaction-basic在resolveModelInfo返回context === undefined时回退到 pi-ai provider 的声明值;message.failure.quota。影响面
该问题对所有使用 pi-ai 声明网关的用户静默生效:压缩不报错地失效,只在会话涨过阈值后才以「额度已用尽」的形式暴露,排查方向容易带偏。
All reactions