yuze.zyz пре 1 година
родитељ
комит
9ae6f906d7
3 измењених фајлова са 20 додато и 1 уклоњено
  1. 2 1
      pdf2zh/converter.py
  2. 2 0
      pdf2zh/gui.py
  3. 16 0
      pdf2zh/translator.py

+ 2 - 1
pdf2zh/converter.py

@@ -26,6 +26,7 @@ from pdf2zh.translator import (
     OllamaTranslator,
     OllamaTranslator,
     OpenAITranslator,
     OpenAITranslator,
     ZhipuTranslator,
     ZhipuTranslator,
+    ModelScopeTranslator,
     SiliconTranslator,
     SiliconTranslator,
     GeminiTranslator,
     GeminiTranslator,
     AzureTranslator,
     AzureTranslator,
@@ -145,7 +146,7 @@ class TranslateConverter(PDFConverterEx):
         service_name = param[0]
         service_name = param[0]
         service_model = param[1] if len(param) > 1 else None
         service_model = param[1] if len(param) > 1 else None
         for translator in [GoogleTranslator, BingTranslator, DeepLTranslator, DeepLXTranslator, OllamaTranslator, AzureOpenAITranslator,
         for translator in [GoogleTranslator, BingTranslator, DeepLTranslator, DeepLXTranslator, OllamaTranslator, AzureOpenAITranslator,
-                           OpenAITranslator, ZhipuTranslator, SiliconTranslator, GeminiTranslator, AzureTranslator, TencentTranslator, DifyTranslator, AnythingLLMTranslator]:
+                           OpenAITranslator, ZhipuTranslator, ModelScopeTranslator, SiliconTranslator, GeminiTranslator, AzureTranslator, TencentTranslator, DifyTranslator, AnythingLLMTranslator]:
             if service_name == translator.name:
             if service_name == translator.name:
                 self.translator = translator(lang_in, lang_out, service_model)
                 self.translator = translator(lang_in, lang_out, service_model)
         if not self.translator:
         if not self.translator:

+ 2 - 0
pdf2zh/gui.py

@@ -16,6 +16,7 @@ from pdf2zh.translator import (
     AzureOpenAITranslator,
     AzureOpenAITranslator,
     OpenAITranslator,
     OpenAITranslator,
     ZhipuTranslator,
     ZhipuTranslator,
+    ModelScopeTranslator,
     SiliconTranslator,
     SiliconTranslator,
     GeminiTranslator,
     GeminiTranslator,
     AzureTranslator,
     AzureTranslator,
@@ -39,6 +40,7 @@ service_map: dict[str, BaseTranslator] = {
     "AzureOpenAI": AzureOpenAITranslator,
     "AzureOpenAI": AzureOpenAITranslator,
     "OpenAI": OpenAITranslator,
     "OpenAI": OpenAITranslator,
     "Zhipu": ZhipuTranslator,
     "Zhipu": ZhipuTranslator,
+    "ModelScope": ModelScopeTranslator,
     "Silicon": SiliconTranslator,
     "Silicon": SiliconTranslator,
     "Gemini": GeminiTranslator,
     "Gemini": GeminiTranslator,
     "Azure": AzureTranslator,
     "Azure": AzureTranslator,

+ 16 - 0
pdf2zh/translator.py

@@ -252,6 +252,22 @@ class AzureOpenAITranslator(BaseTranslator):
         return response.choices[0].message.content.strip()
         return response.choices[0].message.content.strip()
 
 
 
 
+class ModelScopeTranslator(OpenAITranslator):
+    name = "modelscope"
+    envs = {
+        "MODELSCOPE_BASE_URL": "https://api-inference.modelscope.cn/v1",
+        "MODELSCOPE_API_KEY": None,
+        "MODELSCOPE_MODEL": "Qwen/Qwen2.5-Coder-32B-Instruct",
+    }
+
+    def __init__(self, lang_in, lang_out, model, base_url=None, api_key=None):
+        base_url = "https://api-inference.modelscope.cn/v1"
+        api_key = os.getenv("MODELSCOPE_API_KEY")
+        if not model:
+            model = os.getenv("MODELSCOPE_MODEL", self.envs["MODELSCOPE_MODEL"])
+        super().__init__(lang_in, lang_out, model, base_url=base_url, api_key=api_key)
+
+
 class ZhipuTranslator(OpenAITranslator):
 class ZhipuTranslator(OpenAITranslator):
     # https://bigmodel.cn/dev/api/thirdparty-frame/openai-sdk
     # https://bigmodel.cn/dev/api/thirdparty-frame/openai-sdk
     name = "zhipu"
     name = "zhipu"