From 7579213beaf3c770ac48d138c0c4c6666df98361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 5 Oct 2026 12:15:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86(AGC=E6=A8=A1=E5=9E=8B):=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E6=A1=A3=E4=BD=8D=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E7=9A=84=E9=81=97=E7=95=99=20resolver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 AgcModelCatalog::resolve / resolve_requested,统一走带会员档位的 resolve_requested_for - validate 内联默认项检查,测试改用 resolve_requested_for --- .../crates/module-runtime/src/agc_models.rs | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) 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()); }