Prhub

#44955 Fix parallel_tool_calls: null treated as false instead of default true

原始 PR 作者 factnn 合并时间 2026-06-16 05:14 文件变更 1 提交数 3 评论 3 代码增减 +2 / -2

执行摘要

修复 null parallel_tool_calls 错误截断为单个工具调用

关联 issue #44948 指出,parallel_tool_calls: null 在 API 中未定义,但默认值为 true,显式 null 应等同于省略该字段。原实现中真值检查导致 None 被误判为 false,截断响应。修复后与 Rust 前端中 unwrap_or(true) 行为对齐。

值得合并,修复显而易见的行为偏差。建议后续增加测试覆盖 None 情况。也可关注正在进行的 Rust 前端迁移(PR #44760),确保两端一致性。

讨论亮点

审查人 bbrowning 在批准时评论:“我同意显式 None/null 应与未提供时的行为一致,即默认允许并行。这是我原实现中的疏忽,感谢修复!”

实现拆解

  1. vllm/entrypoints/serve/utils/tool_calls_utils.pymaybe_filter_parallel_tool_calls 函数中,将条件判断从 if request.parallel_tool_calls: 改为 if request.parallel_tool_calls is not False:
  2. 同时更新函数文档字符串,从 "Filter to first tool call only when parallel_tool_calls is False." 改为 "Filter to first tool call only when parallel_tool_calls is explicitly False.",明确仅显式 false 时触发过滤。
  3. 修改对应变量,属于核心逻辑的语义修复,不影响其他模块。
文件 模块 状态 重要度
vllm/entrypoints/serve/utils/tool_calls_utils.py 前端 modified 5.07

关键符号

maybe_filter_parallel_tool_calls

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

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。仅修改单行判断逻辑,从真值检查变为显式 is not False,覆盖所有预期输入。无测试配套(但原始行为有误,新增测试应作为后续补充)。不影响其他模块或配置。

影响范围局限于 Python 前端中 parallel_tool_calls 字段的过滤行为。对用户而言,显式传入 null 不再错误截断,行为与文档一致。对系统无性能或兼容性影响。

缺少测试覆盖

关联 Issue

#44948 [Bug]: explicit `parallel_tool_calls: null` is filtered like false instead of the documented "true" default

完整报告

参与讨论