Repository navigation
请求体超过网关上限时,错误被显示为「API 密钥无效」;AUTH 归类掩盖了真实原因 #7799
zhaocjiang
started this conversation in
General
Replies: 1 comment
这个误报我能指出确切的机制:403 被分类器直接归成了
|
0 replies
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.
Summary
当上游网关因请求体超过体积上限而拒绝请求时,DSH 会把这次失败显示成 「API 密钥无效」。用户看到的是认证错误,实际问题却是请求体积;而网关返回的真实错误信息在 UI 里无法取得。
Reproduction
api: openai-completions(由dsh-llm-pi-ai服务)的 provider,指向一个对请求体有体积上限的 OpenAI 兼容网关。体积阈值可用同一把 key、同一模型直接复现(只有体积在变):
{"message":"Insufficient account balance","type":"bad_response_status_code"}7 MB 用同一把 key 成功,说明该 403 是体积触发的产物,与凭据或余额无关。
Current behavior
UI 渲染为
本轮运行失败 API 密钥无效,错误码AUTH。而网关实际返回:网关自身日志显示真实原因与故障转移链:
即:主渠道以 413(体积超 8 MiB)拒绝,网关转移到备用渠道,备用渠道因无关原因返回 403。DSH 只看到最后的 403。
三处成因(按影响排序):
1.
failureMessage在AUTH时丢弃真实错误(对用户最误导)dsh-client-ui-chat/lib/client.js:code === "AUTH"时真实message被丢弃、替换成固定文案,用户既看不到Insufficient account balance,也看不到任何细节,只会被告知去检查 API key。2.
401|403在 413 分支之前就被归类为AUTHdsh-llm-pi-ai/lib/index.js的classifyPiAiError:413 分支已存在,但含
403的消息会先返回AUTH。(dsh-llm-deepseek/lib/index.js:1527有同样的401||403 → AUTH映射。)该顺序还与故障转移相互作用:413 与 403 可能出现在同一次逻辑失败里,只有最后一个能活到归类阶段。3. 默认图片预算(20 MiB)可能高于网关上限
dsh-llm-pi-ai/lib/index.js:其文档注释已准确描述了这个意图:
本次正是如此:网关上限为 8 MiB,而默认 20 MiB 高于它,卸载策略在网关拒绝之前根本不会触发。
Expected behavior
AUTH时不替换真实错误,展示(或附加)底层 message。classifyPiAiError顺序/判据,使体积信号不被403掩盖;可考虑区分「体积被拒后经故障转移产生的 403」。Environment
@deepseek-ai/dsh0.1.5-rc.2api: openai-completions(dsh-llm-pi-ai),OpenAI 兼容网关,请求体上限 8 MiB(8388608 B)备注:
/compact不能缓解实测压缩完成后(文本 0.04 MB、0 张图片),下一轮仍然 403。压缩只减少文本,图片载荷会从历史里被重新内联。可行规避是按 provider 下调图片预算:
已验证可解决。
All reactions