执行摘要
- 一句话:修复Cohere推理结束检测,避免历史prompt误判
- 推荐动作:值得精读,特别是
is_reasoning_end的重构逻辑,展示了如何通过状态扫描将范围限定在当前turn。设计决策值得参考。
功能与动机
PR body指出:原始实现简单扫描整个输入是否有<|END_THINKING|>,并且可以在初始turn或中间delta上调用。这意味着它会把旧的thinking token(包括系统turn中提到的)当作thinking结束的信号,导致解析失败并返回特殊token。
实现拆解
- 在
BaseCohereCommandReasoningParser.__init__中新增self.chatbot_token_id和self.start_token_id(原来只有self.end_token_id)。
- 重写
is_reasoning_end方法:从后向前遍历input_ids,遇到<|START_THINKING|>则返回是否看到过end token;遇到<|CHATBOT_TOKEN|>则返回False(表示未结束);遇到<|END_THINKING|>则设置标志。
- 添加单元测试文件
tests/reasoning/test_cohere_command_reasoning_parser.py,包含MockCohereTokenizer和多个ReasoningCase测试用例,覆盖cmd3和cmd4解析器、单工具调用和带emoji的引用情况。
- 在
requirements/test/cuda.in和requirements/test/cuda.txt中添加cohere_melody依赖,以确保测试可用。
关键文件:
vllm/reasoning/cohere_command_reasoning_parser.py(模块 推理解析;类别 source;类型 core-logic;符号 BaseCohereCommandReasoningParser.init, BaseCohereCommandReasoningParser.is_reasoning_end): 核心逻辑变更:修改__init__存储额外token id,重写is_reasoning_end方法实现基于turn边界的检测。
tests/reasoning/test_cohere_command_reasoning_parser.py(模块 测试;类别 test;类型 test-coverage;符号 ExpectedToolCall, ReasoningCase, MockCohereTokenizer, REASONING_CASES): 新增625行测试,覆盖cmd3和cmd4解析器的单工具调用、带emoji的引用等场景,并包含MockCohereTokenizer模拟tokenizer。
requirements/test/cuda.in(模块 测试依赖;类别 test;类型 test-coverage): 添加cohere_melody>=0.9.0依赖,用于Cohere推理解析器测试中的melody过滤库。
requirements/test/cuda.txt(模块 依赖锁定;类别 docs;类型 documentation): 锁定cohere-melody==0.9.0版本,作为CUDA测试环境的依赖。
关键符号:BaseCohereCommandReasoningParser.init, BaseCohereCommandReasoningParser.is_reasoning_end, MockCohereTokenizer.convert_tokens_to_ids, MockCohereTokenizer.get_vocab, MockCohereTokenizer.encode, MockCohereTokenizer.decode
评论区精华
sfeng33 reviewer要求添加单元测试(流式和非流式),作者询问可不可以添加melody作为测试依赖,最终测试被添加。另外有pre-commit失败和测试失败的评论(KeyError: 'cohere2_moe'),但最终被修复并由sfeng33批准合并。
- 添加单元测试覆盖流式和非流式场景 (testing): 作者添加了测试文件,并询问是否可添加melody依赖,最终被接受。
- pre-commit和CI测试失败 (other): 作者修复了问题,最终CI通过。
风险与影响
- 风险:风险较低,因为变更集中在特定的Cohere推理解析器,且添加了全面测试。可能的回归:如果其他代码依赖旧的
is_reasoning_end行为(全局扫描),但该方法是内部使用的,影响范围小。性能影响:新方法遍历整个input_ids,与原来类似,但增加了条件判断,影响微乎其微。
- 影响:用户:修复了Cohere Command模型在对话历史包含旧thinking token时的解析错误,提高可靠性。系统:无性能影响,无架构变更。团队:增加了测试覆盖,有利于未来维护。
- 风险标记:核心路径变更, 测试覆盖已补充
关联脉络
参与讨论