""" STT Provider Factory for Flare """ from typing import Optional from stt_interface import STTInterface, STTEngineType, log from stt_google import GoogleCloudSTT from config_provider import ConfigProvider class STTFactory: """Factory for creating STT provider instances""" @staticmethod def create_provider() -> Optional[STTInterface]: """Create STT provider based on configuration""" cfg = ConfigProvider.get() stt_config = cfg.global_config.stt_provider if not stt_config or stt_config.name == "no_stt": log("🔇 No STT provider configured") return None provider_name = stt_config.name log(f"🏭 Creating STT provider: {provider_name}") # Get provider definition provider_def = cfg.global_config.get_provider_config("stt", provider_name) if not provider_def: log(f"⚠️ Unknown STT provider: {provider_name}") return None # Get credentials/API key credentials = STTFactory._get_credentials(stt_config) if not credentials and provider_def.requires_api_key: log(f"⚠️ No credentials for STT provider: {provider_name}") return None # Create provider based on name if provider_name == "google": return GoogleCloudSTT(credentials) elif provider_name == "azure": log("⚠️ Azure STT not implemented yet") return None elif provider_name == "amazon": log("⚠️ Amazon STT not implemented yet") return None elif provider_name == "flicker": log("⚠️ Flicker STT not implemented yet") return None else: log(f"⚠️ Unsupported STT provider: {provider_name}") return None @staticmethod def _get_credentials(stt_config) -> Optional[str]: """Get decrypted credentials/API key""" if not stt_config.api_key: return None if stt_config.api_key.startswith("enc:"): from encryption_utils import decrypt return decrypt(stt_config.api_key) return stt_config.api_key