Prhub

#41459 fix(frontend): Add multimodal placeholders to Gemma4 tool message template

原始 PR 作者 harshaljanjani 合并时间 2026-05-29 05:48 文件变更 2 提交数 2 评论 16 代码增减 +78 / -0

执行摘要

修复 Gemma4 工具消息中多模态占位符丢失问题

用户报告 Gemma4 在工具调用返回图像时无法正常处理,模板循环仅过滤 type==text 部分,多模态内容被静默丢弃(见 Issue #41452)。上游 HuggingFace 仓库同样存在此 bug,作者同步提交了 HF 修复并均已合并。

建议合并。这是一个明确的 bug 修复,与上游同步,附带充分测试。可关注 Responses API 路径是否能正确传递多模态内容。

讨论亮点
  1. 上游同步策略:维护者 @bbrowning 建议尽量与 HF 官方模板保持一致,除非需要刻意分歧。作者在 HF 提交了修复并成功合并,最终本 PR 也同步了上游变更。
  2. API 规格注意:@bbrowning 指出 Chat Completions API 规范只允许 tool response 中的文本内容,而 Responses API 支持多模态内容。因此该修复主要通过 Responses API 路径生效,但也可能通过 Chat Completions 工作。
  3. 测试有效性:@lucianommartins 曾询问是否仍需要本 PR,因为 HF 模板已修复;作者解释说示例模板可能被用户离线使用,保持同步仍有必要,且测试直接加载本地模板。

实现拆解

  1. 修改 Jinja 模板examples/tool_chat_template_gemma4.jinja):在工具响应文本块渲染之后,新增遍历 tool_body 的循环,对 type == 'image'/'audio'/'video' 分别输出 <|image|>/<|audio|>/<|video|> 占位符,确保后续多模态处理流程能识别。
  2. 添加回归测试tests/renderers/test_gemma4_chat_template.py):增加两个测试用例 – test_tool_response_with_multimodal_content(验证单图像占位符)和 test_tool_response_with_all_modalities(验证图像/音频/视频同时存在时均正确输出)。测试使用与官方示例模板一致的 _render 辅助函数。
  3. 版本同步:PR 在合并前与上游 HF 已合并的模板对齐,并解决了因 #42188 引发的合并冲突,确保 DCO signed-off 通过。
文件 模块 状态 重要度
examples/tool_chat_template_gemma4.jinja 示例模板 modified 4.4
tests/renderers/test_gemma4_chat_template.py 测试 modified 6.34

关键符号

test_tool_response_with_multimodal_content test_tool_response_with_all_modalities

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

评论区精华

与上游 HuggingFace 模板同步策略 设计

维护者 @bbrowning 希望保持 vLLM 示例模板与官方 HF 模板一致,除非必要分歧。作者同步提交了 HF 修复并均已合并。

结论:本 PR 在合并前与上游对齐,并解决了冲突,最终保持一致。 · 已解决

API 规格差异对多模态工具响应的影响 question

@bbrowning 指出 Chat Completions API 只允许 tool response 中的文本,而 Responses API 允许多模态;建议确认模板在 Responses API 路径下工作正常。

结论:未深入讨论,但修复本身使得模板能正确输出占位符,具体 API 路由由其他模块处理。 · acknowledged

风险与影响

低风险。变更仅限 Jinja 模板渲染逻辑,不涉及核心引擎。新增测试覆盖了多模态路径。潜在风险:若用户使用旧版 HF 模板或自定义模板,仍可能遇到问题,但本 PR 不影响默认行为(仅当显式传入 --chat-template 时才使用示例模板)。未发现性能或安全影响。

用户影响:使用 --chat-template examples/tool_chat_template_gemma4.jinja 且启用工具调用的用户现在能正确处理带有多模态内容的 tool response。
系统影响:无,仅模板文件变更。
团队影响:与上游维护者协作的流程范例。

仅模板变更,风险低 测试覆盖多模态路径

关联 Issue

#41452 [Bug]: Gemma4-31B-it deployed on vLLM cannot process images in tool message

完整报告

参与讨论