执行摘要
本 PR 为 Rust 前端新增 --language-model-only 命令行标志,允许跳过多模态处理器加载,避免纯语言模型因不兼容的多模态配置而启动失败。变更覆盖 CLI 解析、配置传递、Chat 后端逻辑以及 managed-engine 转发,并通过单元测试验证。
功能与动机
当使用纯语言模型(如 DeepSeek V4 等)时,Rust 前端急切加载多模态处理器配置可能导致启动失败,尤其对于不支持或形状更新的多模态模型。添加该标志后,用户可强制跳过多模态加载,提升启动可靠性和速度。
实现拆解
- CLI 层定义:在
rust/src/cmd/src/cli.rs 的 SharedRuntimeArgs 中新增 language_model_only 字段,通过 #[arg(long)] 导出为 --language-model-only 选项。
- 配置传递:在
rust/src/server/src/config.rs 的 Config 结构体中增加同名字段,并在 into_bootstrapped_config 和 into_managed_config 方法中赋值。
- 选项注入:在
rust/src/chat/src/backend/mod.rs 的 LoadModelBackendsOptions 中增加字段,供聊天后端使用。
- 跳过加载:在
rust/src/chat/src/backend/hf.rs 的 from_resolved_model_files 中,检查 options.language_model_only,若为 true 则跳过 MultimodalModelInfo::from_paths 调用。
- Python 转发:在
rust/src/managed-engine/src/cli.rs 的 into_config 中,若标志为 true,向 Python 命令行追加 --language-model-only。
- 测试与快照更新:新增单元测试
language_model_only_skips_multimodal_preprocessor_config,并在多个现有测试的 snapshot 中补充 language_model_only: false 默认值。
rust/src/chat/src/backend/hf.rs
核心逻辑变更:根据 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
定义了 --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 中同样传递
评论区精华
PR 由 njhill 批准,无实质性讨论。唯一评论来自 mergify bot 的 pre-commit 提示,已自动修复。
风险与影响
- 风险:新字段默认
false,完全向后兼容。Rust 编译期检查确保所有相关结构体一致,遗漏风险低。managed-engine 转发增加命令行参数,但仅当开启标志时生效,不影响现有工作流。
- 影响:纯语言模型用户可快速跳过多模态加载,提升启动可靠性。该模式在 Python 前端中并不存在,但作为 Rust 前端的一个实用增强,扩展了配置体系。
关联脉络
无直接关联的历史 PR。本 PR 是 Rust 前端配置小型功能扩展,后续可能为其他加载选项提供类似的 Python 转发模式。
参与讨论