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