"""Factory for creating AI providers.""" import logging from typing import Literal from guardden.services.ai.base import AIProvider logger = logging.getLogger(__name__) class NullProvider(AIProvider): """Null provider that does nothing (for when AI is disabled).""" async def moderate_text(self, content, context=None, sensitivity=50): from guardden.services.ai.base import ModerationResult return ModerationResult() async def analyze_image(self, image_url, sensitivity=50): from guardden.services.ai.base import ImageAnalysisResult return ImageAnalysisResult() async def analyze_phishing(self, url, message_content=None): from guardden.services.ai.base import PhishingAnalysisResult return PhishingAnalysisResult() async def close(self): pass def create_ai_provider( provider: Literal["anthropic", "openai", "none"], api_key: str | None = None, ) -> AIProvider: """ Create an AI provider instance. Args: provider: The provider type to create api_key: API key for the provider Returns: AIProvider instance Raises: ValueError: If provider is unknown or API key is missing """ if provider == "none": logger.info("AI moderation disabled") return NullProvider() if not api_key: raise ValueError(f"API key required for {provider} provider") if provider == "anthropic": from guardden.services.ai.anthropic_provider import AnthropicProvider return AnthropicProvider(api_key) if provider == "openai": from guardden.services.ai.openai_provider import OpenAIProvider return OpenAIProvider(api_key) raise ValueError(f"Unknown AI provider: {provider}")