- README 添加 feature 组合表 + 模块级 features 清单 + 升级指南 - 18 个 example 顶部添加 Required features 注释 - roadmap.md 和 roadmap-v0.3.2.md 同步 Phase 26-27 完成状态 - cargo fmt 全量格式化(修复预存格式问题,CI format job 可通过)
68 lines
2.0 KiB
Rust
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))
|
|
}
|
|
}
|