优化: 模型能力探测前缀匹配收紧 + 手动标注能力不被测试覆盖

This commit is contained in:
lxy
2026-08-08 14:19:38 +08:00
parent d19784a414
commit b408b2d7a1
2 changed files with 83 additions and 9 deletions
+14 -1
View File
@@ -19,7 +19,7 @@
use tauri::State;
// df-ai 重导出 df_ai_core(供下游直接引用 trait/类型);src-tauri 不直接依赖 df-ai-core crate。
use df_ai::df_ai_core::model::ModelConfig;
use df_ai::df_ai_core::model::{ModelConfig, ProbeSource};
use df_types::types::new_id;
use df_storage::models::AiProviderRecord;
@@ -342,9 +342,22 @@ pub async fn ai_fetch_models(
// 否则每次「测试连接/拉取模型」覆盖回探测默认 weight(50),权重失效致 ProviderPool/router
// 排序摇摆。对齐 provider 级 enabled/weight 编辑保留逻辑(commands.rs:1041 match existing)。
// 新模型(旧池无同 model_id)用探测默认值。
//
// 手动优先:旧配置 probe_source == UserSet(用户在表格手动标注能力)→ 保留手动能力维度,
// 不被新探测覆盖(对齐 ProbeSource::UserSet「最高优先,永不被覆盖」设计意图)。
let merged: Vec<ModelConfig> = probed
.iter()
.map(|c| match provider.model_configs.iter().find(|o| o.model_id == c.model_id) {
Some(old) if old.probe_source == Some(ProbeSource::UserSet) => ModelConfig {
// 手动标注优先:保留用户能力维度 + 手动来源,仅更新路由控制字段
weight: old.weight,
enabled: old.enabled,
label: old.label.clone(),
modalities: old.modalities.clone(),
capabilities: old.capabilities.clone(),
probe_source: Some(ProbeSource::UserSet),
..c.clone()
},
Some(old) => ModelConfig {
weight: old.weight,
enabled: old.enabled,