Spaces:
Building
Building
File size: 1,976 Bytes
edec17e 9874d4d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
"""
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 |