Prhub

#38909 [Bugfix][Frontend] Fix Gemma4 streaming HTML duplication after tool calls

原始 PR 作者 yoke233 合并时间 2026-04-08 11:03 文件变更 2 提交数 2 评论 7 代码增减 +64 / -2

执行摘要

修复 Gemma4 流式工具解析器中 HTML 内容重复的 bug。

根据 Issue #38910 描述,Gemma4 工具解析器在流式模式下会损坏普通文本,如将 <div> 变成 <<div>,或在 HTML 工具参数中重复标签前缀如 <<htmlhtml。PR body 指出根因是 current_text 被错误重建,导致无效中间状态。

对于处理工具解析或 Gemma4 模型的工程师值得精读,学习缓冲区管理在流式解析中的正确实践,并参考新增测试作为回归防护示例。

讨论亮点

Review 评论中没有技术争议,所有 review 者(gemini-code-assist[bot]、sfeng33、chaunceyjiang)都批准了 PR。gemini-code-assist[bot] 分析确认变更解决重复问题,Issue 评论中仅涉及合并冲突解决,无设计权衡讨论。结论是修复被接受并验证有效。

实现拆解

主要改动在 vllm/tool_parsers/gemma4_tool_parser.pyextract_tool_calls_streaming 方法中,移除了 current_text = previous_text + delta_text 行,改为直接使用上游的 current_text,避免缓冲 delta 污染累积文本。测试文件 tests/tool_parsers/test_gemma4_tool_parser.py 添加了两个回归测试:test_streaming_does_not_duplicate_plain_text_after_tool_calltest_streaming_html_argument_does_not_duplicate_tag_prefixes,覆盖普通文本和 HTML 参数场景。

文件 模块 状态 重要度
vllm/tool_parsers/gemma4_tool_parser.py tool_parsers modified 7.0
tests/tool_parsers/test_gemma4_tool_parser.py test modified 5.0

关键符号

Gemma4ToolParser.extract_tool_calls_streaming

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

评论区精华

修复验证 正确性

Review 者 gemini-code-assist[bot] 分析变更并确认修复解决 bug,sfeng33 和 chaunceyjiang 快速批准。

结论:PR 被接受并合并,无争议。 · 已解决

风险与影响

风险较低:变更仅限于 Gemma4 工具解析器的流式路径,移除错误逻辑可能引入回归,但新增测试覆盖了关键场景。需注意其他解析器可能不受影响,但 PR 范围集中,且通过测试验证。

影响使用 Gemma4 模型进行流式工具调用的用户,修复了输出损坏问题,提升解析正确性和用户体验。对系统其他部分无直接影响,仅限于前端工具解析模块。

流式解析错误 回归测试添加

关联 Issue

#38910 [Bug]: Gemma4 tool parser duplicates HTML tag prefixes in streamed tool arguments

完整报告

参与讨论