Prhub

#46843 [Bugfix][Parser] Pass token IDs to parser.parse() in Responses API and batch serving

原始 PR 作者 bbrowning 合并时间 2026-06-27 03:29 文件变更 3 提交数 2 评论 1 代码增减 +3 / -0

执行摘要

补齐 parser.parse() 的 token_ids 参数传递

PR body 指出:"Chat completion serving already passes model_output_token_ids to parser.parse(), but Responses API and batch serving did not. Wire those call sites to pass token IDs consistently, so that all non-streaming calls to parser.parse() provide token ids and we get consistent parsing logic across all based on those token ids." 这是为后续将解析器从 DelegatingParser 迁移到统一解析器所做的准备性工作。

变更明确且安全,已获批准。关注后续解析器迁移 PR 以了解 token_ids 将如何被利用。

讨论亮点

chaunceyjiang 回复 "lgtm",sfeng33 批准,无实质性讨论或争议。

实现拆解

  1. 批量服务入口:在 vllm/entrypoints/openai/chat_completion/batch_serving.pyparser.parse() 调用中增加 model_output_token_ids=output.token_ids 参数。
  2. Responses API 上下文:在 vllm/entrypoints/openai/responses/context.pyappend_output() 方法中增加 model_output_token_ids=completion.token_ids 参数。
  3. Responses API 输出构造:在 vllm/entrypoints/openai/responses/serving.py_make_response_output_items() 方法中增加 model_output_token_ids=final_output.token_ids 参数。
    每个变更点均只增加一行,不改变已有调用逻辑或返回值。
文件 模块 状态 重要度
vllm/entrypoints/openai/chat_completion/batch_serving.py 入口层 modified 4.35
vllm/entrypoints/openai/responses/context.py 入口层 modified 4.35
vllm/entrypoints/openai/responses/serving.py 入口层 modified 4.35

关键源码片段

vllm/entrypoints/openai/chat_completion/batch_serving.py core-logic

批量服务中 parser.parse() 调用点,缺少 token_ids 参数。

# vllm/entrypoints/openai/chat_completion/batch_serving.py
# 变更位于 parser.parse() 调用处:增加 model_output_token_ids 参数
if parser is not None:
    reasoning, content, _ = parser.parse(
        output.text,
        request=request, # type: ignore[arg-type]
        model_output_token_ids=output.token_ids, # 新增:传递 token IDs
    )
vllm/entrypoints/openai/responses/context.py core-logic

Responses API 上下文中的解析调用点,缺少 token_ids 参数。

# vllm/entrypoints/openai/responses/context.py
# 变更位于 append_output() 方法中的 parser.parse() 调用
if self.response_parser is not None:
    reasoning, content, tool_calls = self.response_parser.parse(
        completion.text,
        self.request,
        enable_auto_tools=self.enable_auto_tools,
        model_output_token_ids=completion.token_ids, # 新增:传递 token IDs
    )
vllm/entrypoints/openai/responses/serving.py core-logic

Responses API 输出构造中的解析调用点,缺少 token_ids 参数。

# vllm/entrypoints/openai/responses/serving.py
# 变更位于 _make_response_output_items() 方法中的 parser.parse() 调用
if parser:
    reasoning, content, tool_calls = parser.parse(
        final_output.text,
        request,
        enable_auto_tools=self.enable_auto_tools,
        model_output_token_ids=final_output.token_ids, # 新增:传递 token IDs
    )

评论区精华

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

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

风险与影响

风险极低。每个调用点仅新增一个关键字参数,且该参数在 chat completion 路径已存在,解析器实现已兼容;未触发任何回归测试失败。

影响范围限于 Responses API 和批量服务的非流式解析路径,使这三个入口的 token_ids 传递行为与 chat completion 对齐。对用户无可见行为变化,对后续解析器重构提供基础。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论