Skip to content

fix(utility-model): 直连 Anthropic Messages 用真实 API model id,剥离 SDK [1m] 后缀 - #2469

Open
gardenZzz wants to merge 1 commit into
makecindy:mainfrom
gardenZzz:fix/utility-anthropic-messages-model-id-clean
Open

fix(utility-model): 直连 Anthropic Messages 用真实 API model id,剥离 SDK [1m] 后缀#2469
gardenZzz wants to merge 1 commit into
makecindy:mainfrom
gardenZzz:fix/utility-anthropic-messages-model-id-clean

Conversation

@gardenZzz

@gardenZzz gardenZzz commented Aug 11, 2026

Copy link
Copy Markdown

这次改了什么

摘要

修复 #2429:Auto-review / 任务摘要等 utility one-shot 路径在内置 anthropic 分支直连 /v1/messages 时,把 Claude Code SDK 的 wire 字符串(如 claude-fable-5[1m])原样发进请求体。

[1m] 是 maker-core toSdkModelString 为 SDK 识别 1M beta 通道追加的内部后缀(契约明确「SDK 细节不外泄给调用方」)。Anthropic Messages API 不认它,对 1M 上下文模型(fable/opus/sonnet)恒返回 404 → reviewer 拿不到结果 → Auto 模式 fail-closed 成 [AUTO_REVIEW_UNAVAILABLE]。主对话链正常是因为它走 Claude Code SDK + 本地代理,SDK 内部翻译了 [1m]

变更类型

  • fix 缺陷修复

范围

UI 变化

不涉及:本改动只调整 utility 请求体 model 字段,无视觉、布局、动效或文案变化。

怎么验证的

自动验证

pnpm --filter desktop run --if-present typecheck
结果:PASS

pnpm --filter desktop vitest run src/main/utility-model/__tests__/oneShotCandidates.test.ts
结果:PASS(46 条,含新增 2 条)

全量 test:unit 由 fork client-ci(同 SHA 15c9de259)验证:https://github.com/gardenZzz/cindy/actions/runs/31506118835 (8/8 job success)。

手工验证

不涉及(主仓 CI 需维护者放行,fork CI 等价验证已全绿)。

未执行的验证

无。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:仅内置 anthropic 的 Messages 直连路径(utility one-shot)。
  • 回滚方式:revert 本 PR 即可。

Closes #2429

@gardenZzz
gardenZzz requested a review from a team as a code owner August 11, 2026 15:16
@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 修正内置 Anthropic utility one-shot 直连 Messages API 时的模型 ID:继续复用 SDK 的上下文窗口判定,但在发出请求前剥离 SDK 专用的 [1m] 后缀。

  • 新增 Anthropic Messages 专用模型 ID 转换
  • 保持自定义及兼容供应商的模型 ID 透传行为不变
  • 增加 1M 与非 1M Claude 模型的请求体测试

Confidence Score: 5/5

当前变更看起来可以安全合并。

未发现仍然存在的阻塞性故障。

Important Files Changed

Filename Overview
apps/desktop/src/main/utility-model/oneShotCandidates.ts 内置 Anthropic 直连分支改用 provider-native 模型 ID,避免将 SDK [1m] 后缀发送到 Messages API。
apps/desktop/src/main/utility-model/tests/oneShotCandidates.test.ts 更新并扩充 Anthropic 请求体断言,覆盖 1M 上下文模型和普通 Claude 模型。

Reviews (2): Last reviewed commit: "fix(utility-model): 直连 Anthropic Message..." | Re-trigger Greptile

@MagicLizi MagicLizi added the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Aug 11, 2026

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

格式门:请补充 PR 描述

此 PR 未通过自动化格式检查,请补充以下内容后重新请求 review:

缺失项

  • 这次改了什么:Description 中需要说明具体改动内容(目前描述不完整)
  • 怎么验证的:需要补充验证方式(测试结果、手工验证步骤等)

请参考 PR 模板 补充完整后,提交新 commit 或直接 gh pr edit 更新描述,下一轮自动审查会重新检查。

@gardenZzz

Copy link
Copy Markdown
Author

@MagicLizi 已按 PR 模板补全描述(「这次改了什么」含摘要/变更类型/范围/UI 变化,「怎么验证的」含 typecheck + 定向测试 + fork CI 链接,「风险」完整)。请重新审查,谢谢。

fork client-ci 等价验证(同 SHA 15c9de259,8/8 job success):https://github.com/gardenZzz/cindy/actions/runs/31506118835

…] 后缀 (makecindy#2429)

Auto-review / 任务摘要等 utility one-shot 路径在内置 anthropic 分支直连
/v1/messages 时,把 Claude Code SDK 的 wire 字符串(如 claude-fable-5[1m])
原样发进请求体。`[1m]` 是 maker-core toSdkModelString 为 SDK 识别 1M beta
通道追加的内部后缀(SDK 细节不外泄给调用方),Anthropic API 不认它,
对 1M 上下文模型(fable/opus/sonnet)恒返回 404 → reviewer 拿不到结果 →
Auto 模式 fail-closed 成 `[AUTO_REVIEW_UNAVAILABLE]`。

修复:在 anthropic 分支把目录 model id 经新的 toAnthropicMessagesModelId
转换后发出——复用 toSdkModelString 的窗口口径但剥掉 `[1m]` 后缀,得到
provider-native 的 API model id。转换只作用于内置 anthropic 的 Messages
直连路径;自定义/兼容供应商保持各自 model 透传,不做全局剥离。

验证:desktop typecheck 通过;oneShotCandidates 定向测试 46 条全绿
(含新增:1M 模型 claude-fable-5/claude-opus-5 直连 body 不含 `[1m]`,
非 1M Haiku 不回归);全量 test:unit 交 CI(fork client-ci 同 SHA 验证)。

Closes makecindy#2429

Signed-off-by: GardenX <20606485+gardenZzz@users.noreply.github.com>
@gardenZzz

Copy link
Copy Markdown
Author

状态更新

格式门(MagicLizi CHANGES_REQUESTED)

PR body 已按模板补全:

  • 「这次改了什么」:摘要 / 变更类型 / 范围 / UI 变化
  • 「怎么验证的」:typecheck + 定向 vitest + fork client-ci 链接
  • 「风险」完整

请重新扫描格式门,谢谢。

CI Linux unit tests (1/2) 失败定位

真实失败(非 warn 噪音):

FAIL src/renderer/__tests__/customProviderDialogPresetLocale.test.tsx
  > CustomProviderDialog preset locale ownership
  > dismisses only the model picker on its scrim gesture
TestingLibraryElementError: Unable to find role="heading" and name "settings.providers.custom.fetch.pickerTitle"

与本 PR 无关:本 PR 只改

  • apps/desktop/src/main/utility-model/oneShotCandidates.ts
  • apps/desktop/src/main/utility-model/__tests__/oneShotCandidates.test.ts

同 SHA 的 fork client-ci 8/8 全绿:https://github.com/gardenZzz/cindy/actions/runs/31506118835
本地重跑该 flaky 测 9/9 PASS。

已 rebase 到最新 upstream/main 并 force push 触发重跑。

@gardenZzz
gardenZzz force-pushed the fix/utility-anthropic-messages-model-id-clean branch from 15c9de2 to afea46f Compare August 12, 2026 05:45
@MagicLizi MagicLizi added status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) status:ci-running CI 还在跑(review-pr 自动维护,仅展示) and removed status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) status:ci-running CI 还在跑(review-pr 自动维护,仅展示) labels Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Auto-review 持续 fail-closed:utility/one-shot 路径未翻译模型 id,直发 claude.ai /v1/messages 得 404(0.1.44 复现)

2 participants