36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from typing import Dict, Optional
|
|
from app.providers.base import ModelProvider
|
|
from app.providers.mock_provider import MockProvider
|
|
from app.providers.ollama_provider import OllamaProvider
|
|
from app.providers.external_providers import OpenAIProvider, AnthropicProvider, GeminiProvider
|
|
from app.config.settings import get_settings
|
|
|
|
settings = get_settings()
|
|
|
|
|
|
class ProviderRegistry:
|
|
"""
|
|
Central registry managing provider instances.
|
|
"""
|
|
|
|
def __init__(self):
|
|
self._providers: Dict[str, ModelProvider] = {
|
|
"mock": MockProvider(),
|
|
"ollama": OllamaProvider(base_url=settings.OLLAMA_BASE_URL),
|
|
"openai": OpenAIProvider(api_key=settings.OPENAI_API_KEY),
|
|
"anthropic": AnthropicProvider(api_key=settings.ANTHROPIC_API_KEY),
|
|
"gemini": GeminiProvider(api_key=settings.GEMINI_API_KEY),
|
|
}
|
|
|
|
def get_provider(self, provider_id: str) -> Optional[ModelProvider]:
|
|
return self._providers.get(provider_id.lower())
|
|
|
|
def register_provider(self, provider_id: str, provider: ModelProvider):
|
|
self._providers[provider_id.lower()] = provider
|
|
|
|
def list_providers(self) -> Dict[str, ModelProvider]:
|
|
return self._providers
|
|
|
|
|
|
provider_registry = ProviderRegistry()
|