Byaidu 1 год назад
Родитель
Сommit
df326bc266
3 измененных файлов с 43 добавлено и 7 удалено
  1. 1 1
      README.md
  2. 1 1
      README_zh-CN.md
  3. 41 5
      pdf2zh/translator.py

+ 1 - 1
README.md

@@ -234,7 +234,7 @@ pdf2zh example.pdf -li en -lo ja
   - `OPENAI_API_KEY`, e.g., `export OPENAI_API_KEY=xxx`
 
   ```bash
-  pdf2zh example.pdf -s openai:gpt-4o
+  pdf2zh example.pdf -s openai:gpt-4o-mini
   ```
 
 - **Azure**

+ 1 - 1
README_zh-CN.md

@@ -238,7 +238,7 @@ pdf2zh example.pdf -s ollama:gemma2
 - `OPENAI_API_KEY`, e.g., `export OPENAI_API_KEY=xxx`
 
 ```bash
-pdf2zh example.pdf -s openai:gpt-4o
+pdf2zh example.pdf -s openai:gpt-4o-mini
 ```
 
 - **Azure**

+ 41 - 5
pdf2zh/translator.py

@@ -222,15 +222,15 @@ class OpenAITranslator(BaseTranslator):
     envs = {
         "OPENAI_BASE_URL": "https://api.openai.com/v1",
         "OPENAI_API_KEY": None,
-        "OPENAI_MODEL": "gpt-4o",
+        "OPENAI_MODEL": "gpt-4o-mini",
     }
 
-    def __init__(self, service, lang_out, lang_in, model):
+    def __init__(self, service, lang_out, lang_in, model, base_url=None, api_key=None):
         if not model:
             model = os.getenv("OPENAI_MODEL", self.envs["OPENAI_MODEL"])
         super().__init__(service, lang_out, lang_in, model)
         self.options = {"temperature": 0}  # 随机采样可能会打断公式标记
-        self.client = openai.OpenAI()
+        self.client = openai.OpenAI(base_url=base_url, api_key=api_key)
 
     def translate(self, text) -> str:
         response = self.client.chat.completions.create(
@@ -241,19 +241,55 @@ class OpenAITranslator(BaseTranslator):
         return response.choices[0].message.content.strip()
 
 
+class ZhipuTranslator(OpenAITranslator):
+    # https://bigmodel.cn/dev/api/thirdparty-frame/openai-sdk
+    name = "zhipu"
+    envs = {
+        "ZHIPU_API_KEY": None,
+        "ZHIPU_MODEL": "glm-4-flash",
+    }
+
+    def __init__(self, service, lang_out, lang_in, model):
+        base_url = "https://open.bigmodel.cn/api/paas/v4"
+        api_key = os.getenv("ZHIPU_API_KEY")
+        if not model:
+            model = os.getenv("ZHIPU_MODEL", self.envs["ZHIPU_MODEL"])
+        super().__init__(
+            service, lang_out, lang_in, model, base_url=base_url, api_key=api_key
+        )
+
+
+class SiliconTranslator(OpenAITranslator):
+    # https://docs.siliconflow.cn/quickstart
+    name = "silicon"
+    envs = {
+        "SILICON_API_KEY": None,
+        "SILICON_MODEL": "Qwen/Qwen2.5-7B-Instruct",
+    }
+
+    def __init__(self, service, lang_out, lang_in, model):
+        base_url = "https://api.siliconflow.cn/v1"
+        api_key = os.getenv("SILICON_API_KEY")
+        if not model:
+            model = os.getenv("SILICON_MODEL", self.envs["SILICON_MODEL"])
+        super().__init__(
+            service, lang_out, lang_in, model, base_url=base_url, api_key=api_key
+        )
+
+
 class AzureTranslator(BaseTranslator):
     # https://github.com/Azure/azure-sdk-for-python
     name = "azure"
     envs = {
         "AZURE_ENDPOINT": "https://api.translator.azure.cn",
-        "AZURE_APIKEY": None,
+        "AZURE_API_KEY": None,
     }
     lang_map = {"zh": "zh-Hans"}
 
     def __init__(self, service, lang_out, lang_in, model):
         super().__init__(service, lang_out, lang_in, model)
         endpoint = os.getenv("AZURE_ENDPOINT", self.envs["AZURE_ENDPOINT"])
-        api_key = os.getenv("AZURE_APIKEY")
+        api_key = os.getenv("AZURE_API_KEY")
         credential = AzureKeyCredential(api_key)
         self.client = TextTranslationClient(
             endpoint=endpoint, credential=credential, region="chinaeast2"