Prhub

#44500 [Rust Frontend] Skip loading multimodal processor if `--language-model-only` is specified

原始 PR 作者 BugenZhao 合并时间 2026-06-05 08:02 文件变更 8 提交数 1 评论 1 代码增减 +87 / -8

执行摘要

为 Rust 前端添加 language-model-only 标志跳过多模态加载

当指定 --language-model-only 时,可以停止急切加载多模态处理器元数据,避免启动时因不支持或新形状的多模态模型而失败。

设计简洁,可以安全合并。对于仅使用语言模型的用户,推荐启用该标志以提高启动可靠性。值得关注的是如何在 Rust 和 Python 之间一致地传递参数的模式。

讨论亮点

无实质性讨论;PR 获得 njhill 批准,唯一评论来自 mergify bot 自动的 pre-commit 提示,已修复。

实现拆解

  1. SharedRuntimeArgs 结构体(rust/src/cmd/src/cli.rs)中新增 language_model_only: bool 字段,并添加 #[arg(long)]#[serde(default)],使其成为可选的命令行和 JSON 参数。
  2. Config 结构体(rust/src/server/src/config.rs)中新增同名字段,并在 into_bootstrapped_configinto_managed_config 方法中赋值,确保该标志传递到服务器配置。
  3. LoadModelBackendsOptionsrust/src/chat/src/backend/mod.rs)中新增 language_model_only: bool 字段,为聊天后端提供选项。
  4. HfChatBackend::from_resolved_model_filesrust/src/chat/src/backend/hf.rs)中,根据 options.language_model_only 决定是否调用 MultimodalModelInfo::from_paths,跳过多模态处理器加载。
  5. ManagedEngineArgs::into_configrust/src/managed-engine/src/cli.rs)中,将 language_model_only 参数转发到 Python 引擎的命令行。
  6. 添加单元测试 language_model_only_skips_multimodal_preprocessor_config 验证正确行为,并更新现有测试的 snapshot 以包含新字段的默认值。
文件 模块 状态 重要度
rust/src/chat/src/backend/hf.rs 聊天后端 modified 7.39
rust/src/cmd/src/cli.rs 命令行 modified 5.39
rust/src/managed-engine/src/cli.rs 托管引擎 modified 5.74
rust/src/chat/src/backend/mod.rs 聊天后端 modified 4.7
rust/src/cmd/src/cli/tests.rs 命令行 modified 5.52
rust/src/server/src/config.rs 服务器 modified 4.7
rust/src/server/src/lib.rs 服务器 modified 4.58
rust/src/server/examples/external_engine_openai_qwen.rs 服务器 modified 4.93

关键符号

HfChatBackend::from_resolved_model_files SharedRuntimeArgs::into_bootstrapped_config ManagedEngineArgs::into_config language_model_only_skips_multimodal_preprocessor_config

关键源码片段

rust/src/chat/src/backend/hf.rs core-logic

核心逻辑变更:根据 `language_model_only` 标志决定是否加载多模态处理器,避免启动失败。同时包含新增的单元测试。

// 根据 options.language_model_only 决定是否加载多模态配置
let multimodal_model_info = if options.language_model_only {
    None // 跳过多模态处理器加载
} else {
    // 正常加载多模态模型信息
    MultimodalModelInfo::from_paths(
        model_id.clone(),
        (!model_type.is_empty()).then_some(model_type.to_string()),
        files.config_path.as_deref(),
        files.preprocessor_config_path.as_deref(),
        tokenizer.clone(),
    )?
};
rust/src/cmd/src/cli.rs core-logic

定义了 `--language-model-only` 命令行标志的解析入口,并在配置转换方法中传递该值。

// SharedRuntimeArgs 结构体中新增字段
/// Disable multimodal inputs and treat the model as language-only.
#[arg(long)]
#[serde(default)]
pub language_model_only: bool,// 在 into_bootstrapped_config 中传递
Config {
    // ... 其他字段
    language_model_only: self.language_model_only,
    // ...
}// 在 into_managed_config 中同样传递

评论区精华

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

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

风险与影响

风险较低。新字段默认值为 false,保持向后兼容。所有相关结构体均经过编译期类型检查,不易遗漏。唯一潜在风险是在 managed-engine 转发时可能增加额外的命令行参数,但不会影响未启用该标志的现有行为。

用户可通过 --language-model-only 跳过多模态处理器加载,加速纯语言模型启动并避免兼容性问题。系统内部减少不必要的 I/O 和解析。对团队而言,Rust 前端的配置体系得到扩展,便于后续类似标志的添加。

新增命令行选项 默认向后兼容

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论