diff --git a/docutranslate/agents/agent.py b/docutranslate/agents/agent.py index 5145c44..de466f1 100644 --- a/docutranslate/agents/agent.py +++ b/docutranslate/agents/agent.py @@ -41,8 +41,8 @@ class PartialAgentResultError(ValueError): @dataclass(kw_only=True) class AgentConfig: logger: logging.Logger - baseurl: str - key: str + base_url: str + api_key: str model_id: str temperature: float = 0.7 max_concurrent: int = 30 @@ -110,11 +110,11 @@ class Agent: def __init__(self, config: AgentConfig): - self.baseurl = config.baseurl.strip() + self.baseurl = config.base_url.strip() if self.baseurl.endswith("/"): self.baseurl = self.baseurl[:-1] self.domain = urlparse(self.baseurl).netloc - self.key = config.key.strip() or "xx" + self.key = config.api_key.strip() or "xx" self.model_id = config.model_id.strip() self.system_prompt = "" self.temperature = config.temperature diff --git a/docutranslate/agents/glossary_agent.py b/docutranslate/agents/glossary_agent.py index 0e40cd4..2763bd3 100644 --- a/docutranslate/agents/glossary_agent.py +++ b/docutranslate/agents/glossary_agent.py @@ -33,19 +33,20 @@ You need to extract person names and location names from these paragraphs and tr Finally, output a glossary of original terms:translated terms # Requirements +- The original language is identified based on the context.The target language is {self.to_lang} +- The src in the output glossary must exactly match the original term in original language, while dst is the {self.to_lang} translation of the term - Do not include special tags or tags formatted as `` in the glossary -- The src in the output glossary must exactly match the original term, while dst is the {self.to_lang} translation of the term - The same src should only appear once in the glossary without repetition --Do not include common nouns in the glossary. +- Do not include common nouns in the glossary. # Output The output format should be plain JSON text in a list format {[{"src": "", "dst": ""}]} -# Example +# Example1(Assuming the source language is English and the target language is Chinese in the example) ## Input {{"0":"Jobs likes apples","1":"Bill Gates is sunbathing in Shanghai."}} -## Output(Assuming the target language is Chinese) +## Output {r'[{"src": "Jobs", "dst": "乔布斯"}, {"src": "Bill Gates", "dst": "比尔盖茨"}, {"src": "Shanghai", "dst": "上海"}]'} """ diff --git a/docutranslate/agents/markdown_agent.py b/docutranslate/agents/markdown_agent.py index df063a8..0d20f10 100644 --- a/docutranslate/agents/markdown_agent.py +++ b/docutranslate/agents/markdown_agent.py @@ -40,8 +40,7 @@ Target language: {config.to_lang} # Output The translated markdown text as plain text (not in a markdown code block, with no extraneous text). -# Example -## Target language is Chinese +# Example(Assuming the target language is Chinese in the example, {config.to_lang} is the actual target language) Input: hello, what's your nam*@e? ![photo title]() diff --git a/docutranslate/agents/segments_agent.py b/docutranslate/agents/segments_agent.py index 349afbb..b78b5a8 100644 --- a/docutranslate/agents/segments_agent.py +++ b/docutranslate/agents/segments_agent.py @@ -43,10 +43,10 @@ class SegmentsTranslateAgent(Agent): - The translated sequence of segments, represented as JSON text (note: not a code block). The keys are the segment IDs, and the values are the translated segments. - The returned JSON text must be a dictionary of the form {{: }}. - The segment IDs in the output must **exactly** match those in the input. And all segment IDs in input must appear in the output. -# Example +# Example(Assuming the target language is Chinese in the example, {config.to_lang} is the actual target language) ## Input {r'{"10":"hello","11":"apple","12":true,"13":"false","14":null}'} -## Output(Assuming the target language is Chinese) +## Output {r'{"10":"你好","11":"苹果","12":true,"13":"错误","14":null}'} > Warning: Never wrap the JSON text in ```. """ diff --git a/docutranslate/app.py b/docutranslate/app.py index 1f0ab43..4550bd0 100644 --- a/docutranslate/app.py +++ b/docutranslate/app.py @@ -273,15 +273,6 @@ class BaseWorkflowParams(BaseModel): # 如果跳过翻译,则不进行任何检查,允许 base_url 等字段为空 return values - @model_validator(mode='after') - def check_glossary_config(self) -> 'BaseWorkflowParams': - """ - 在所有字段验证后,检查术语表相关配置的逻辑一致性。 - """ - if self.glossary_generate_enable and not self.glossary_agent_config: - raise ValueError("当 `glossary_generate_enable` 为 `True` 时, `glossary_agent_config` 字段是必须的。") - return self - # 2. 为每个工作流创建独立的参数模型 class MarkdownWorkflowParams(BaseWorkflowParams): diff --git a/docutranslate/static/index.html b/docutranslate/static/index.html index 88fe241..909b627 100644 --- a/docutranslate/static/index.html +++ b/docutranslate/static/index.html @@ -1 +1 @@ - DocuTranslate - 交互式文档翻译

DocuTranslate

如果上传的文件本身是.md格式,此项可不选。
mineru VLM是更新的内测模型。

Base URL:

选择一个或多个CSV文件。文件需包含'src'和'dst'两列标题,分别代表原文和译文。

GitHub主页(欢迎star❤):
https://github.com/xunbu/docutranslate

交流QQ群: 1047781902

version:

任务列表

LOGO

当前没有任务,点击“新建任务”开始吧!

预览
原文
译文
\ No newline at end of file + DocuTranslate - 交互式文档翻译

DocuTranslate

如果上传的文件本身是.md格式,此项可不选。
mineru VLM是更新的内测模型。

Base URL:

选择一个或多个CSV文件。文件需包含'src'和'dst'两列标题,分别代表原文和译文。

GitHub主页(欢迎star❤):
https://github.com/xunbu/docutranslate

交流QQ群: 1047781902

version:

任务列表

LOGO

当前没有任务,点击“新建任务”开始吧!

预览
原文
译文
\ No newline at end of file diff --git a/docutranslate/translator/ai_translator/base.py b/docutranslate/translator/ai_translator/base.py index c4475c2..9d757f2 100644 --- a/docutranslate/translator/ai_translator/base.py +++ b/docutranslate/translator/ai_translator/base.py @@ -50,8 +50,8 @@ class AiTranslator(Translator[T]): else: glossary_agent_config = GlossaryAgentConfig( to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/docx_translator.py b/docutranslate/translator/ai_translator/docx_translator.py index ba04227..c48d95c 100644 --- a/docutranslate/translator/ai_translator/docx_translator.py +++ b/docutranslate/translator/ai_translator/docx_translator.py @@ -44,8 +44,8 @@ class DocxTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/epub_translator.py b/docutranslate/translator/ai_translator/epub_translator.py index c851b47..7d85211 100644 --- a/docutranslate/translator/ai_translator/epub_translator.py +++ b/docutranslate/translator/ai_translator/epub_translator.py @@ -35,8 +35,8 @@ class EpubTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/html_translator.py b/docutranslate/translator/ai_translator/html_translator.py index 1d12c2b..9e4b21c 100644 --- a/docutranslate/translator/ai_translator/html_translator.py +++ b/docutranslate/translator/ai_translator/html_translator.py @@ -92,8 +92,8 @@ class HtmlTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/json_translator.py b/docutranslate/translator/ai_translator/json_translator.py index c4eea12..18230d2 100644 --- a/docutranslate/translator/ai_translator/json_translator.py +++ b/docutranslate/translator/ai_translator/json_translator.py @@ -25,8 +25,8 @@ class JsonTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/md_translator.py b/docutranslate/translator/ai_translator/md_translator.py index b743a6d..ac87cb0 100644 --- a/docutranslate/translator/ai_translator/md_translator.py +++ b/docutranslate/translator/ai_translator/md_translator.py @@ -25,8 +25,8 @@ class MDTranslator(AiTranslator): if not self.skip_translate: agent_config = MDTranslateAgentConfig(custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/srt_translator.py b/docutranslate/translator/ai_translator/srt_translator.py index 153a7b0..7406e5a 100644 --- a/docutranslate/translator/ai_translator/srt_translator.py +++ b/docutranslate/translator/ai_translator/srt_translator.py @@ -31,8 +31,8 @@ class SrtTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/txt_translator.py b/docutranslate/translator/ai_translator/txt_translator.py index c0c2bac..78106b8 100644 --- a/docutranslate/translator/ai_translator/txt_translator.py +++ b/docutranslate/translator/ai_translator/txt_translator.py @@ -49,8 +49,8 @@ class TXTTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking, diff --git a/docutranslate/translator/ai_translator/xlsx_translator.py b/docutranslate/translator/ai_translator/xlsx_translator.py index c7843a9..981c95b 100644 --- a/docutranslate/translator/ai_translator/xlsx_translator.py +++ b/docutranslate/translator/ai_translator/xlsx_translator.py @@ -33,8 +33,8 @@ class XlsxTranslator(AiTranslator): agent_config = SegmentsTranslateAgentConfig( custom_prompt=config.custom_prompt, to_lang=config.to_lang, - baseurl=config.base_url, - key=config.api_key, + base_url=config.base_url, + api_key=config.api_key, model_id=config.model_id, temperature=config.temperature, thinking=config.thinking,