Repository navigation
llm-pi-ai 缺少「每请求图片张数」预算:遇到有硬性图片上限的路由(opencode-go / deepseek-v4.1-flash,>16 张)会让整个会话永久报废 #12241
Closed
bailihua93
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
现象
一个以截图为主的会话里,用
read_image读入第 17 张图片之后,请求开始失败:之后每一轮都在第 1 步就失败,usage 全为 0(请求体根本没被接受)。也就是说这个会话
永久无法继续,而 UI 里没有任何办法把历史中的旧图片去掉。
最小复现(同一 key、同一路由,直接打 API)
可见上限与体积无关:16 张共约 14MB 可以通过,17 张共约 225KB 反而失败。
上限是模型级而非路由级:同一个 key 下
deepseek-v4-pro、claude-haiku-5-5分别接受17 / 32 / 64 张图片(均 200),只有
deepseek-v4.1-flash的后端(错误信息中的"atlas")卡在 16 张。
在 dsh 内的复现路径:在同一个会话里连续调用
read_image17 次,然后继续对话即可。预期行为
适配器应该统计请求中的图片出现次数,超限时以
IMAGE_OFFLOAD_REQUIRED失败(就像llm-deepseek适配器那样),从而让dsh-compaction-image-offload把最旧的图片替换成占位文本并重试本次请求。
实际行为
返回的只是一个通用的
INVALID_REQUEST400:不会抛出IMAGE_OFFLOAD_REQUIRED,image-offload 插件不会动作,该轮次直接报错结束;而图片仍然留在历史里,于是后续每一轮
都复现同一个 400。
根因(看起来是某一个适配器漏接)
@deepseek-ai/dsh-llm的offloadedImagePrefixCount()本来就支持budget.maxImages与budget.countQuantum。@deepseek-ai/dsh-llm-deepseek已经接上了:bounds()传入maxImages: connection.maxImagesPerRequest(默认 600)和countQuantum: connection.imageOffloadCountQuantum(默认 20)。@deepseek-ai/dsh-llm-pi-ai只传了{ representation: "base64", maxBytes }给requiredImageOffload;其 provider profile schema 里只有maxRequestImageBytes/requestImageMaxBytes/requestImagePixelBudget,完全没有张数预算字段。建议修复
maxRequestImages(正整数,默认 600,与 llm-deepseek 对齐),并在
requiredImageOffload的预算对象里作为maxImages传入(可另加
countQuantum)。inputLimits.images.maxCount中为opencode-go/chat:deepseek-v4.1-flash设为 16。注意:仅靠 deepseek 适配器的 600 默认值对这条路由仍然过高,按模型给值才是真正的修法。
用户可见路径("卸载旧图片后重试"),而不是直接结束轮次。
影响面
任何截图密集的会话(浏览器 QA、UI 走查、视觉 diff)都会撞上——17 张截图是很低的门槛,
而且失败是永久性的,不是瞬时抖动。
已验证的临时绕过
把该会话的模型切换为
claude-haiku-5-5,待发的请求即可通过;随后执行/compact压缩掉旧图片。
All reactions