v0.1.8 · 修复模型无思考挡位问题
修复 DeepSeek-V4.1-Flash 没有思考挡位选项(而 GLM-5.3-Flash 有)的问题。
根因
CodeBuddy 上游目录里存在两种 reasoning 行形态:
① 声明集行(有 supportedEfforts)—— 例如 glm-5.3-flash:
"reasoning": { "supportedEfforts": ["low", "high", "max"],
"defaultEffort": "high", "canDisableThinking": true }② 旧式行(只有 effort + summary,没有集合)—— 例如 deepseek-v4.1-flash:
"reasoning": { "effort": "high", "summary": "auto" }插件原来把第二种形态当作"该模型不可选挡位",直接构造 reasoning: false,于是模型选择器里没有挡位按钮。
但这个判断是错的。 实测该端点对 deepseek-v4.1-flash 的响应:
| 传入值 | 结果 |
|---|---|
low / medium / high / xhigh / max |
全部 200 ✅ |
bogus(非法值) |
400 code 11150 the reasoning effort value is not supported by the current model |
两个模型接受的范围完全一致。官方 CLI 的行为也印证了这点:它只判断 supportsReasoning,然后套用全局 reasoningEffort 设置,其允许值就是这个固定阶梯,从不查询逐模型集合。
修复
- 声明集仍然权威:上游声明了就用声明的值
- 没有声明集时,回退到标准阶梯
low / medium / high / xhigh / max - 有意不含
minimal—— 它不在上游的 effort 词汇表内,尽管实测端点接受,但发送词汇表之外的档位属于越界 off(关闭思考)仍只在canDisableThinking === true时提供,旧式行都不满足
顺带修正了 catalog.ts 里的一处错误注释(它声称"已为这些行提供完整阶梯",而代码实际做的是相反的),注释与实现互相矛盾正是这个 bug 长期未被发现的原因。
修复后各模型提供的挡位
| 模型 | 来源 | 提供的挡位 |
|---|---|---|
| deepseek-v4.1-flash | 标准阶梯 | low, medium, high, xhigh, max |
| deepseek-v4-pro | 标准阶梯 | low, medium, high, xhigh, max |
| glm-5.3-flash | 声明集 | low, high, max, off |
| glm-5.3 | 声明集 | low, high, max, off |
| hy4-preview | 声明集 | high |
| hy3-x | 声明集 | low, high |
注意:本次修复同时让
auto/glm-5.1/glm-5.2/kimi-*/minimax-m3等旧式行也获得了挡位选项 —— 依据是与官方 CLI 行为保持一致;如你希望只对部分模型生效,请反馈。
验证
- 测试 190 通过 / 1 跳过(新增 8 条挡位策略回归测试)
- 对真实上游端点实测确认挡位接受范围
- 与本机已安装的 CodeBuddy CLI 二进制逻辑逐一比对
- 构建产物实测已包含该修复
升级与生效
dsh plugin --profile web add dsh-codebuddy-cli装好后重启 dsh web,模型选择器里 DeepSeek-V4.1-Flash 就会出现推理挡位选项。