增加api、token获取链接
This commit is contained in:
7
.idea/workspace.xml
generated
7
.idea/workspace.xml
generated
@@ -6,9 +6,8 @@
|
|||||||
<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/agents/agent.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/agents/agent.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/static/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/static/index.html" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/docutranslate/utils/markdown_splitter.py" beforeDir="false" afterPath="$PROJECT_DIR$/docutranslate/utils/markdown_splitter.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" 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" />
|
||||||
@@ -603,7 +602,7 @@
|
|||||||
<workItem from="1747739438735" duration="826000" />
|
<workItem from="1747739438735" duration="826000" />
|
||||||
<workItem from="1747740341909" duration="145000" />
|
<workItem from="1747740341909" duration="145000" />
|
||||||
<workItem from="1747752718385" duration="81000" />
|
<workItem from="1747752718385" duration="81000" />
|
||||||
<workItem from="1747754618316" duration="12015000" />
|
<workItem from="1747754618316" duration="14549000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
@@ -622,7 +621,7 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</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="1747796284047" 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="1747798850500" 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" />
|
||||||
|
|||||||
@@ -35,6 +35,11 @@
|
|||||||
color: #2e7d32; /* Pico valid color */
|
color: #2e7d32; /* Pico valid color */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.no-style {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
.form-group {
|
.form-group {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
@@ -176,7 +181,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<main class="container">
|
<main class="container">
|
||||||
<h1>
|
<h1>
|
||||||
<a href="https://github.com/xunbu/docutranslate" target="_blank">DocuTranslate</a>
|
<a href="https://github.com/xunbu/docutranslate" target="_blank">DocuTranslate🔗</a>
|
||||||
</h1>
|
</h1>
|
||||||
<form id="translateForm">
|
<form id="translateForm">
|
||||||
|
|
||||||
@@ -229,7 +234,9 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group hidden" id="mineruTokenGroup">
|
<div class="form-group hidden" id="mineruTokenGroup">
|
||||||
<label for="mineru_token">Mineru Token</label>
|
<label for="mineru_token">Mineru Token<a class="no-style" href="https://mineru.net/apiManage/token"
|
||||||
|
target="_blank"
|
||||||
|
title="获取令牌">🔗</a></label>
|
||||||
<input type="password" id="mineru_token" name="mineru_token" placeholder="使用 Mineru 引擎时必须填写">
|
<input type="password" id="mineru_token" name="mineru_token" placeholder="使用 Mineru 引擎时必须填写">
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
@@ -239,7 +246,9 @@
|
|||||||
<summary>翻译API配置</summary>
|
<summary>翻译API配置</summary>
|
||||||
<div class="form-grid">
|
<div class="form-grid">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="platform_select">AI 平台</label>
|
<label for="platform_select">AI 平台 <a id="api_href" class="no-style" href="/"
|
||||||
|
target="_blank"
|
||||||
|
title="获取API-KEY">🔗</a></label>
|
||||||
<select id="platform_select" name="platform_select_ui">
|
<select id="platform_select" name="platform_select_ui">
|
||||||
<option value="custom">自定义接口</option>
|
<option value="custom">自定义接口</option>
|
||||||
<option value="https://api.openai.com/v1">OpenAI</option>
|
<option value="https://api.openai.com/v1">OpenAI</option>
|
||||||
@@ -296,6 +305,7 @@
|
|||||||
<iframe id="printFrame" style="display:none;"></iframe>
|
<iframe id="printFrame" style="display:none;"></iframe>
|
||||||
<script>
|
<script>
|
||||||
const platformSelect = document.getElementById('platform_select');
|
const platformSelect = document.getElementById('platform_select');
|
||||||
|
const apiHref = document.getElementById('api_href')
|
||||||
const baseUrlGroup = document.getElementById('baseUrlGroup');
|
const baseUrlGroup = document.getElementById('baseUrlGroup');
|
||||||
const baseUrlInput = document.getElementById('base_url');
|
const baseUrlInput = document.getElementById('base_url');
|
||||||
const apikeyInput = document.getElementById('apikey');
|
const apikeyInput = document.getElementById('apikey');
|
||||||
@@ -306,7 +316,6 @@
|
|||||||
const refineCheckbox = document.getElementById('refine_markdown');
|
const refineCheckbox = document.getElementById('refine_markdown');
|
||||||
|
|
||||||
const convertEnginSelect = document.getElementById('convert_engin');
|
const convertEnginSelect = document.getElementById('convert_engin');
|
||||||
const doclingOption = document.getElementById('docling')
|
|
||||||
const mineruTokenGroup = document.getElementById('mineruTokenGroup');
|
const mineruTokenGroup = document.getElementById('mineruTokenGroup');
|
||||||
const mineruTokenInput = document.getElementById('mineru_token');
|
const mineruTokenInput = document.getElementById('mineru_token');
|
||||||
|
|
||||||
@@ -351,6 +360,17 @@
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//api访问地址到获取地址的映射
|
||||||
|
const apiHrefMap = {
|
||||||
|
"https://openrouter.ai/api/v1": "https://openrouter.ai/settings/keys",
|
||||||
|
"https://api.openai.com/v1": "https://platform.openai.com/api-keys",
|
||||||
|
"https://api.deepseek.com/v1": "https://platform.deepseek.com/api_keys",
|
||||||
|
"https://open.bigmodel.cn/api/paas/v4": "https://open.bigmodel.cn/usercenter/apikeys",
|
||||||
|
"https://dashscope.aliyuncs.com/compatible-mode/v1": "https://bailian.console.aliyun.com/?tab=model#/api-key",
|
||||||
|
"https://ark.cn-beijing.volces.com/api/v3": "https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D",
|
||||||
|
"https://api.siliconflow.cn/v1": "https://cloud.siliconflow.cn/account/ak",
|
||||||
|
"https://www.dmxapi.cn/v1": "https://www.dmxapi.cn/token"
|
||||||
|
}
|
||||||
|
|
||||||
function updatePlatformUI() {
|
function updatePlatformUI() {
|
||||||
const selectedPlatformValue = platformSelect.value;
|
const selectedPlatformValue = platformSelect.value;
|
||||||
@@ -360,11 +380,15 @@
|
|||||||
baseUrlGroup.classList.remove('hidden');
|
baseUrlGroup.classList.remove('hidden');
|
||||||
baseUrlInput.required = true;
|
baseUrlInput.required = true;
|
||||||
baseUrlInput.value = getFromStorage('translator_platform_custom_base_url');
|
baseUrlInput.value = getFromStorage('translator_platform_custom_base_url');
|
||||||
|
apiHref.classList.add('hidden')
|
||||||
} else {
|
} else {
|
||||||
baseUrlGroup.classList.add('hidden');
|
baseUrlGroup.classList.add('hidden');
|
||||||
baseUrlInput.required = false;
|
baseUrlInput.required = false;
|
||||||
baseUrlInput.value = selectedPlatformValue;
|
baseUrlInput.value = selectedPlatformValue;
|
||||||
|
apiHref.classList.remove('hidden')
|
||||||
|
apiHref.href = apiHrefMap[baseUrlInput.value]
|
||||||
}
|
}
|
||||||
|
|
||||||
saveToStorage('translator_last_platform', selectedPlatformValue);
|
saveToStorage('translator_last_platform', selectedPlatformValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -491,16 +515,16 @@
|
|||||||
}
|
}
|
||||||
const status = await response.json();
|
const status = await response.json();
|
||||||
statusMsg.textContent = '正在初始化';
|
statusMsg.textContent = '正在初始化';
|
||||||
if (!status.includes("docling")) {
|
status.forEach((engin) => {
|
||||||
// docling不存在时禁用docling
|
let option = convertEnginSelect.querySelector(`option[value="${engin}"]`);
|
||||||
doclingOption.disabled = true;
|
option.disabled = true;
|
||||||
doclingOption.textContent = "docling(未检测到)"
|
option.textContent += "(不可用)"
|
||||||
if (convertEnginSelect.value === "docling") {
|
})
|
||||||
|
if (status.includes(convertEnginSelect.value)) {
|
||||||
convertEnginSelect.value = "mineru";
|
convertEnginSelect.value = "mineru";
|
||||||
updateConvertEnginUI()
|
updateConvertEnginUI()
|
||||||
statusMsg.textContent = '初始化完成';
|
statusMsg.textContent = '初始化完成';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("Error get engin-list", error);
|
console.warn("Error get engin-list", error);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "docutranslate"
|
name = "docutranslate"
|
||||||
version = "0.2.21"
|
version = "0.2.22"
|
||||||
description = "文件翻译工具"
|
description = "文件翻译工具"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
|
|||||||
Reference in New Issue
Block a user