Add files via upload

This commit is contained in:
公明
2026-04-09 11:01:26 +08:00
committed by GitHub
parent f658cc6e93
commit ed8c0b15dd
4 changed files with 69 additions and 2 deletions
+7 -1
View File
@@ -1302,7 +1302,13 @@
"maxRetriesHint": "Retries on rate limit or server error",
"retryDelay": "Retry delay (ms)",
"retryDelayPlaceholder": "1000",
"retryDelayHint": "Delay between retries (ms)"
"retryDelayHint": "Delay between retries (ms)",
"testConnection": "Test Connection",
"testFillRequired": "Please fill in API Key and Model first",
"testing": "Testing connection...",
"testSuccess": "Connection successful",
"testFailed": "Connection failed",
"testError": "Test error"
},
"settingsTerminal": {
"title": "Terminal",
+7 -1
View File
@@ -1302,7 +1302,13 @@
"maxRetriesHint": "最大重试次数(默认 3),遇到速率限制或服务器错误时自动重试",
"retryDelay": "重试间隔(毫秒)",
"retryDelayPlaceholder": "1000",
"retryDelayHint": "重试间隔毫秒数(默认 1000),每次重试会递增延迟"
"retryDelayHint": "重试间隔毫秒数(默认 1000),每次重试会递增延迟",
"testConnection": "测试连接",
"testFillRequired": "请先填写 API Key 和模型",
"testing": "测试中...",
"testSuccess": "连接成功",
"testFailed": "连接失败",
"testError": "测试出错"
},
"settingsTerminal": {
"title": "终端",
+51
View File
@@ -959,6 +959,57 @@ async function applySettings() {
}
}
// 测试OpenAI连接
async function testOpenAIConnection() {
const btn = document.getElementById('test-openai-btn');
const resultEl = document.getElementById('test-openai-result');
const baseUrl = document.getElementById('openai-base-url').value.trim();
const apiKey = document.getElementById('openai-api-key').value.trim();
const model = document.getElementById('openai-model').value.trim();
if (!apiKey || !model) {
resultEl.style.color = 'var(--danger-color, #e53e3e)';
resultEl.textContent = typeof window.t === 'function' ? window.t('settingsBasic.testFillRequired') : '请先填写 API Key 和模型';
return;
}
btn.style.pointerEvents = 'none';
btn.style.opacity = '0.5';
resultEl.style.color = 'var(--text-muted, #888)';
resultEl.textContent = typeof window.t === 'function' ? window.t('settingsBasic.testing') : '测试中...';
try {
const response = await apiFetch('/api/config/test-openai', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
base_url: baseUrl,
api_key: apiKey,
model: model
})
});
const result = await response.json();
if (result.success) {
resultEl.style.color = 'var(--success-color, #38a169)';
const latency = result.latency_ms ? ` (${result.latency_ms}ms)` : '';
const modelInfo = result.model ? ` [${result.model}]` : '';
resultEl.textContent = (typeof window.t === 'function' ? window.t('settingsBasic.testSuccess') : '连接成功') + modelInfo + latency;
} else {
resultEl.style.color = 'var(--danger-color, #e53e3e)';
resultEl.textContent = (typeof window.t === 'function' ? window.t('settingsBasic.testFailed') : '连接失败') + ': ' + (result.error || '未知错误');
}
} catch (error) {
resultEl.style.color = 'var(--danger-color, #e53e3e)';
resultEl.textContent = (typeof window.t === 'function' ? window.t('settingsBasic.testError') : '测试出错') + ': ' + error.message;
} finally {
btn.style.pointerEvents = '';
btn.style.opacity = '';
}
}
// 保存工具配置(独立函数,用于MCP管理页面)
async function saveToolsConfig() {
try {
+4
View File
@@ -1371,6 +1371,10 @@
<label for="openai-model"><span data-i18n="settingsBasic.model">模型</span> <span style="color: red;">*</span></label>
<input type="text" id="openai-model" data-i18n="settingsBasic.modelPlaceholder" data-i18n-attr="placeholder" placeholder="gpt-4" required />
</div>
<div style="display: flex; align-items: center; gap: 8px; margin-top: 2px;">
<a href="javascript:void(0)" id="test-openai-btn" onclick="testOpenAIConnection()" style="font-size: 0.8125rem; color: var(--accent-color, #3182ce); text-decoration: none; cursor: pointer; user-select: none;" data-i18n="settingsBasic.testConnection">测试连接</a>
<span id="test-openai-result" style="font-size: 0.8125rem;"></span>
</div>
</div>
</div>