Prhub

#22586 [Test] Fix flaky `test_function_call_required` by adding `strict=True`

sgl-project/sglang · 作者 hnyls2002 · 合并时间 2026-04-11 17:14

分析状态 已生成
文件变更 1提交数 1 · 评论 2
代码增减 +5 / -0
bugfix test run-ci deepseek

执行摘要

修复工具调用测试的随机失败问题,通过添加 strict=True 确保参数模式强制约束。

PR #21593之后,tool_choice="required" + strict=false(默认)不再通过约束解码强制执行参数模式——只保证产生工具调用,参数是尽力而为的。小型模型(如Llama-3.2-1B)偶尔在没有模式约束的情况下生成空{}参数,导致约30%的随机失败。PR #21593正确更改了协议语义,但遗漏了更新此测试文件(只有test_tool_choice.py更新了strict=True)。

该PR变更简单直接,无需深入阅读。值得关注的是gemini-code-assist[bot]的建议——考虑将strict=True一致地应用于其他相关测试用例,以全面消除随机失败风险。

讨论亮点

gemini-code-assist[bot]在review中建议将此修复一致地应用于同一文件中使用tool_choice='required'的其他测试用例(如test_function_call_specific和test_streaming_multiple_choices_finish_reason),以避免类似随机失败。但PR作者未回应此建议,PR已合并。

实现拆解

实现非常简单:在test/registered/openai_server/function_call/test_openai_function_calling.py文件的test_function_call_required方法中,为tools列表中的每个工具添加strict=True字段。这确保了约束解码强制执行参数模式,防止小型模型生成空参数。

文件 模块 状态 重要度
test/registered/openai_server/function_call/test_openai_function_calling.py 测试 /OpenAI 服务器 / 函数调用 modified 3.0

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

关键符号

test_function_call_required

评论区精华

测试用例一致性修复 测试

gemini-code-assist[bot] 建议将 strict=True 修复一致地应用于同一文件中其他使用 tool_choice='required' 的测试用例,以避免类似随机失败。

结论:PR 作者未回应此建议,PR 已合并,其他测试用例未修改。 · 未解决

风险与影响

风险极低:仅修改测试文件,不涉及生产代码。潜在风险是其他使用tool_choice='required'的测试用例可能仍然存在随机失败,但不会影响系统功能。

影响范围仅限于测试稳定性:修复了特定测试用例的随机失败,提高了CI可靠性。对用户、系统或团队无直接影响。

测试覆盖不完整

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

  • 一句话:修复工具调用测试的随机失败问题,通过添加strict=True确保参数模式强制约束。
  • 推荐动作:该PR变更简单直接,无需深入阅读。值得关注的是gemini-code-assist[bot]的建议——考虑将strict=True一致地应用于其他相关测试用例,以全面消除随机失败风险。

功能与动机

PR #21593之后,tool_choice="required" + strict=false(默认)不再通过约束解码强制执行参数模式——只保证产生工具调用,参数是尽力而为的。小型模型(如Llama-3.2-1B)偶尔在没有模式约束的情况下生成空{}参数,导致约30%的随机失败。PR #21593正确更改了协议语义,但遗漏了更新此测试文件(只有test_tool_choice.py更新了strict=True)。

实现拆解

实现非常简单:在test/registered/openai_server/function_call/test_openai_function_calling.py文件的test_function_call_required方法中,为tools列表中的每个工具添加strict=True字段。这确保了约束解码强制执行参数模式,防止小型模型生成空参数。

关键文件:

  • test/registered/openai_server/function_call/test_openai_function_calling.py(模块 测试/OpenAI服务器/函数调用): 唯一修改的文件,修复了test_function_call_required测试用例的随机失败问题。

关键符号:test_function_call_required

评论区精华

gemini-code-assist[bot]在review中建议将此修复一致地应用于同一文件中使用tool_choice='required'的其他测试用例(如test_function_call_specific和test_streaming_multiple_choices_finish_reason),以避免类似随机失败。但PR作者未回应此建议,PR已合并。

  • 测试用例一致性修复 (testing): PR作者未回应此建议,PR已合并,其他测试用例未修改。

风险与影响

  • 风险:风险极低:仅修改测试文件,不涉及生产代码。潜在风险是其他使用tool_choice='required'的测试用例可能仍然存在随机失败,但不会影响系统功能。
  • 影响:影响范围仅限于测试稳定性:修复了特定测试用例的随机失败,提高了CI可靠性。对用户、系统或团队无直接影响。
  • 风险标记:测试覆盖不完整

关联脉络

  • PR #21593 Fix tool call constrained decoding and parsing for models with native formats: 该PR引入了协议语义更改,导致本PR修复的测试随机失败问题。本PR是#21593的后续修复。

参与讨论