Spaces:
				
			
			
	
			
			
		Runtime error
		
	
	
	
			
			
	
	
	
	
		
		
		Runtime error
		
	| import requests | |
| from urllib3.util.retry import Retry | |
| from requests.adapters import HTTPAdapter | |
| from concurrent.futures import ThreadPoolExecutor, as_completed | |
| class ChineseTranslator: | |
| def __init__(self): | |
| self.client = requests.Session() | |
| def translate(self, text): | |
| if not text: | |
| return None | |
| payload = { | |
| "appid": "105", | |
| "sgid": "en", | |
| "sbid": "en", | |
| "egid": "zh-CN", | |
| "ebid": "zh-CN", | |
| "content": text, | |
| "type": "2", | |
| } | |
| response = self.client.post("https://translate-api-fykz.xiangtatech.com/translation/webs/index", data=payload) | |
| if response.status_code == 200: | |
| json_data = response.json() | |
| by_value = json_data.get("by", "") | |
| if not by_value: | |
| return None | |
| return by_value | |
| return None | |
| def close_session(self): | |
| self.client.close() | |
| class GPTTranslator: | |
| def __init__(self, api_key, api_url): | |
| self.headers = { | |
| "Content-Type": "application/json", | |
| "Authorization": f"Bearer {api_key}" | |
| } | |
| self.session = requests.Session() | |
| retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[429, 500, 502, 503, 504]) | |
| self.session.mount('https://', HTTPAdapter(max_retries=retries)) | |
| self.api_url = api_url | |
| def translate(self, text): | |
| data = { | |
| "model": "gpt-3.5-turbo", | |
| "messages": [ | |
| {"role": "user", "content": f"你是一个英译中专家,请直接返回'{text}'最有可能的三种中文翻译结果,彼此间语义有所区分,结果以逗号间隔."} | |
| ] | |
| } | |
| response = self.session.post(self.api_url, headers=self.headers, json=data) | |
| response_data = response.json() | |
| if response.status_code == 200 and 'choices' in response_data and 'content' in response_data['choices'][0]['message']: | |
| return response_data['choices'][0]['message']['content'] | |
| else: | |
| return f"Error or no translation for tag: {text}" | |
| def close_session(self): | |
| self.session.close() | |
| def translate_tags(translator, tags): | |
| translations = [None] * len(tags) | |
| with ThreadPoolExecutor(max_workers=50) as executor: | |
| future_to_index = {executor.submit(translator.translate, tag): i for i, tag in enumerate(tags)} | |
| for future in as_completed(future_to_index): | |
| index = future_to_index[future] | |
| translations[index] = future.result() | |
| translator.close_session() | |
| return translations | |
