Skip to main content

Module registry

Module registry 

Source
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§

ProviderConfig
Configuration for building a provider from the registry.
ProviderRegistry
A registry of provider factories for dynamic provider instantiation.

Traits§

ProviderFactory
Factory trait for creating providers from configuration.