Files
agcore/src/llm/provider/registry.rs
T
徐涛 5baa170508 docs: 更新 README feature 表 + 升级指南 + 示例注释 + roadmap 同步
- README 添加 feature 组合表 + 模块级 features 清单 + 升级指南
- 18 个 example 顶部添加 Required features 注释
- roadmap.md 和 roadmap-v0.3.2.md 同步 Phase 26-27 完成状态
- cargo fmt 全量格式化(修复预存格式问题,CI format job 可通过)
2026-07-19 08:18:04 +08:00

68 lines
2.0 KiB
Rust

//! Provider 注册表 —— 多 Provider 实例的注册与发现。
use std::collections::HashMap;
use crate::llm::LlmProvider;
use crate::llm::error::LlmError;
use crate::llm::provider::{ProviderConfig, ProviderType, create_provider};
/// Provider 注册表 —— 管理多个 LLM Provider 实例。
///
/// 支持注册命名 Provider、按名称查找、设置默认 Provider。
pub struct ProviderRegistry {
providers: HashMap<String, Box<dyn LlmProvider>>,
default_name: Option<String>,
}
impl Default for ProviderRegistry {
fn default() -> Self {
Self::new()
}
}
impl ProviderRegistry {
/// 创建一个空的注册表。
pub fn new() -> Self {
Self {
providers: HashMap::new(),
default_name: None,
}
}
/// 注册一个已初始化的 Provider 实例。
pub fn register(&mut self, name: impl Into<String>, provider: Box<dyn LlmProvider>) {
self.providers.insert(name.into(), provider);
}
/// 通过 ProviderType + ProviderConfig 创建并注册。
pub fn register_with_config(
&mut self,
name: impl Into<String>,
provider_type: ProviderType,
config: ProviderConfig,
) -> Result<(), LlmError> {
let provider = create_provider(provider_type, config)?;
self.register(name, provider);
Ok(())
}
/// 设置默认 Provider。
pub fn set_default(&mut self, name: &str) -> Result<(), LlmError> {
if !self.providers.contains_key(name) {
return Err(LlmError::Other(format!("Provider '{}' 不存在", name)));
}
self.default_name = Some(name.to_string());
Ok(())
}
/// 按名称查找 Provider。
pub fn get(&self, name: &str) -> Option<&dyn LlmProvider> {
self.providers.get(name).map(|p| p.as_ref())
}
/// 获取默认 Provider。
pub fn get_default(&self) -> Option<&dyn LlmProvider> {
self.default_name.as_ref().and_then(|name| self.get(name))
}
}