"""Factory de sélection du fournisseur de synthèse IA.""" from __future__ import annotations import logging from pronote_sync.config.settings import AISettings from pronote_sync.synthesis.openai import OpenAISynthesisProvider from pronote_sync.synthesis.provider import SynthesisProvider logger = logging.getLogger(__name__) __all__ = ["get_synthesis_provider", "SynthesisProvider", "OpenAISynthesisProvider"] def get_synthesis_provider(settings: AISettings) -> SynthesisProvider | None: """Sélectionne le fournisseur de synthèse IA selon la configuration. Retourne ``None`` lorsque la synthèse IA est désactivée ou qu'aucune clé API n'est configurée. Pour le provider ``litellm``, le paquet ``litellm`` (extra ``ai-litellm``) est requis : s'il est absent, un avertissement est journalisé et ``None`` est retourné. :param settings: Paramètres IA. :return: Le fournisseur configuré, ou ``None`` si désactivé ou sans clé API. :rtype: SynthesisProvider | None """ if not settings.enabled: return None if not settings.api_key: return None base_url = settings.base_url model = settings.model or "gpt-4o-mini" if settings.provider == "litellm": try: from pronote_sync.synthesis.litellm import LiteLLMSynthesisProvider except ImportError: logger.warning("Extra 'ai-litellm' requis pour le provider litellm") return None return LiteLLMSynthesisProvider(api_key=settings.api_key, base_url=base_url, model=model) return OpenAISynthesisProvider(api_key=settings.api_key, base_url=base_url, model=model)