flare / tts /tts_factory.py
ciyidogan's picture
Upload 134 files
edec17e verified
"""
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