""" TTS Provider Factory for Flare """ from typing import Optional from .tts_interface import TTSInterface from .tts_elevenlabs import ElevenLabsTTS from .tts_blaze import BlazeTTS from config.config_provider import ConfigProvider from utils.logger import log_info, log_error, log_debug, log_warning class TTSFactory: @staticmethod def create_provider() -> Optional[TTSInterface]: """Create TTS provider based on configuration""" cfg = ConfigProvider.get() tts_config = cfg.global_config.tts_provider if not tts_config or tts_config.name == "no_tts": log_info("🔇 No TTS provider configured") return None provider_name = tts_config.name log_info(f"🏭 Creating TTS provider: {provider_name}") # Get provider definition provider_def = cfg.global_config.get_provider_config("tts", provider_name) if not provider_def: log_info(f"⚠️ Unknown TTS provider: {provider_name}") return None # Get API key api_key = TTSFactory._get_api_key(tts_config) if not api_key and provider_def.requires_api_key: log_info(f"⚠️ No API key for TTS provider: {provider_name}") return None # Create provider based on name if provider_name == "elevenlabs": return ElevenLabsTTS(api_key) elif provider_name == "blaze": return BlazeTTS(api_key) else: log_info(f"⚠️ Unsupported TTS provider: {provider_name}") return None @staticmethod def _get_api_key(tts_config) -> Optional[str]: """Get decrypted API key""" if not tts_config.api_key: return None if tts_config.api_key.startswith("enc:"): from utils.encryption_utils import decrypt return decrypt(tts_config.api_key) return tts_config.api_key