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