10
10
from typing import Any , Dict , List , Optional
11
11
12
12
import polib
13
- import requests
14
13
from tenacity import retry , stop_after_attempt , wait_fixed
15
14
16
15
from ..models .config import TranslationConfig
17
- from ..models .enums import ModelProvider
18
16
from .model_manager import ModelManager
19
17
from .po_file_handler import POFileHandler
18
+ from .providers .registry import ProviderRegistry
20
19
21
20
22
21
class TranslationService :
@@ -35,67 +34,6 @@ def __init__(self, config: TranslationConfig, batch_size: int = 40):
35
34
self .po_file_handler = POFileHandler ()
36
35
self .model_manager = ModelManager ()
37
36
38
- def _get_openai_response (self , content : str ) -> str :
39
- """Get response from OpenAI API."""
40
- if not self .config .provider_clients .openai_client :
41
- raise ValueError ("OpenAI client not initialized" )
42
-
43
- message = {"role" : "user" , "content" : content }
44
- completion = self .config .provider_clients .openai_client .chat .completions .create (
45
- model = self .config .model ,
46
- messages = [message ]
47
- )
48
- return completion .choices [0 ].message .content .strip ()
49
-
50
- def _get_anthropic_response (self , content : str ) -> str :
51
- """Get response from Anthropic API."""
52
- if not self .config .provider_clients .anthropic_client :
53
- raise ValueError ("Anthropic client not initialized" )
54
-
55
- message = {"role" : "user" , "content" : content }
56
- completion = self .config .provider_clients .anthropic_client .messages .create (
57
- model = self .config .model ,
58
- max_tokens = 4000 ,
59
- messages = [message ]
60
- )
61
- return completion .content [0 ].text .strip ()
62
-
63
- def _get_deepseek_response (self , content : str ) -> str :
64
- """Get response from DeepSeek API."""
65
- if not self .config .provider_clients .deepseek_api_key :
66
- raise ValueError ("DeepSeek API key not set" )
67
-
68
- headers = {
69
- "Authorization" : f"Bearer { self .config .provider_clients .deepseek_api_key } " ,
70
- "Content-Type" : "application/json"
71
- }
72
- payload = {
73
- "model" : self .config .model ,
74
- "messages" : [{"role" : "user" , "content" : content }],
75
- "max_tokens" : 4000
76
- }
77
- response = requests .post (
78
- f"{ self .config .provider_clients .deepseek_base_url } /chat/completions" ,
79
- headers = headers ,
80
- json = payload ,
81
- timeout = 30
82
- )
83
- response .raise_for_status ()
84
- return response .json ()["choices" ][0 ]["message" ]["content" ].strip ()
85
-
86
- def _get_azure_openai_response (self , content : str ) -> str :
87
- """Get response from OpenAI API."""
88
- if not self .config .provider_clients .azure_openai_client :
89
- raise ValueError ("OpenAI client not initialized" )
90
-
91
- message = {"role" : "user" , "content" : content }
92
- completion = self .config .provider_clients .azure_openai_client .chat .completions .create (
93
- model = self .config .model ,
94
- max_tokens = 4000 ,
95
- messages = [message ]
96
- )
97
- return completion .choices [0 ].message .content .strip ()
98
-
99
37
def validate_provider_connection (self ) -> bool :
100
38
"""Validates the connection to the selected provider by making a test API call."""
101
39
provider = self .config .provider
@@ -238,15 +176,13 @@ def _get_provider_response(self, content: str) -> str:
238
176
"""Get translation response from the selected provider."""
239
177
provider = self .config .provider
240
178
241
- if provider == ModelProvider .OPENAI :
242
- return self ._get_openai_response (content )
243
- if provider == ModelProvider .ANTHROPIC :
244
- return self ._get_anthropic_response (content )
245
- if provider == ModelProvider .DEEPSEEK :
246
- return self ._get_deepseek_response (content )
247
- if provider == ModelProvider .AZURE_OPENAI :
248
- return self ._get_azure_openai_response (content )
249
- return ""
179
+ if not provider :
180
+ return ""
181
+
182
+ provider_instance = ProviderRegistry .get_provider (provider )
183
+ if not provider_instance :
184
+ return ""
185
+ return provider_instance .translate (self .config .provider_clients , self .config .model , content )
250
186
251
187
def _process_bulk_response (self , response_text : str , original_texts : List [str ]) -> List [str ]:
252
188
"""Process a bulk translation response."""
0 commit comments