清理(AGC模型): 删除无档位校验的遗留 resolver

- 移除 AgcModelCatalog::resolve / resolve_requested,统一走带会员档位的 resolve_requested_for
- validate 内联默认项检查,测试改用 resolve_requested_for
This commit is contained in:
2026-10-05 12:15:58 +08:00
parent af419e82c7
commit 7579213bea
@@ -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());
}