diff --git a/server-rs/crates/module-runtime/src/agc_models.rs b/server-rs/crates/module-runtime/src/agc_models.rs index 4d3ebc735..b6aa1d710 100644 --- a/server-rs/crates/module-runtime/src/agc_models.rs +++ b/server-rs/crates/module-runtime/src/agc_models.rs @@ -144,26 +144,15 @@ impl AgcModelCatalog { )); } } - self.resolve(&self.default_model_id).map(|_| ()) - } - - pub fn resolve(&self, id: &str) -> Result<&str, String> { - self.models + // 默认项必须存在且启用,否则目录无法给出可用默认模型。 + if !self + .models .iter() - .find(|m| m.enabled && m.id == id) - .map(|m| m.model_id.as_str()) - .ok_or_else(|| "所选模型不可用,请刷新模型列表".into()) - } - - /// 请求侧解析:显式选择的标识按目录校验,未选择或占位标识使用默认项。 - pub fn resolve_requested(&self, requested: Option<&str>) -> Result<&str, String> { - let requested = requested - .map(str::trim) - .filter(|id| !id.is_empty() && *id != AGC_MODEL_PLATFORM_DEFAULT); - match requested { - Some(id) => self.resolve(id), - None => self.resolve(&self.default_model_id), + .any(|model| model.enabled && model.id == self.default_model_id) + { + return Err("所选模型不可用,请刷新模型列表".into()); } + Ok(()) } } @@ -316,18 +305,30 @@ mod tests { let mut catalog = AgcModelCatalog::from_upstream_models(upstream(&["model-a", "model-b"]), 0).unwrap(); assert!(catalog.validate().is_ok()); - assert_eq!(catalog.resolve("model-a").unwrap(), "model-a"); + assert_eq!( + catalog.resolve_requested_for(Some("model-a"), AgcModelAccess::Basic), + Ok("model-a") + ); // 客户端不能直接指定实际模型名,只能回传目录标识。 - assert!(catalog.resolve("model-c").is_err()); - assert_eq!(catalog.resolve_requested(None).unwrap(), "model-a"); + assert_eq!( + catalog.resolve_requested_for(Some("model-c"), AgcModelAccess::Basic), + Err(crate::AgcModelResolveError::Unavailable) + ); + assert_eq!( + catalog.resolve_requested_for(None, AgcModelAccess::Basic), + Ok("model-a") + ); assert_eq!( catalog - .resolve_requested(Some(AGC_MODEL_PLATFORM_DEFAULT)) + .resolve_requested_for(Some(AGC_MODEL_PLATFORM_DEFAULT), AgcModelAccess::Basic) .unwrap(), "model-a" ); catalog.models[0].enabled = false; - assert!(catalog.resolve("model-a").is_err()); + assert_eq!( + catalog.resolve_requested_for(Some("model-a"), AgcModelAccess::Basic), + Err(crate::AgcModelResolveError::Unavailable) + ); assert!(catalog.validate().is_err()); }