1010from typing import Any , Dict , List , Optional
1111
1212import polib
13- import requests
1413from tenacity import retry , stop_after_attempt , wait_fixed
1514
1615from ..models .config import TranslationConfig
17- from ..models .enums import ModelProvider
1816from .model_manager import ModelManager
1917from .po_file_handler import POFileHandler
18+ from .providers .registry import ProviderRegistry
2019
2120
2221class TranslationService :
@@ -35,67 +34,6 @@ def __init__(self, config: TranslationConfig, batch_size: int = 40):
3534 self .po_file_handler = POFileHandler ()
3635 self .model_manager = ModelManager ()
3736
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-
9937 def validate_provider_connection (self ) -> bool :
10038 """Validates the connection to the selected provider by making a test API call."""
10139 provider = self .config .provider
@@ -238,15 +176,13 @@ def _get_provider_response(self, content: str) -> str:
238176 """Get translation response from the selected provider."""
239177 provider = self .config .provider
240178
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 )
250186
251187 def _process_bulk_response (self , response_text : str , original_texts : List [str ]) -> List [str ]:
252188 """Process a bulk translation response."""
0 commit comments