Prhub

#41003 [Bugfix] use `served_model_name` for multimodal error message

原始 PR 作者 msanft 合并时间 2026-04-27 23:22 文件变更 2 提交数 1 评论 3 代码增减 +18 / -1

执行摘要

多模态错误信息改为展示用户可读模型名

vllm/multimodal/registry.pycreate_processor 方法中,当 model_config.is_multimodal_modelFalse 时,错误信息直接使用 model_config.model(通常是模型权重路径),对用户不友好。本 PR 改用 model_config.served_model_name(即用户指定的模型名称),若未配置则仍使用原路径。参考 PR body:“improve the non-multimodal error ... to show a user-facing model name ... instead of the model weights path.”

该 PR 改动简单清晰,适合快速合入。不建议深入阅读。

讨论亮点

gemini-code-assist[bot] 在 review 中指出:ModelConfig 初始化时已通过 get_served_model_nameserved_model_name 扁平化为单个字符串(参见 vllm/config/model.py 第 464 行),因此代码中不需要判断 isinstance(model_name, list) 的情况。最终合入版本已采纳此建议,直接使用 model_config.served_model_name or model_config.model 简化逻辑。同时,建议测试 mock 中的 served_model_name 改为字符串以匹配实际行为,最终版本也已调整。

实现拆解

  1. vllm/multimodal/registry.pycreate_processor 方法中,raise ValueError 前新增一行 model_name = model_config.served_model_name or model_config.model,然后使用 model_name 替换原来直接引用的 model_config.model
  2. tests/multimodal/test_registry.py 中新增测试函数 test_create_processor_error_uses_served_model_name,使用 SimpleNamespace 模拟 ModelConfig,设置非多模态模型、权重路径和 served_model_name,断言异常信息中包含“friendly-model-name”。
  3. 新增 from types import SimpleNamespace 导入。
文件 模块 状态 重要度
vllm/multimodal/registry.py 多模态 modified 5.32
tests/multimodal/test_registry.py 测试 modified 4.82

关键符号

create_processor

关键源码片段

vllm/multimodal/registry.py core-logic

核心变更文件,修改错误信息中模型名称的来源。

# vllm/multimodal/registry.py (create_processor 方法片段 )
def create_processor(
    self,
    model_config: "ModelConfig",
    *,
    tokenizer: TokenizerLike | None = None,
    cache: BaseMultiModalProcessorCache | None = None,
) -> BaseMultiModalProcessor[BaseProcessingInfo]:
    """
    为指定模型和分词器创建多模态处理器。
    """
    if not model_config.is_multimodal_model:
        # 优先使用用户友好的 served_model_name,否则回退到模型权重路径
        model_name = model_config.served_model_name or model_config.model
        raise ValueError(f"{model_name} is not a multimodal model")
​
    model_cls = self._get_model_cls(model_config)
    factories = model_cls._processor_factory
    ctx = self._create_processing_ctx(model_config, tokenizer)
    return factories.build_processor(ctx, cache=cache)
tests/multimodal/test_registry.py test-coverage

新增单元测试覆盖错误信息中使用 served_model_name 的场景。

# tests/multimodal/test_registry.py ( 新增 )
from types import SimpleNamespacedef test_create_processor_error_uses_served_model_name():
    # 模拟一个非多模态模型的 ModelConfig
    model_config = SimpleNamespace(
        is_multimodal_model=False,
        model="/path/to/model/weights",
        served_model_name="friendly-model-name",
    )
    with pytest.raises(
        ValueError,
        match="friendly-model-name is not a multimodal model",
    ):
        MULTIMODAL_REGISTRY.create_processor(model_config)

评论区精华

简化 served_model_name 提取逻辑 设计

gemini-code-assist[bot] 指出,ModelConfig 初始化时已通过 get_served_model_name 将 served_model_name 处理为字符串,无需在 registry.py 中手动处理 list 情况。

结论:采纳建议,直接使用 `model_config.served_model_name or model_config.model` 简化。 · 已解决

测试 mock 中 served_model_name 类型 测试

gemini-code-assist[bot] 建议测试 mock 使用字符串而非列表以匹配实际 ModelConfig 行为。

结论:采纳建议,修改为字符串 "friendly-model-name"。 · 已解决

风险与影响

变更范围极小(仅修改一行错误信息),不涉及核心逻辑或性能路径。风险极低。

仅影响非多模态模型调用 create_processor 时的错误信息展示,对系统其他功能无影响。用户体验得到小幅提升。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论