Prhub

#44551 fix: Correct reasoning-end detection for prompt history

原始 PR 作者 jasonozuzu-cohere 合并时间 2026-06-27 13:15 文件变更 4 提交数 34 评论 4 代码增减 +645 / -1

执行摘要

修复 Cohere 推理结束检测,避免历史 prompt 误判

PR body指出:原始实现简单扫描整个输入是否有<|END_THINKING|>,并且可以在初始turn或中间delta上调用。这意味着它会把旧的thinking token(包括系统turn中提到的)当作thinking结束的信号,导致解析失败并返回特殊token。

值得精读,特别是is_reasoning_end的重构逻辑,展示了如何通过状态扫描将范围限定在当前turn。设计决策值得参考。

讨论亮点

sfeng33 reviewer要求添加单元测试(流式和非流式),作者询问可不可以添加melody作为测试依赖,最终测试被添加。另外有pre-commit失败和测试失败的评论(KeyError: 'cohere2_moe'),但最终被修复并由sfeng33批准合并。

实现拆解

  1. BaseCohereCommandReasoningParser.__init__中新增self.chatbot_token_idself.start_token_id(原来只有self.end_token_id)。
  2. 重写is_reasoning_end方法:从后向前遍历input_ids,遇到<|START_THINKING|>则返回是否看到过end token;遇到<|CHATBOT_TOKEN|>则返回False(表示未结束);遇到<|END_THINKING|>则设置标志。
  3. 添加单元测试文件tests/reasoning/test_cohere_command_reasoning_parser.py,包含MockCohereTokenizer和多个ReasoningCase测试用例,覆盖cmd3和cmd4解析器、单工具调用和带emoji的引用情况。
  4. requirements/test/cuda.inrequirements/test/cuda.txt中添加cohere_melody依赖,以确保测试可用。
文件 模块 状态 重要度
vllm/reasoning/cohere_command_reasoning_parser.py 推理解析 modified 6.87
tests/reasoning/test_cohere_command_reasoning_parser.py 测试 added 8.05
requirements/test/cuda.in 测试依赖 modified 3.11
requirements/test/cuda.txt 依赖锁定 modified 1.49

关键符号

BaseCohereCommandReasoningParser.__init__ BaseCohereCommandReasoningParser.is_reasoning_end MockCohereTokenizer.convert_tokens_to_ids MockCohereTokenizer.get_vocab MockCohereTokenizer.encode MockCohereTokenizer.decode

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

添加单元测试覆盖流式和非流式场景 测试

sfeng33 reviewer 要求添加单元测试,包括流式和非流式两种情况,并列出手动测试命令。

结论:作者添加了测试文件,并询问是否可添加 melody 依赖,最终被接受。 · 已解决

pre-commit 和 CI 测试失败 other

pre-commit 检查失败,以及 CI 测试失败(KeyError: 'cohere2_moe')。

结论:作者修复了问题,最终 CI 通过。 · 已解决

风险与影响

风险较低,因为变更集中在特定的Cohere推理解析器,且添加了全面测试。可能的回归:如果其他代码依赖旧的is_reasoning_end行为(全局扫描),但该方法是内部使用的,影响范围小。性能影响:新方法遍历整个input_ids,与原来类似,但增加了条件判断,影响微乎其微。

用户:修复了Cohere Command模型在对话历史包含旧thinking token时的解析错误,提高可靠性。系统:无性能影响,无架构变更。团队:增加了测试覆盖,有利于未来维护。

核心路径变更 测试覆盖已补充

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论