GPT4V-Image-Captioner / lib /Translator.py
frappuccino's picture
Upload folder using huggingface_hub
0140c70 verified
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