Prhub

#38172 [Misc] Add 20 regression tests for 11 tool parser bug fixes

原始 PR 作者 bbrowning 合并时间 2026-04-01 11:00 文件变更 7 提交数 3 评论 7 代码增减 +700 / -0

执行摘要

为 11 个工具解析器 bug 修复添加 20 个回归测试,防止功能回归。

根据PR body,作者与Claude Code审计了2025年9月至今的工具解析器bug修复PR,发现多个修复落地时缺少对应测试覆盖。目的是添加纯增测试覆盖,以防止在重构、清理和重新设计这些区域时出现回归。

建议:

  • 对于工具解析器开发工程师:值得精读,以了解各种edge cases和bug修复的测试设计。
  • 对于测试工程师:可参考这些测试作为模型特定解析器测试的范例。
  • 对于一般读者:若非相关模块维护者,可略过,重点关注讨论中的技术权衡。
讨论亮点

review中主要讨论点:

  • gemini-code-assist[bot]test_minimax_m2_tool_parser.py第541行指出JSON字符串可能缺少闭合括号,但作者bbrowning 反驳称gemini误数了括号,JSON实际有效。结论是问题已解决,无代码变更。
  • 其他reviewer(sfeng33, aarnphm, chaunceyjiang)简单批准,未提出实质性讨论。

实现拆解

实现方案涉及修改7个测试文件,每个文件针对特定模型工具解析器添加回归测试:

  1. tests/tool_parsers/test_deepseekv32_tool_parser.py:测试分隔符保留和skip_special_tokens调整。
  2. tests/tool_parsers/test_glm4_moe_tool_parser.py:测试零参数工具调用、分隔符处理和Unicode字符保留。
  3. tests/tool_parsers/test_kimi_k2_tool_parser.py:测试原生工具调用ID提取和多轮ID连续性。
  4. tests/tool_parsers/test_minimax_m2_tool_parser.py:测试anyOf nullable参数解析。
  5. tests/tool_parsers/test_mistral_tool_parser.py:测试快速去令牌化文本检测。
  6. tests/tool_parsers/test_qwen3coder_tool_parser.py:测试畸形XML防崩溃、anyOf参数双重编码和流式解码。
  7. tests/tool_parsers/test_step3p5_tool_parser.py:测试MTP风格可变块和多令牌流式处理。
文件 模块 状态 重要度
tests/tool_parsers/test_deepseekv32_tool_parser.py 工具解析器测试 modified 3.0
tests/tool_parsers/test_glm4_moe_tool_parser.py 工具解析器测试 modified 3.0
tests/tool_parsers/test_kimi_k2_tool_parser.py 工具解析器测试 modified 3.0
tests/tool_parsers/test_minimax_m2_tool_parser.py 工具解析器测试 modified 4.0
tests/tool_parsers/test_mistral_tool_parser.py 工具解析器测试 modified 3.0
tests/tool_parsers/test_qwen3coder_tool_parser.py 工具解析器测试 modified 3.0
tests/tool_parsers/test_step3p5_tool_parser.py 工具解析器测试 modified 3.0

关键符号

test_delimiter_preserved_fast_detokenization test_zero_argument_tool_call test_native_id_extracted_and_placed_on_tool_call test_anyof_nullable_param_non_null_value test_fast_detokenization_text_detection test_malformed_xml_no_gt_delimiter test_streaming_mtp_variable_chunks

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

评论区精华

JSON 字符串正确性检查 正确性

gemini-code-assist[bot] 指出第 541 行 JSON 字符串可能缺少闭合括号,导致 json.loads 失败;bbrowning 回复称 gemini 误数了括号,JSON 实际有效。

结论:作者确认 JSON 正确,无需修改;gemini 的警告为误报。 · 已解决

风险与影响

风险较低:

  1. 测试假阳性/假阴性:新增测试可能因实现错误导致误报或漏报,但所有测试已通过验证。
  2. JSON解析风险:gemini指出的JSON字符串问题已被作者确认正确,降低了解析错误风险。
  3. 合并冲突处理:作者在提交历史中解决了与PR #38189的冲突,确保了测试与最新代码库兼容。

影响分析:

  • 对用户:无直接功能影响,但通过增强测试覆盖提升了工具解析器的稳定性和可靠性,间接改善用户体验。
  • 对系统:增加测试代码量(700行添加),可能轻微增加测试执行时间,但提升了回归防护能力。
  • 对团队:为后续重构和清理工作提供了安全网,减少了因未测试bug修复导致的回归风险。
测试假阳性风险 合并冲突处理

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论