Prhub

#21399 [CI] Add unit tests for function_call detectors (hermes, llama32, mistral)

原始 PR 作者 Lidang-Jiang 合并时间 2026-04-06 10:29 文件变更 3 提交数 4 评论 22 代码增减 +595 / -0

执行摘要

添加 Hermes、Llama32、Mistral 功能调用检测器的 39 个 CPU-only 单元测试。

根据PR body,此变更贡献于Issue #20865(Improve Unit Test Coverage),目标是增强功能调用检测和解析逻辑的可靠性。作者指出这些检测器之前未经测试,新增测试可以验证has_tool_calldetect_and_parse等方法在各种情况下的行为。

建议工程师精读此PR,学习如何为不同格式的检测器设计全面测试用例,特别是流式增量解析的测试方法。关注review讨论中的改进点,如使用CustomTestCase和加强断言,这些是提升测试质量的关键决策。

讨论亮点

Review中主要讨论点:

  1. 基类使用:reviewer ispobock建议使用CustomTestCase而非unittest.TestCase,作者在提交b08821eb8中修正。
  2. CI套件名称:reviewer指出套件名称应为stage-a-cpu-only,但作者引用现有约定和CI配置,坚持使用stage-a-test-cpu
  3. 测试重复性:发现test_mistral_detector.pytest_compact_format_with_closing_bracket是重复测试,作者移除。
  4. 流式测试加强:reviewer和gemini-code-assist[bot]建议加强流式测试断言(如使用assertEqual验证具体数量而非len(all_calls) > 0),并添加Llama32和Mistral的缺失流式测试,作者在后续提交中逐一解决。讨论结论是测试质量得到提升,无未解决疑虑。

实现拆解

实现涉及三个新测试文件:test_hermes_detector.py(11个测试)、test_llama32_detector.py(12个测试)、test_mistral_detector.py(16个测试)。每个文件定义一个继承自CustomTestCase的测试类,在setUp中初始化工具列表和检测器实例。测试方法分为has_tool_call测试、detect_and_parse测试(包括单/多工具调用、前导文本处理等)、流式增量解析测试(模拟分块输入)以及边界情况测试(如畸形JSON)。所有测试通过register_cpu_ci注册到CI的stage-a-test-cpu套件。

文件 模块 状态 重要度
test/registered/unit/function_call/test_hermes_detector.py function_call added 4.0
test/registered/unit/function_call/test_llama32_detector.py function_call added 4.0
test/registered/unit/function_call/test_mistral_detector.py function_call added 4.0

关键符号

TestHermesDetector.test_streaming_incremental_parsing TestLlama32Detector.test_has_tool_call_with_python_tag TestMistralDetector.test_json_array_multiple_tool_calls

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

评论区精华

使用 CustomTestCase 基类 测试

reviewer ispobock 建议使用 CustomTestCase 而非 unittest.TestCase 以保持一致,作者在提交 b08821eb8 中修正所有三个文件。

结论:已修正,测试现在使用 CustomTestCase。 · 已解决

CI 测试套件名称争议 infra

reviewer 认为套件名称应为 stage-a-cpu-only,但作者引用现有约定和 CI 配置,坚持使用 stage-a-test-cpu,并指出其他测试文件均使用此名称。

结论:作者保留原名称,无进一步变更,测试已注册到正确 CI 套件。 · 已解决

流式测试断言加强和补充 测试

gemini-code-assist[bot] 指出流式测试断言过弱(如 len(all_calls) > 0),应使用 assertEqual 验证具体数量和内容,并建议添加 Llama32 和 Mistral 的缺失流式测试。

结论:作者在 b08821eb8 提交中加强断言、添加缺失测试,并在 354a73f 提交中完善 normal_text 断言。 · 已解决

风险与影响

技术风险较低,主要风险包括:

  1. 测试覆盖不全面:尽管覆盖了多种场景,但可能遗漏某些边界条件,如极端嵌套对象或大文本输入。
  2. 测试代码维护性:新增三个文件增加维护负担,但遵循现有测试约定。
  3. 依赖基类变更:测试使用CustomTestCase,若该基类接口变动可能影响测试运行。无性能、安全或兼容性风险,因为这是纯测试代码。

对用户:无直接影响,但间接提高系统可靠性,减少功能调用检测相关的潜在bug。对系统:增加单元测试覆盖率,为Hermes、Llama32、Mistral检测器提供回归保护,未来变更更容易验证。对团队:促进测试文化,为类似检测器测试提供模板;CI运行时间略有增加,但可接受。

测试覆盖不全面 依赖外部基类

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论