Spaces:
Paused
Paused
| """ | |
| 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""" | |
| 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 | |
| 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 |