Skip to content

Commit b24b55a

Browse files
authored
Merge pull request PDFMathTranslate#203 from yidasanqian/main
2 parents adfc4e5 + c032174 commit b24b55a

5 files changed

Lines changed: 33 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ The table below outlines the required [environment variables](https://chatgpt.co
197197
|**DeepLX**|`deeplx`|`DEEPLX_ENDPOINT`|`https://api.deepl.com/translate`|See [DeepLX](https://github.com/OwO-Network/DeepLX)|
198198
|**Ollama**|`ollama`|`OLLAMA_HOST`, `OLLAMA_MODEL`|`http://127.0.0.1:11434`, `gemma2`|See [Ollama](https://github.com/ollama/ollama)|
199199
|**OpenAI**|`openai`|`OPENAI_BASE_URL`, `OPENAI_API_KEY`, `OPENAI_MODEL`|`https://api.openai.com/v1`, `[Your Key]`, `gpt-4o-mini`|See [OpenAI](https://platform.openai.com/docs/overview)|
200+
|**AzureOpenAI**|`azure-openai`|`AZURE_OPENAI_BASE_URL`, `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_MODEL`,`AZURE_OPENAI_API_VERSION`|`[Your Endpoint]`, `[Your Key]`, `gpt-4o-mini``2024-06-01`|See [Azure OpenAI](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cjavascript-keyless%2Ctypescript-keyless%2Cpython&pivots=programming-language-python)|
200201
|**Zhipu**|`zhipu`|`ZHIPU_API_KEY`, `ZHIPU_MODEL`|`[Your Key]`, `glm-4-flash`|See [Zhipu](https://open.bigmodel.cn/dev/api/thirdparty-frame/openai-sdk)|
201202
|**Silicon**|`silicon`|`SILICON_API_KEY`, `SILICON_MODEL`|`[Your Key]`, `Qwen/Qwen2.5-7B-Instruct`|See [SiliconCloud](https://docs.siliconflow.cn/quickstart)|
202203
|**Azure**|`azure`|`AZURE_ENDPOINT`, `AZURE_API_KEY`|`https://api.translator.azure.cn`, `[Your Key]`|See [Azure](https://docs.azure.cn/en-us/ai-services/translator/text-translation-overview)|

README_zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ pdf2zh example.pdf -li en -lo ja
197197
|**DeepLX**|`deeplx`|`DEEPLX_ENDPOINT`|`https://api.deepl.com/translate`|See [DeepLX](https://github.com/OwO-Network/DeepLX)|
198198
|**Ollama**|`ollama`|`OLLAMA_HOST`, `OLLAMA_MODEL`|`http://127.0.0.1:11434`, `gemma2`|See [Ollama](https://github.com/ollama/ollama)|
199199
|**OpenAI**|`openai`|`OPENAI_BASE_URL`, `OPENAI_API_KEY`, `OPENAI_MODEL`|`https://api.openai.com/v1`, `[Your Key]`, `gpt-4o-mini`|See [OpenAI](https://platform.openai.com/docs/overview)|
200+
|**AzureOpenAI**|`azure-openai`|`AZURE_OPENAI_BASE_URL`, `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_MODEL`,`AZURE_OPENAI_API_VERSION`|`[Your Endpoint]`, `[Your Key]`, `gpt-4o-mini``2024-06-01`|See [Azure OpenAI](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cjavascript-keyless%2Ctypescript-keyless%2Cpython&pivots=programming-language-python)|
200201
|**Zhipu**|`zhipu`|`ZHIPU_API_KEY`, `ZHIPU_MODEL`|`[Your Key]`, `glm-4-flash`|See [Zhipu](https://open.bigmodel.cn/dev/api/thirdparty-frame/openai-sdk)|
201202
|**Silicon**|`silicon`|`SILICON_API_KEY`, `SILICON_MODEL`|`[Your Key]`, `Qwen/Qwen2.5-7B-Instruct`|See [SiliconCloud](https://docs.siliconflow.cn/quickstart)|
202203
|**Azure**|`azure`|`AZURE_ENDPOINT`, `AZURE_API_KEY`|`https://api.translator.azure.cn`, `[Your Key]`|See [Azure](https://docs.azure.cn/en-us/ai-services/translator/text-translation-overview)|

pdf2zh/converter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from tenacity import retry, wait_fixed
1818
from pdf2zh import cache
1919
from pdf2zh.translator import (
20+
AzureOpenAITranslator,
2021
BaseTranslator,
2122
GoogleTranslator,
2223
BingTranslator,
@@ -140,7 +141,8 @@ def __init__(
140141
param = service.split(":", 1)
141142
service_name = param[0]
142143
service_model = param[1] if len(param) > 1 else None
143-
for translator in [GoogleTranslator, BingTranslator, DeepLTranslator, DeepLXTranslator, OllamaTranslator, OpenAITranslator, ZhipuTranslator, SiliconTranslator, AzureTranslator, TencentTranslator]:
144+
for translator in [GoogleTranslator, BingTranslator, DeepLTranslator, DeepLXTranslator, OllamaTranslator, AzureOpenAITranslator,
145+
OpenAITranslator, ZhipuTranslator, SiliconTranslator, AzureTranslator, TencentTranslator]:
144146
if service_name == translator.name:
145147
self.translator = translator(service, lang_out, lang_in, service_model)
146148
if not self.translator:

pdf2zh/gui.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
DeepLTranslator,
1111
DeepLXTranslator,
1212
OllamaTranslator,
13+
AzureOpenAITranslator,
1314
OpenAITranslator,
1415
ZhipuTranslator,
1516
SiliconTranslator,
@@ -30,6 +31,7 @@
3031
"DeepL": DeepLTranslator,
3132
"DeepLX": DeepLXTranslator,
3233
"Ollama": OllamaTranslator,
34+
"AzureOpenAI": AzureOpenAITranslator,
3335
"OpenAI": OpenAITranslator,
3436
"Zhipu": ZhipuTranslator,
3537
"Silicon": SiliconTranslator,

pdf2zh/translator.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,32 @@ def translate(self, text) -> str:
216216
messages=self.prompt(text),
217217
)
218218
return response.choices[0].message.content.strip()
219+
220+
221+
class AzureOpenAITranslator(BaseTranslator):
222+
name = "azure-openai"
223+
envs = {
224+
"AZURE_OPENAI_BASE_URL": None, # e.g. "https://xxx.openai.azure.com"
225+
"AZURE_OPENAI_API_KEY": None,
226+
"AZURE_OPENAI_MODEL": "gpt-4o-mini"
227+
}
228+
229+
def __init__(self, service, lang_out, lang_in, model, base_url=None, api_key=None):
230+
base_url = os.getenv("AZURE_OPENAI_BASE_URL", self.envs["AZURE_OPENAI_BASE_URL"])
231+
api_version = os.getenv("AZURE_OPENAI_API_VERSION", "2024-06-01")
232+
if not model:
233+
model = os.getenv("AZURE_OPENAI_MODEL", self.envs["AZURE_OPENAI_MODEL"])
234+
super().__init__(service, lang_out, lang_in, model)
235+
self.options = {"temperature": 0}
236+
self.client = openai.AzureOpenAI(azure_endpoint=base_url, azure_deployment=model, api_version=api_version, api_key=api_key)
237+
238+
def translate(self, text) -> str:
239+
response = self.client.chat.completions.create(
240+
model=self.model,
241+
**self.options,
242+
messages=self.prompt(text),
243+
)
244+
return response.choices[0].message.content.strip()
219245

220246

221247
class ZhipuTranslator(OpenAITranslator):

0 commit comments

Comments
 (0)