File size: 2,252 Bytes
a847f43
b236687
a847f43
b236687
 
a847f43
b236687
a847f43
 
 
 
 
b236687
 
 
 
a847f43
b236687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a847f43
 
b236687
 
 
 
 
 
 
 
 
 
 
 
 
 
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
57
58
59
60
61
62
63
"""
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"""
    
    @staticmethod
    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
    
    @staticmethod
    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