允许自定义系统提示
This commit is contained in:
139
.idea/workspace.xml
generated
139
.idea/workspace.xml
generated
@@ -6,7 +6,12 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="6b18b44a-df57-4212-a857-9e291ebe5dd2" name="更改" comment="">
|
<list default="true" id="6b18b44a-df57-4212-a857-9e291ebe5dd2" name="更改" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/docutranslate/converter/converter_mineru.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/converter/converter_mineru.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/docutranslate/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/__init__.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/docutranslate/agents/agent.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/agents/agent.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/docutranslate/agents/markdown_agent.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/agents/markdown_agent.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/docutranslate/app.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/app.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/docutranslate/static/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/static/index.html" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/docutranslate/translater.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/translater.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -37,63 +42,63 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">{
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"DefaultHtmlFileTemplate": "HTML File",
|
"DefaultHtmlFileTemplate": "HTML File",
|
||||||
"JavaScript 调试.output.html (1).executor": "Run",
|
"JavaScript 调试.output.html (1).executor": "Run",
|
||||||
"JavaScript 调试.output.html.executor": "Run",
|
"JavaScript 调试.output.html.executor": "Run",
|
||||||
"JavaScript 调试.regex.md_中文.html.executor": "Run",
|
"JavaScript 调试.regex.md_中文.html.executor": "Run",
|
||||||
"JavaScript 调试.regex_中文.html.executor": "Run",
|
"JavaScript 调试.regex_中文.html.executor": "Run",
|
||||||
"JavaScript 调试.test.html.executor": "Run",
|
"JavaScript 调试.test.html.executor": "Run",
|
||||||
"JavaScript 调试.test2.html.executor": "Run",
|
"JavaScript 调试.test2.html.executor": "Run",
|
||||||
"JavaScript 调试.test2_英文.html.executor": "Run",
|
"JavaScript 调试.test2_英文.html.executor": "Run",
|
||||||
"JavaScript 调试.test4-1_中文.html.executor": "Run",
|
"JavaScript 调试.test4-1_中文.html.executor": "Run",
|
||||||
"JavaScript 调试.互联网认证授权机制.html.executor": "Run",
|
"JavaScript 调试.互联网认证授权机制.html.executor": "Run",
|
||||||
"JavaScript 调试.互联网认证授权机制_英文.html.executor": "Run",
|
"JavaScript 调试.互联网认证授权机制_英文.html.executor": "Run",
|
||||||
"JavaScript 调试.毕业论文_英文.html.executor": "Run",
|
"JavaScript 调试.毕业论文_英文.html.executor": "Run",
|
||||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||||
"Python 测试.Python 测试 (markdown_mask.py 内).executor": "Run",
|
"Python 测试.Python 测试 (markdown_mask.py 内).executor": "Run",
|
||||||
"Python 测试.markdown_mask.Test.test_basic_link_masking 的 Python 测试.executor": "Run",
|
"Python 测试.markdown_mask.Test.test_basic_link_masking 的 Python 测试.executor": "Run",
|
||||||
"Python 测试.pytest (test_html.py 内).executor": "Run",
|
"Python 测试.pytest (test_html.py 内).executor": "Run",
|
||||||
"Python.1test.executor": "Run",
|
"Python.1test.executor": "Run",
|
||||||
"Python.2test2 (1).executor": "Run",
|
"Python.2test2 (1).executor": "Run",
|
||||||
"Python.3testhtml.executor": "Run",
|
"Python.3testhtml.executor": "Run",
|
||||||
"Python.PDFtranslater (1).executor": "Run",
|
"Python.PDFtranslater (1).executor": "Run",
|
||||||
"Python.PDFtranslater (2).executor": "Run",
|
"Python.PDFtranslater (2).executor": "Run",
|
||||||
"Python.agent.executor": "Debug",
|
"Python.agent.executor": "Debug",
|
||||||
"Python.agent_utils.executor": "Run",
|
"Python.agent_utils.executor": "Run",
|
||||||
"Python.app (1).executor": "Run",
|
"Python.app (1).executor": "Run",
|
||||||
"Python.app.executor": "Run",
|
"Python.app.executor": "Run",
|
||||||
"Python.app2.executor": "Run",
|
"Python.app2.executor": "Run",
|
||||||
"Python.app_test (1).executor": "Run",
|
"Python.app_test (1).executor": "Run",
|
||||||
"Python.convert.executor": "Run",
|
"Python.convert.executor": "Run",
|
||||||
"Python.converter_docling.executor": "Run",
|
"Python.converter_docling.executor": "Run",
|
||||||
"Python.converter_mineru.executor": "Run",
|
"Python.converter_mineru.executor": "Run",
|
||||||
"Python.markdown_splitter.executor": "Debug",
|
"Python.markdown_splitter.executor": "Debug",
|
||||||
"Python.markdown_utils.executor": "Run",
|
"Python.markdown_utils.executor": "Run",
|
||||||
"Python.test.executor": "Run",
|
"Python.test.executor": "Run",
|
||||||
"Python.test1.executor": "Run",
|
"Python.test1.executor": "Run",
|
||||||
"Python.test2.executor": "Run",
|
"Python.test2.executor": "Run",
|
||||||
"Python.test3.executor": "Run",
|
"Python.test3.executor": "Run",
|
||||||
"Python.test4.executor": "Run",
|
"Python.test4.executor": "Run",
|
||||||
"Python.testhtml.executor": "Run",
|
"Python.testhtml.executor": "Run",
|
||||||
"Python.translater.executor": "Run",
|
"Python.translater.executor": "Run",
|
||||||
"Python.切分测试.executor": "Run",
|
"Python.切分测试.executor": "Run",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager": "true",
|
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager": "true",
|
||||||
"RunOnceActivity.git.unshallow": "true",
|
"RunOnceActivity.git.unshallow": "true",
|
||||||
"git-widget-placeholder": "main",
|
"git-widget-placeholder": "dev",
|
||||||
"last_opened_file_path": "C:/Users/jxgm/Desktop/translate/docutranslate",
|
"last_opened_file_path": "C:/Users/jxgm/Desktop/translate/docutranslate",
|
||||||
"list.type.of.created.stylesheet": "CSS",
|
"list.type.of.created.stylesheet": "CSS",
|
||||||
"node.js.detected.package.eslint": "true",
|
"node.js.detected.package.eslint": "true",
|
||||||
"node.js.detected.package.tslint": "true",
|
"node.js.detected.package.tslint": "true",
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
"nodejs_package_manager_path": "npm",
|
"nodejs_package_manager_path": "npm",
|
||||||
"settings.editor.selected.configurable": "preferences.pluginManager",
|
"settings.editor.selected.configurable": "preferences.pluginManager",
|
||||||
"vue.rearranger.settings.migration": "true"
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}</component>
|
}]]></component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="CopyFile.RECENT_KEYS">
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
<recent name="C:\Users\jxgm\Desktop\translate\docutranslate" />
|
<recent name="C:\Users\jxgm\Desktop\translate\docutranslate" />
|
||||||
@@ -491,8 +496,8 @@
|
|||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
<item itemvalue="Python.app_test (1)" />
|
<item itemvalue="Python.app_test (1)" />
|
||||||
<item itemvalue="JavaScript 调试.test2.html" />
|
|
||||||
<item itemvalue="Python.3testhtml" />
|
<item itemvalue="Python.3testhtml" />
|
||||||
|
<item itemvalue="JavaScript 调试.test2.html" />
|
||||||
<item itemvalue="Python.translater" />
|
<item itemvalue="Python.translater" />
|
||||||
<item itemvalue="Python.2test2 (1)" />
|
<item itemvalue="Python.2test2 (1)" />
|
||||||
</list>
|
</list>
|
||||||
@@ -592,7 +597,8 @@
|
|||||||
<workItem from="1748186982208" duration="3003000" />
|
<workItem from="1748186982208" duration="3003000" />
|
||||||
<workItem from="1748220705934" duration="6440000" />
|
<workItem from="1748220705934" duration="6440000" />
|
||||||
<workItem from="1748236163786" duration="323000" />
|
<workItem from="1748236163786" duration="323000" />
|
||||||
<workItem from="1748353819402" duration="220000" />
|
<workItem from="1748353819402" duration="2973000" />
|
||||||
|
<workItem from="1748360287873" duration="6961000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
@@ -610,26 +616,15 @@
|
|||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
|
||||||
<breakpoint-manager>
|
|
||||||
<breakpoints>
|
|
||||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
|
||||||
<url>file://$PROJECT_DIR$/docutranslate/translater.py</url>
|
|
||||||
<line>241</line>
|
|
||||||
<option name="timeStamp" value="2" />
|
|
||||||
</line-breakpoint>
|
|
||||||
</breakpoints>
|
|
||||||
</breakpoint-manager>
|
|
||||||
</component>
|
|
||||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$app_test__1_.coverage" NAME="app_test (1) 覆盖结果" MODIFIED="1748353944846" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
<SUITE FILE_PATH="coverage/filetranslate$app_test__1_.coverage" NAME="app_test (1) 覆盖结果" MODIFIED="1748398439791" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$test.coverage" NAME="test 覆盖结果" MODIFIED="1747472297913" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
<SUITE FILE_PATH="coverage/filetranslate$test.coverage" NAME="test 覆盖结果" MODIFIED="1747472297913" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$convert.coverage" NAME="convert 覆盖结果" MODIFIED="1746963490689" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate/utils" />
|
<SUITE FILE_PATH="coverage/filetranslate$convert.coverage" NAME="convert 覆盖结果" MODIFIED="1746963490689" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate/utils" />
|
||||||
<SUITE FILE_PATH="coverage/PDFtranslate$PDFtranslater__1_.coverage" NAME="PDFtranslater (1) 覆盖结果" MODIFIED="1746633258205" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages" />
|
<SUITE FILE_PATH="coverage/PDFtranslate$PDFtranslater__1_.coverage" NAME="PDFtranslater (1) 覆盖结果" MODIFIED="1746633258205" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$pytest__test_html_py__.coverage" NAME="pytest (test_html.py 内) 覆盖结果" MODIFIED="1747554037236" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
<SUITE FILE_PATH="coverage/filetranslate$pytest__test_html_py__.coverage" NAME="pytest (test_html.py 内) 覆盖结果" MODIFIED="1747554037236" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
||||||
<SUITE FILE_PATH="coverage/PDFtranslate$agent_utils.coverage" NAME="agent_utils 覆盖结果" MODIFIED="1746617703678" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages/utils" />
|
<SUITE FILE_PATH="coverage/PDFtranslate$agent_utils.coverage" NAME="agent_utils 覆盖结果" MODIFIED="1746617703678" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages/utils" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$app2.coverage" NAME="app2 覆盖结果" MODIFIED="1747108180309" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate" />
|
<SUITE FILE_PATH="coverage/filetranslate$app2.coverage" NAME="app2 覆盖结果" MODIFIED="1747108180309" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$3testhtml.coverage" NAME="3testhtml 覆盖结果" MODIFIED="1748261775567" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
<SUITE FILE_PATH="coverage/filetranslate$3testhtml.coverage" NAME="3testhtml 覆盖结果" MODIFIED="1748361746296" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/tests" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$app.coverage" NAME="app 覆盖结果" MODIFIED="1747448464521" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate" />
|
<SUITE FILE_PATH="coverage/filetranslate$app.coverage" NAME="app 覆盖结果" MODIFIED="1747448464521" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate" />
|
||||||
<SUITE FILE_PATH="coverage/PDFtranslate$markdown_splitter.coverage" NAME="markdown_splitter 覆盖结果" MODIFIED="1746599883603" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages/utils" />
|
<SUITE FILE_PATH="coverage/PDFtranslate$markdown_splitter.coverage" NAME="markdown_splitter 覆盖结果" MODIFIED="1746599883603" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/pdftranslate_packages/utils" />
|
||||||
<SUITE FILE_PATH="coverage/filetranslate$converter_mineru.coverage" NAME="converter_mineru 覆盖结果" MODIFIED="1747726229881" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate/converter" />
|
<SUITE FILE_PATH="coverage/filetranslate$converter_mineru.coverage" NAME="converter_mineru 覆盖结果" MODIFIED="1747726229881" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/docutranslate/converter" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
__version__="0.2.28"
|
__version__="0.2.29"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ class Agent:
|
|||||||
self.client_async = httpx.AsyncClient()
|
self.client_async = httpx.AsyncClient()
|
||||||
self.max_concurrent = max_concurrent
|
self.max_concurrent = max_concurrent
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
|
|
||||||
def _prepare_request_data(self, prompt: str, system_prompt: str, temperature=None, top_p=0.9):
|
def _prepare_request_data(self, prompt: str, system_prompt: str, temperature=None, top_p=0.9):
|
||||||
if temperature is None:
|
if temperature is None:
|
||||||
temperature = self.temperature
|
temperature = self.temperature
|
||||||
@@ -97,6 +96,7 @@ class Agent:
|
|||||||
system_prompt: str | None = None,
|
system_prompt: str | None = None,
|
||||||
max_concurrent: int | None = None # 新增参数,默认并发数为5
|
max_concurrent: int | None = None # 新增参数,默认并发数为5
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
|
print(f"system_prompt:{self.system_prompt}")
|
||||||
max_concurrent = self.max_concurrent if max_concurrent is None else max_concurrent
|
max_concurrent = self.max_concurrent if max_concurrent is None else max_concurrent
|
||||||
total = len(prompts)
|
total = len(prompts)
|
||||||
count = 0
|
count = 0
|
||||||
|
|||||||
@@ -2,8 +2,9 @@ from typing import Unpack
|
|||||||
|
|
||||||
from .agent import (Agent, AgentArgs)
|
from .agent import (Agent, AgentArgs)
|
||||||
|
|
||||||
|
|
||||||
class MDRefineAgent(Agent):
|
class MDRefineAgent(Agent):
|
||||||
def __init__(self,**kwargs:Unpack[AgentArgs]):
|
def __init__(self, custom_prompt=None, **kwargs: Unpack[AgentArgs]):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.system_prompt = r"""
|
self.system_prompt = r"""
|
||||||
# 角色
|
# 角色
|
||||||
@@ -35,12 +36,14 @@ code、latex和HTML保持结构
|
|||||||
{c_0,c_1,c^2}是一个集合
|
{c_0,c_1,c^2}是一个集合
|
||||||
输出:
|
输出:
|
||||||
一道题目<ph-12asd2>:$c_0+1=2$,$c_0$等于几
|
一道题目<ph-12asd2>:$c_0+1=2$,$c_0$等于几
|
||||||
{$c_0$,$c_1$,$c^2$}是一个集合
|
{$c_0$,$c_1$,$c^2$}是一个集合"""
|
||||||
\no_think"""
|
if custom_prompt:
|
||||||
|
self.system_prompt += "\n#其余要求(可能为背景或指令)\n" + custom_prompt
|
||||||
|
self.system_prompt+=r'\no_think'
|
||||||
|
|
||||||
|
|
||||||
class MDTranslateAgent(Agent):
|
class MDTranslateAgent(Agent):
|
||||||
def __init__(self,to_lang="中文",**kwargs:Unpack[AgentArgs]):
|
def __init__(self, custom_prompt=None, to_lang="中文", **kwargs: Unpack[AgentArgs]):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self.system_prompt = f"""
|
self.system_prompt = f"""
|
||||||
# 角色
|
# 角色
|
||||||
@@ -79,5 +82,7 @@ The equation is E=mc 2. This is famous.
|
|||||||
volume 99, pages 173–186, 1999.
|
volume 99, pages 173–186, 1999.
|
||||||
输出:【文献引用保持源语言】
|
输出:【文献引用保持源语言】
|
||||||
[2] M. Castro, B. Liskov, et al. Practical byzantine fault tolerance. In OSDI,
|
[2] M. Castro, B. Liskov, et al. Practical byzantine fault tolerance. In OSDI,
|
||||||
volume 99, pages 173–186, 1999.
|
volume 99, pages 173–186, 1999."""
|
||||||
\\no_think"""
|
if custom_prompt:
|
||||||
|
self.system_prompt += "\n#其余要求(可能为背景或指令)\n" + custom_prompt
|
||||||
|
self.system_prompt+=r'\no_think'
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ async def _perform_translation(params: Dict[str, Any], file_contents: bytes, ori
|
|||||||
to_lang=params['to_lang'],
|
to_lang=params['to_lang'],
|
||||||
formula=params['formula_ocr'],
|
formula=params['formula_ocr'],
|
||||||
code=params['code_ocr'],
|
code=params['code_ocr'],
|
||||||
|
custom_prompt_translate=params['custom_prompt_translate'],
|
||||||
refine=params['refine_markdown'],
|
refine=params['refine_markdown'],
|
||||||
save=False
|
save=False
|
||||||
)
|
)
|
||||||
@@ -201,7 +202,6 @@ async def main_page(request: Request):
|
|||||||
|
|
||||||
@app.post("/translate")
|
@app.post("/translate")
|
||||||
async def handle_translate(
|
async def handle_translate(
|
||||||
request: Request, # Added request for potential future use, not strictly needed now
|
|
||||||
base_url: str = Form(...),
|
base_url: str = Form(...),
|
||||||
apikey: str = Form(...),
|
apikey: str = Form(...),
|
||||||
model_id: str = Form(...),
|
model_id: str = Form(...),
|
||||||
@@ -209,8 +209,9 @@ async def handle_translate(
|
|||||||
formula_ocr: bool = Form(False),
|
formula_ocr: bool = Form(False),
|
||||||
code_ocr: bool = Form(False),
|
code_ocr: bool = Form(False),
|
||||||
refine_markdown: bool = Form(False),
|
refine_markdown: bool = Form(False),
|
||||||
convert_engin: str = Form(...), # New parameter
|
convert_engin: str = Form(...),
|
||||||
mineru_token: Optional[str] = Form(None), # New parameter
|
mineru_token: Optional[str] = Form(None),
|
||||||
|
custom_prompt_translate: Optional[str] = Form(None),
|
||||||
file: UploadFile = File(...)
|
file: UploadFile = File(...)
|
||||||
):
|
):
|
||||||
global current_state, log_queue, log_history
|
global current_state, log_queue, log_history
|
||||||
@@ -276,8 +277,9 @@ async def handle_translate(
|
|||||||
"base_url": base_url, "apikey": apikey, "model_id": model_id,
|
"base_url": base_url, "apikey": apikey, "model_id": model_id,
|
||||||
"to_lang": to_lang, "formula_ocr": formula_ocr,
|
"to_lang": to_lang, "formula_ocr": formula_ocr,
|
||||||
"code_ocr": code_ocr, "refine_markdown": refine_markdown,
|
"code_ocr": code_ocr, "refine_markdown": refine_markdown,
|
||||||
"convert_engin": convert_engin, # Pass to task
|
"convert_engin": convert_engin,
|
||||||
"mineru_token": mineru_token, # Pass to task
|
"mineru_token": mineru_token,
|
||||||
|
"custom_prompt_translate":custom_prompt_translate,
|
||||||
}
|
}
|
||||||
|
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_running_loop()
|
||||||
|
|||||||
@@ -22,6 +22,14 @@
|
|||||||
padding-bottom: 0.5rem;
|
padding-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.prompt-area {
|
||||||
|
resize: vertical;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 200px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.log-area {
|
.log-area {
|
||||||
background-color: #f5f5f5;
|
background-color: #f5f5f5;
|
||||||
@@ -398,6 +406,14 @@
|
|||||||
<input type="text" id="model_id" name="model_id" placeholder="模型id" required>
|
<input type="text" id="model_id" name="model_id" placeholder="模型id" required>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
<details>
|
||||||
|
<summary>系统提示(可选)</summary>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="custom_prompt_translate"></label>
|
||||||
|
<textarea class="prompt-area" type="text" id="custom_prompt_translate"
|
||||||
|
name="custom_prompt_translate" placeholder="翻译提示"></textarea>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
<button type="submit" id="submitButton" class="primary">开始翻译</button>
|
<button type="submit" id="submitButton" class="primary">开始翻译</button>
|
||||||
</form>
|
</form>
|
||||||
<div id="resultArea">
|
<div id="resultArea">
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ class FileTranslater:
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def default_refine_agent(self, custom_prompt=None) -> MDRefineAgent:
|
||||||
|
return MDRefineAgent(custom_prompt=custom_prompt, **self._default_agent_params())
|
||||||
|
|
||||||
|
def default_translate_agent(self, custom_prompt=None, to_lang="中文") -> MDTranslateAgent:
|
||||||
|
return MDTranslateAgent(custom_prompt=custom_prompt, to_lang=to_lang, **self._default_agent_params())
|
||||||
|
|
||||||
def _convert2markdown(self, document: Document, formula: bool, code: bool, artifact: Path = None) -> str:
|
def _convert2markdown(self, document: Document, formula: bool, code: bool, artifact: Path = None) -> str:
|
||||||
translater_logger.info(f"正在使用{self.convert_engin}转换文件为markdown")
|
translater_logger.info(f"正在使用{self.convert_engin}转换文件为markdown")
|
||||||
if self.convert_engin == "docling":
|
if self.convert_engin == "docling":
|
||||||
@@ -202,48 +208,49 @@ class FileTranslater:
|
|||||||
self.save_as_markdown(filename=f"{file_path.stem}.md")
|
self.save_as_markdown(filename=f"{file_path.stem}.md")
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def refine_markdown_by_agent(self, refine_agent: Agent | None = None) -> str:
|
def refine_markdown_by_agent(self, refine_agent: Agent | None = None, custom_prompt=None) -> str:
|
||||||
translater_logger.info("正在修正markdown")
|
translater_logger.info("正在修正markdown")
|
||||||
self._mask_uris_in_markdown()
|
self._mask_uris_in_markdown()
|
||||||
chuncks = self._split_markdown_into_chunks()
|
chuncks = self._split_markdown_into_chunks()
|
||||||
if refine_agent is None:
|
if refine_agent is None:
|
||||||
refine_agent = MDRefineAgent(**self._default_agent_params())
|
refine_agent = self.default_refine_agent(custom_prompt)
|
||||||
result: list[str] = refine_agent.send_prompts(chuncks)
|
result: list[str] = refine_agent.send_prompts(chuncks)
|
||||||
self.markdown = join_markdown_texts(result)
|
self.markdown = join_markdown_texts(result)
|
||||||
self._unmask_uris_in_markdown()
|
self._unmask_uris_in_markdown()
|
||||||
translater_logger.info("markdown已修正")
|
translater_logger.info("markdown已修正")
|
||||||
return self.markdown
|
return self.markdown
|
||||||
|
|
||||||
def translate_markdown_by_agent(self, translate_agent: Agent | None = None, to_lang="中文"):
|
def translate_markdown_by_agent(self, translate_agent: Agent | None = None, to_lang="中文", custom_prompt=None):
|
||||||
translater_logger.info("正在翻译markdown")
|
translater_logger.info("正在翻译markdown")
|
||||||
self._mask_uris_in_markdown()
|
self._mask_uris_in_markdown()
|
||||||
chuncks = self._split_markdown_into_chunks()
|
chuncks = self._split_markdown_into_chunks()
|
||||||
if translate_agent is None:
|
if translate_agent is None:
|
||||||
translate_agent = MDTranslateAgent(to_lang=to_lang, **self._default_agent_params())
|
translate_agent = self.default_translate_agent(custom_prompt=custom_prompt, to_lang=to_lang)
|
||||||
result: list[str] = translate_agent.send_prompts(chuncks)
|
result: list[str] = translate_agent.send_prompts(chuncks)
|
||||||
self.markdown = join_markdown_texts(result)
|
self.markdown = join_markdown_texts(result)
|
||||||
self._unmask_uris_in_markdown()
|
self._unmask_uris_in_markdown()
|
||||||
translater_logger.info("翻译完成")
|
translater_logger.info("翻译完成")
|
||||||
return self.markdown
|
return self.markdown
|
||||||
|
|
||||||
async def refine_markdown_by_agent_async(self, refine_agent: Agent | None = None) -> str:
|
async def refine_markdown_by_agent_async(self, refine_agent: Agent | None = None, custom_prompt=None) -> str:
|
||||||
translater_logger.info("正在修正markdown")
|
translater_logger.info("正在修正markdown")
|
||||||
self._mask_uris_in_markdown()
|
self._mask_uris_in_markdown()
|
||||||
chuncks = self._split_markdown_into_chunks()
|
chuncks = self._split_markdown_into_chunks()
|
||||||
if refine_agent is None:
|
if refine_agent is None:
|
||||||
refine_agent = MDRefineAgent(**self._default_agent_params())
|
refine_agent = self.default_refine_agent(custom_prompt=custom_prompt)
|
||||||
result: list[str] = await refine_agent.send_prompts_async(chuncks)
|
result: list[str] = await refine_agent.send_prompts_async(chuncks)
|
||||||
self.markdown = join_markdown_texts(result)
|
self.markdown = join_markdown_texts(result)
|
||||||
self._unmask_uris_in_markdown()
|
self._unmask_uris_in_markdown()
|
||||||
translater_logger.info("markdown已修正")
|
translater_logger.info("markdown已修正")
|
||||||
return self.markdown
|
return self.markdown
|
||||||
|
|
||||||
async def translate_markdown_by_agent_async(self, translate_agent: Agent | None = None, to_lang="中文"):
|
async def translate_markdown_by_agent_async(self, translate_agent: Agent | None = None, to_lang="中文",
|
||||||
|
custom_prompt=None):
|
||||||
translater_logger.info("正在翻译markdown")
|
translater_logger.info("正在翻译markdown")
|
||||||
self._mask_uris_in_markdown()
|
self._mask_uris_in_markdown()
|
||||||
chuncks = self._split_markdown_into_chunks()
|
chuncks = self._split_markdown_into_chunks()
|
||||||
if translate_agent is None:
|
if translate_agent is None:
|
||||||
translate_agent = MDTranslateAgent(to_lang=to_lang, **self._default_agent_params())
|
translate_agent = self.default_translate_agent(to_lang=to_lang, custom_prompt=custom_prompt)
|
||||||
result: list[str] = await translate_agent.send_prompts_async(chuncks)
|
result: list[str] = await translate_agent.send_prompts_async(chuncks)
|
||||||
self.markdown = join_markdown_texts(result)
|
self.markdown = join_markdown_texts(result)
|
||||||
self._unmask_uris_in_markdown()
|
self._unmask_uris_in_markdown()
|
||||||
@@ -318,7 +325,9 @@ class FileTranslater:
|
|||||||
def translate_file(self, file_path: Path | str | None = None, to_lang="中文", output_dir="./output",
|
def translate_file(self, file_path: Path | str | None = None, to_lang="中文", output_dir="./output",
|
||||||
formula=True,
|
formula=True,
|
||||||
code=True, output_format: Literal["markdown", "html"] = "markdown", refine=False,
|
code=True, output_format: Literal["markdown", "html"] = "markdown", refine=False,
|
||||||
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
custom_prompt_translate=None, refine_agent: Agent | None = None,
|
||||||
|
translate_agent: Agent | None = None,
|
||||||
|
save=True):
|
||||||
if file_path is None:
|
if file_path is None:
|
||||||
assert self.file_path is not None, "未输入文件路径"
|
assert self.file_path is not None, "未输入文件路径"
|
||||||
file_path = self.file_path
|
file_path = self.file_path
|
||||||
@@ -327,7 +336,7 @@ class FileTranslater:
|
|||||||
self.read_file(file_path, formula=formula, code=code)
|
self.read_file(file_path, formula=formula, code=code)
|
||||||
if refine:
|
if refine:
|
||||||
self.refine_markdown_by_agent(refine_agent)
|
self.refine_markdown_by_agent(refine_agent)
|
||||||
self.translate_markdown_by_agent(translate_agent, to_lang=to_lang)
|
self.translate_markdown_by_agent(translate_agent, to_lang=to_lang, custom_prompt=custom_prompt_translate)
|
||||||
if save:
|
if save:
|
||||||
if output_format == "markdown":
|
if output_format == "markdown":
|
||||||
filename = f"{file_path.stem}_{to_lang}.md"
|
filename = f"{file_path.stem}_{to_lang}.md"
|
||||||
@@ -339,7 +348,8 @@ class FileTranslater:
|
|||||||
|
|
||||||
async def translate_file_async(self, file_path: Path | str | None = None, to_lang="中文", output_dir="./output",
|
async def translate_file_async(self, file_path: Path | str | None = None, to_lang="中文", output_dir="./output",
|
||||||
formula=True,
|
formula=True,
|
||||||
code=True, output_format: Literal["markdown", "html"] = "markdown", refine=False,
|
code=True, output_format: Literal["markdown", "html"] = "markdown",
|
||||||
|
custom_prompt_translate=None, refine=False,
|
||||||
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
||||||
if file_path is None:
|
if file_path is None:
|
||||||
assert self.file_path is not None, "未输入文件路径"
|
assert self.file_path is not None, "未输入文件路径"
|
||||||
@@ -354,7 +364,8 @@ class FileTranslater:
|
|||||||
)
|
)
|
||||||
if refine:
|
if refine:
|
||||||
await self.refine_markdown_by_agent_async(refine_agent)
|
await self.refine_markdown_by_agent_async(refine_agent)
|
||||||
await self.translate_markdown_by_agent_async(translate_agent, to_lang=to_lang)
|
await self.translate_markdown_by_agent_async(translate_agent, to_lang=to_lang,
|
||||||
|
custom_prompt=custom_prompt_translate)
|
||||||
if save:
|
if save:
|
||||||
if output_format == "markdown":
|
if output_format == "markdown":
|
||||||
filename = f"{file_path.stem}_{to_lang}.md"
|
filename = f"{file_path.stem}_{to_lang}.md"
|
||||||
@@ -366,12 +377,14 @@ class FileTranslater:
|
|||||||
|
|
||||||
def translate_bytes(self, name: str, file: bytes, to_lang="中文", output_dir="./output",
|
def translate_bytes(self, name: str, file: bytes, to_lang="中文", output_dir="./output",
|
||||||
formula=True,
|
formula=True,
|
||||||
code=True, output_format: Literal["markdown", "html"] = "markdown", refine=False,
|
code=True, output_format: Literal["markdown", "html"] = "markdown",
|
||||||
|
custom_prompt_translate=None,
|
||||||
|
refine=False,
|
||||||
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
||||||
self.read_bytes(name=name, file=file, formula=formula, code=code)
|
self.read_bytes(name=name, file=file, formula=formula, code=code)
|
||||||
if refine:
|
if refine:
|
||||||
self.refine_markdown_by_agent(refine_agent)
|
self.refine_markdown_by_agent(refine_agent)
|
||||||
self.translate_markdown_by_agent(translate_agent, to_lang=to_lang)
|
self.translate_markdown_by_agent(translate_agent, to_lang=to_lang, custom_prompt=custom_prompt_translate)
|
||||||
if save:
|
if save:
|
||||||
if output_format == "markdown":
|
if output_format == "markdown":
|
||||||
filename = f"{name}_{to_lang}.md"
|
filename = f"{name}_{to_lang}.md"
|
||||||
@@ -383,13 +396,15 @@ class FileTranslater:
|
|||||||
|
|
||||||
async def translate_bytes_async(self, name: str, file: bytes, to_lang="中文", output_dir="./output",
|
async def translate_bytes_async(self, name: str, file: bytes, to_lang="中文", output_dir="./output",
|
||||||
formula=True,
|
formula=True,
|
||||||
code=True, output_format: Literal["markdown", "html"] = "markdown", refine=False,
|
code=True, output_format: Literal["markdown", "html"] = "markdown",
|
||||||
|
custom_prompt_translate=None, refine=False,
|
||||||
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
refine_agent: Agent | None = None, translate_agent: Agent | None = None, save=True):
|
||||||
await self.read_bytes_async(name=name, file=file, formula=formula, code=code)
|
await self.read_bytes_async(name=name, file=file, formula=formula, code=code)
|
||||||
|
|
||||||
if refine:
|
if refine:
|
||||||
await self.refine_markdown_by_agent_async(refine_agent)
|
await self.refine_markdown_by_agent_async(refine_agent)
|
||||||
await self.translate_markdown_by_agent_async(translate_agent, to_lang=to_lang)
|
await self.translate_markdown_by_agent_async(translate_agent, to_lang=to_lang,
|
||||||
|
custom_prompt=custom_prompt_translate)
|
||||||
if save:
|
if save:
|
||||||
if output_format == "markdown":
|
if output_format == "markdown":
|
||||||
filename = f"{name}_{to_lang}.md"
|
filename = f"{name}_{to_lang}.md"
|
||||||
|
|||||||
Reference in New Issue
Block a user