优化: 模型能力探测前缀匹配收紧 + 手动标注能力不被测试覆盖
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user