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