Expand description
Dynamic provider registry for configuration-driven provider instantiation.
The registry allows providers to be registered by name and instantiated from configuration at runtime. This enables:
- Config-file driven provider selection
- Third-party provider registration
- Dynamic provider switching without code changes
§Example
use llm_stack_core::registry::{ProviderRegistry, ProviderConfig};
// Get the global registry (providers register themselves on startup)
let registry = ProviderRegistry::global();
// Build a provider from config
let config = ProviderConfig {
provider: "anthropic".into(),
api_key: Some("sk-...".into()),
model: "claude-sonnet-4-20250514".into(),
..Default::default()
};
let provider = registry.build(&config).expect("provider registered");§Registering providers
Provider crates register their factory on initialization:
ⓘ
use llm_stack_core::registry::{ProviderRegistry, ProviderFactory, ProviderConfig};
struct MyProviderFactory;
impl ProviderFactory for MyProviderFactory {
fn name(&self) -> &str { "my-provider" }
fn build(&self, config: &ProviderConfig) -> Result<Box<dyn DynProvider>, LlmError> {
// Build and return provider
}
}
// Register on crate initialization
ProviderRegistry::global().register(Box::new(MyProviderFactory));Structs§
- Provider
Config - Configuration for building a provider from the registry.
- Provider
Registry - A registry of provider factories for dynamic provider instantiation.
Traits§
- Provider
Factory - Factory trait for creating providers from configuration.