优化: 图像模型兜底防御+任务UI(状态多选+跳详情)+token popover遮挡
This commit is contained in:
@@ -131,6 +131,22 @@ pub fn select_model_id(req: &TaskRequirements, pool: &[ModelConfig]) -> Option<S
|
||||
ModelRouter::select(req, pool).map(|m| m.model_id.clone())
|
||||
}
|
||||
|
||||
/// 判断 model_id 是否为图像生成模型(文本任务不应使用)。
|
||||
/// 用于 select 返回 None 兜底 default_model 时的防御:避免标题/压缩等文本任务
|
||||
/// 误用图像模型(如 sensenova-u1-fast/dall-e)致 LLM 404 刷屏(治 default_model 配错为图像模型)。
|
||||
/// 判断:pool 有该模型 → 校验模态是否含 Text(最可靠);pool 无 → 名字启发式(已知图像模型模式)。
|
||||
pub fn is_likely_image_model(model_id: &str, pool: &[ModelConfig]) -> bool {
|
||||
if let Some(m) = pool.iter().find(|m| m.model_id == model_id) {
|
||||
return !m.modalities.contains(&Modality::Text);
|
||||
}
|
||||
let lower = model_id.to_lowercase();
|
||||
const IMAGE_PATTERNS: &[&str] = &[
|
||||
"dall-e", "gpt-image", "imagen", "flux", "stable-diffusion",
|
||||
"sensenova-u1", "u1-fast", "midjourney", "sd-", "sdxl",
|
||||
];
|
||||
IMAGE_PATTERNS.iter().any(|p| lower.contains(p))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
Reference in New Issue
Block a user