|
|
@@ -17,6 +17,7 @@ from tencentcloud.tmt.v20180321.models import TextTranslateResponse
|
|
|
|
|
|
import json
|
|
|
|
|
|
+
|
|
|
def remove_control_characters(s):
|
|
|
return "".join(ch for ch in s if unicodedata.category(ch)[0] != "C")
|
|
|
|
|
|
@@ -50,10 +51,10 @@ class BaseTranslator:
|
|
|
|
|
|
def prompt(self, text, prompt):
|
|
|
if prompt:
|
|
|
- context={
|
|
|
- "lang_in":self.lang_in,
|
|
|
- "lang_out":self.lang_out,
|
|
|
- "text":text,
|
|
|
+ context = {
|
|
|
+ "lang_in": self.lang_in,
|
|
|
+ "lang_out": self.lang_out,
|
|
|
+ "text": text,
|
|
|
}
|
|
|
return eval(prompt.safe_substitute(context))
|
|
|
else:
|
|
|
@@ -200,23 +201,23 @@ class OllamaTranslator(BaseTranslator):
|
|
|
"OLLAMA_MODEL": "gemma2",
|
|
|
}
|
|
|
|
|
|
- def __init__(self, lang_in, lang_out, model, envs=None,prompt=None):
|
|
|
+ def __init__(self, lang_in, lang_out, model, envs=None, prompt=None):
|
|
|
self.set_envs(envs)
|
|
|
if not model:
|
|
|
model = self.envs["OLLAMA_MODEL"]
|
|
|
super().__init__(lang_in, lang_out, model)
|
|
|
self.options = {"temperature": 0} # 随机采样可能会打断公式标记
|
|
|
self.client = ollama.Client()
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
def translate(self, text):
|
|
|
- print(len(self.prompt(text,self.prompttext)))
|
|
|
- print(self.prompt(text,self.prompttext)[0])
|
|
|
- print(self.prompt(text,self.prompttext)[1])
|
|
|
+ print(len(self.prompt(text, self.prompttext)))
|
|
|
+ print(self.prompt(text, self.prompttext)[0])
|
|
|
+ print(self.prompt(text, self.prompttext)[1])
|
|
|
response = self.client.chat(
|
|
|
model=self.model,
|
|
|
options=self.options,
|
|
|
- messages=self.prompt(text,self.prompttext),
|
|
|
+ messages=self.prompt(text, self.prompttext),
|
|
|
)
|
|
|
return response["message"]["content"].strip()
|
|
|
|
|
|
@@ -231,7 +232,14 @@ class OpenAITranslator(BaseTranslator):
|
|
|
}
|
|
|
|
|
|
def __init__(
|
|
|
- self, lang_in, lang_out, model, base_url=None, api_key=None, envs=None,prompt=None
|
|
|
+ self,
|
|
|
+ lang_in,
|
|
|
+ lang_out,
|
|
|
+ model,
|
|
|
+ base_url=None,
|
|
|
+ api_key=None,
|
|
|
+ envs=None,
|
|
|
+ prompt=None,
|
|
|
):
|
|
|
self.set_envs(envs)
|
|
|
if not model:
|
|
|
@@ -239,13 +247,13 @@ class OpenAITranslator(BaseTranslator):
|
|
|
super().__init__(lang_in, lang_out, model)
|
|
|
self.options = {"temperature": 0} # 随机采样可能会打断公式标记
|
|
|
self.client = openai.OpenAI(base_url=base_url, api_key=api_key)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
def translate(self, text) -> str:
|
|
|
response = self.client.chat.completions.create(
|
|
|
model=self.model,
|
|
|
**self.options,
|
|
|
- messages=self.prompt(text,self.prompttext),
|
|
|
+ messages=self.prompt(text, self.prompttext),
|
|
|
)
|
|
|
return response.choices[0].message.content.strip()
|
|
|
|
|
|
@@ -259,7 +267,14 @@ class AzureOpenAITranslator(BaseTranslator):
|
|
|
}
|
|
|
|
|
|
def __init__(
|
|
|
- self, lang_in, lang_out, model, base_url=None, api_key=None, envs=None,prompt=None
|
|
|
+ self,
|
|
|
+ lang_in,
|
|
|
+ lang_out,
|
|
|
+ model,
|
|
|
+ base_url=None,
|
|
|
+ api_key=None,
|
|
|
+ envs=None,
|
|
|
+ prompt=None,
|
|
|
):
|
|
|
self.set_envs(envs)
|
|
|
base_url = self.envs["AZURE_OPENAI_BASE_URL"]
|
|
|
@@ -273,13 +288,13 @@ class AzureOpenAITranslator(BaseTranslator):
|
|
|
api_version="2024-06-01",
|
|
|
api_key=api_key,
|
|
|
)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
def translate(self, text) -> str:
|
|
|
response = self.client.chat.completions.create(
|
|
|
model=self.model,
|
|
|
**self.options,
|
|
|
- messages=self.prompt(text,self.prompttext),
|
|
|
+ messages=self.prompt(text, self.prompttext),
|
|
|
)
|
|
|
return response.choices[0].message.content.strip()
|
|
|
|
|
|
@@ -293,7 +308,14 @@ class ModelScopeTranslator(OpenAITranslator):
|
|
|
}
|
|
|
|
|
|
def __init__(
|
|
|
- self, lang_in, lang_out, model, base_url=None, api_key=None, envs=None,prompt=None
|
|
|
+ self,
|
|
|
+ lang_in,
|
|
|
+ lang_out,
|
|
|
+ model,
|
|
|
+ base_url=None,
|
|
|
+ api_key=None,
|
|
|
+ envs=None,
|
|
|
+ prompt=None,
|
|
|
):
|
|
|
self.set_envs(envs)
|
|
|
base_url = "https://api-inference.modelscope.cn/v1"
|
|
|
@@ -301,7 +323,7 @@ class ModelScopeTranslator(OpenAITranslator):
|
|
|
if not model:
|
|
|
model = self.envs["MODELSCOPE_MODEL"]
|
|
|
super().__init__(lang_in, lang_out, model, base_url=base_url, api_key=api_key)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
|
|
|
class ZhipuTranslator(OpenAITranslator):
|
|
|
@@ -312,21 +334,21 @@ class ZhipuTranslator(OpenAITranslator):
|
|
|
"ZHIPU_MODEL": "glm-4-flash",
|
|
|
}
|
|
|
|
|
|
- def __init__(self, lang_in, lang_out, model, envs=None,prompt=None):
|
|
|
+ def __init__(self, lang_in, lang_out, model, envs=None, prompt=None):
|
|
|
self.set_envs(envs)
|
|
|
base_url = "https://open.bigmodel.cn/api/paas/v4"
|
|
|
api_key = self.envs["ZHIPU_API_KEY"]
|
|
|
if not model:
|
|
|
model = self.envs["ZHIPU_MODEL"]
|
|
|
super().__init__(lang_in, lang_out, model, base_url=base_url, api_key=api_key)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
def translate(self, text) -> str:
|
|
|
try:
|
|
|
response = self.client.chat.completions.create(
|
|
|
model=self.model,
|
|
|
**self.options,
|
|
|
- messages=self.prompt(text,self.prompttext),
|
|
|
+ messages=self.prompt(text, self.prompttext),
|
|
|
)
|
|
|
except openai.BadRequestError as e:
|
|
|
if (
|
|
|
@@ -346,14 +368,14 @@ class SiliconTranslator(OpenAITranslator):
|
|
|
"SILICON_MODEL": "Qwen/Qwen2.5-7B-Instruct",
|
|
|
}
|
|
|
|
|
|
- def __init__(self, lang_in, lang_out, model, envs=None,prompt=None):
|
|
|
+ def __init__(self, lang_in, lang_out, model, envs=None, prompt=None):
|
|
|
self.set_envs(envs)
|
|
|
base_url = "https://api.siliconflow.cn/v1"
|
|
|
api_key = self.envs["SILICON_API_KEY"]
|
|
|
if not model:
|
|
|
model = self.envs["SILICON_MODEL"]
|
|
|
super().__init__(lang_in, lang_out, model, base_url=base_url, api_key=api_key)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
|
|
|
class GeminiTranslator(OpenAITranslator):
|
|
|
@@ -364,14 +386,15 @@ class GeminiTranslator(OpenAITranslator):
|
|
|
"GEMINI_MODEL": "gemini-1.5-flash",
|
|
|
}
|
|
|
|
|
|
- def __init__(self, lang_in, lang_out, model, envs=None,prompt=None):
|
|
|
+ def __init__(self, lang_in, lang_out, model, envs=None, prompt=None):
|
|
|
self.set_envs(envs)
|
|
|
base_url = "https://generativelanguage.googleapis.com/v1beta/openai/"
|
|
|
api_key = self.envs["GEMINI_API_KEY"]
|
|
|
if not model:
|
|
|
model = self.envs["GEMINI_MODEL"]
|
|
|
super().__init__(lang_in, lang_out, model, base_url=base_url, api_key=api_key)
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
+
|
|
|
|
|
|
class AzureTranslator(BaseTranslator):
|
|
|
# https://github.com/Azure/azure-sdk-for-python
|
|
|
@@ -436,7 +459,7 @@ class AnythingLLMTranslator(BaseTranslator):
|
|
|
"AnythingLLM_APIKEY": None,
|
|
|
}
|
|
|
|
|
|
- def __init__(self, lang_out, lang_in, model, envs=None,prompt=None):
|
|
|
+ def __init__(self, lang_out, lang_in, model, envs=None, prompt=None):
|
|
|
self.set_envs(envs)
|
|
|
super().__init__(lang_out, lang_in, model)
|
|
|
self.api_url = self.envs["AnythingLLM_URL"]
|
|
|
@@ -446,10 +469,10 @@ class AnythingLLMTranslator(BaseTranslator):
|
|
|
"Authorization": f"Bearer {self.api_key}",
|
|
|
"Content-Type": "application/json",
|
|
|
}
|
|
|
- self.prompttext=prompt
|
|
|
+ self.prompttext = prompt
|
|
|
|
|
|
def translate(self, text):
|
|
|
- messages = self.prompt(text,self.prompttext)
|
|
|
+ messages = self.prompt(text, self.prompttext)
|
|
|
payload = {
|
|
|
"message": messages,
|
|
|
"mode": "chat",
|