Spaces:
Building
Building
Update stt_factory.py
Browse files- stt_factory.py +52 -32
stt_factory.py
CHANGED
@@ -1,43 +1,63 @@
|
|
1 |
"""
|
2 |
-
STT Factory for
|
3 |
"""
|
4 |
-
|
5 |
-
from
|
6 |
-
from utils import log
|
7 |
-
from stt_interface import STTInterface, STTEngineType
|
8 |
from stt_google import GoogleCloudSTT
|
9 |
-
|
10 |
-
# from stt_azure import AzureSpeechSTT
|
11 |
-
# from stt_amazon import AmazonTranscribeSTT
|
12 |
-
# from stt_flicker import FlickerSTT
|
13 |
|
14 |
class STTFactory:
|
15 |
"""Factory for creating STT provider instances"""
|
16 |
|
17 |
@staticmethod
|
18 |
-
def
|
19 |
-
"""Create STT provider
|
|
|
|
|
20 |
|
21 |
-
if
|
22 |
-
log("π No STT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
return None
|
24 |
-
|
25 |
-
elif engine_type == STTEngineType.GOOGLE:
|
26 |
-
log("π€ Creating Google Cloud STT provider")
|
27 |
-
return GoogleCloudSTT(config.get("credentials_path", ""))
|
28 |
-
|
29 |
-
elif engine_type == STTEngineType.AZURE:
|
30 |
-
log("π€ Azure STT not implemented yet")
|
31 |
-
return None # TODO: Implement AzureSpeechSTT
|
32 |
-
|
33 |
-
elif engine_type == STTEngineType.AMAZON:
|
34 |
-
log("π€ Amazon STT not implemented yet")
|
35 |
-
return None # TODO: Implement AmazonTranscribeSTT
|
36 |
-
|
37 |
-
elif engine_type == STTEngineType.FLICKER:
|
38 |
-
log("π€ Flicker STT not implemented yet")
|
39 |
-
return None # TODO: Implement FlickerSTT
|
40 |
-
|
41 |
else:
|
42 |
-
log(f"
|
43 |
-
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
"""
|
2 |
+
STT Provider Factory for Flare
|
3 |
"""
|
4 |
+
from typing import Optional
|
5 |
+
from stt_interface import STTInterface, STTEngineType, log
|
|
|
|
|
6 |
from stt_google import GoogleCloudSTT
|
7 |
+
from config_provider import ConfigProvider
|
|
|
|
|
|
|
8 |
|
9 |
class STTFactory:
|
10 |
"""Factory for creating STT provider instances"""
|
11 |
|
12 |
@staticmethod
|
13 |
+
def create_provider() -> Optional[STTInterface]:
|
14 |
+
"""Create STT provider based on configuration"""
|
15 |
+
cfg = ConfigProvider.get()
|
16 |
+
stt_config = cfg.global_config.stt_provider
|
17 |
|
18 |
+
if not stt_config or stt_config.name == "no_stt":
|
19 |
+
log("π No STT provider configured")
|
20 |
+
return None
|
21 |
+
|
22 |
+
provider_name = stt_config.name
|
23 |
+
log(f"π Creating STT provider: {provider_name}")
|
24 |
+
|
25 |
+
# Get provider definition
|
26 |
+
provider_def = cfg.global_config.get_provider_config("stt", provider_name)
|
27 |
+
if not provider_def:
|
28 |
+
log(f"β οΈ Unknown STT provider: {provider_name}")
|
29 |
+
return None
|
30 |
+
|
31 |
+
# Get credentials/API key
|
32 |
+
credentials = STTFactory._get_credentials(stt_config)
|
33 |
+
if not credentials and provider_def.requires_api_key:
|
34 |
+
log(f"β οΈ No credentials for STT provider: {provider_name}")
|
35 |
+
return None
|
36 |
+
|
37 |
+
# Create provider based on name
|
38 |
+
if provider_name == "google":
|
39 |
+
return GoogleCloudSTT(credentials)
|
40 |
+
elif provider_name == "azure":
|
41 |
+
log("β οΈ Azure STT not implemented yet")
|
42 |
+
return None
|
43 |
+
elif provider_name == "amazon":
|
44 |
+
log("β οΈ Amazon STT not implemented yet")
|
45 |
+
return None
|
46 |
+
elif provider_name == "flicker":
|
47 |
+
log("β οΈ Flicker STT not implemented yet")
|
48 |
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
else:
|
50 |
+
log(f"β οΈ Unsupported STT provider: {provider_name}")
|
51 |
+
return None
|
52 |
+
|
53 |
+
@staticmethod
|
54 |
+
def _get_credentials(stt_config) -> Optional[str]:
|
55 |
+
"""Get decrypted credentials/API key"""
|
56 |
+
if not stt_config.api_key:
|
57 |
+
return None
|
58 |
+
|
59 |
+
if stt_config.api_key.startswith("enc:"):
|
60 |
+
from encryption_utils import decrypt
|
61 |
+
return decrypt(stt_config.api_key)
|
62 |
+
|
63 |
+
return stt_config.api_key
|