Replies: 4 comments 1 reply
|
补充本地已验证的方案,望觉得合适尽快合入,不然大家看到错误就是统一的 「API key is invalid」,和瞎子一样 修改方案:HTTP 403 授权拒绝被归类为 AUTH 并被掩码问题本质403(凭据有效、请求被策略拒绝)与 401(凭据无效)在错误分类上被合并为 修改一:
|
|
核验通过(对照 main/master HEAD 1. 三处代码主张全部成立。 2. 重试语义无回归(可以放心拆)。 3. 增量点一(pi-ai 的消息正则本质是启发式)。 deepseek adapter 有结构化 status,分类是确定性的;pi-ai 的 4. 增量点二(403 语义不唯一,FORBIDDEN 用原文展示恰好覆盖)。 部分网关把配额/权限不足也返回 403; 结论:方案 + 测试改动 + README 错误码清单(AUTH (401), FORBIDDEN (403))完整,cherry-pick 就绪。我来做一个基于 main 99f6f02 的验证分支(跑两包测试 + typecheck),然后贴链接。 |
|
分支已建好并验证,cherry-pick 就绪: https://github.com/zoahdev/deepseek-harness/tree/fix/error-classify-403-forbidden
补充说明:pi-ai 的分类目前仍依赖 SDK 错误消息文本含状态码(stream.ts:39-40 正则匹配)——本轮分支保持最小改动,结构化 status 路径可作为后续加固(已在 patch queue 备注)。PR 通道开放时可直接 cherry-pick,或由你按自己仓库流程提交,随意使用。 |
|
这里补充说明一下:这个分支是我基于当时 main 做的社区验证/可 cherry-pick 分支,但我没有 deepseek-ai/deepseek-harness 上游仓库的合并权限,也无法直接把它合入主分支。外部 PR 通道当时也处于不接收状态,所以我能做的是把最小补丁、测试结果和分支准备好,交由维护者按上游流程采纳。此前没有把“验证就绪”和“有权合并”之间的边界说清楚,是我的疏忽。 |
Uh oh!
There was an error while loading. Please reload this page.
现象
配置了自定义网关 baseURL 后,模型请求返回 403,但 UI 只显示"本轮运行失败 API key is invalid",看不到真实原因。实际密钥是有效的(
GET /models可正常返回模型列表)。复现步骤
settings.yaml配置llm-deepseek或llm-pi-ai的自定义baseURL(指向某网关),并配置有效 API key网关实际响应
根因
packages/llm/llm-deepseek/src/adapter.ts的httpErrorCode():401和403都被映射为AUTHpackages/llm/llm-pi-ai/src/stream.ts的classifyPiAiError():同样把 401/403 文本归类为AUTHpackages/client/runtime/src/client/sessions/failure-display.ts:对AUTH掩码为固定文案"API key is invalid"(注释说明是为避免 401 消息回显凭据)影响
建议修复
401 → AUTH,403 → FORBIDDENFORBIDDEN在 UI 直接展示 provider 原始消息(403 表示凭据已被接受,仅被策略拒绝,消息不会回显凭据,安全)AUTH保留现有掩码(401 消息可能回显凭据片段)备注
本地已有该修复的实现草稿(拆分后 FORBIDDEN 自动暴露原始消息),如有需要可整理成 PR。
环境:
@deepseek-ai/dsh@0.1.0-rc.7(npx @deepseek-ai/dsh web)All reactions