feat: Agent工具支持检查,不支持的工具提醒用户
This commit is contained in:
@@ -201,8 +201,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="file-preview-area" id="filePreviewArea"></div>
|
<div class="file-preview-area" id="filePreviewArea"></div>
|
||||||
<div class="quick-phrases-bar">
|
<div class="quick-phrases-bar">
|
||||||
<div class="tool-toggle">
|
<div class="tool-toggle" id="toolToggleArea">
|
||||||
<input type="checkbox" id="enableSearch" checked>
|
<input type="checkbox" id="enableSearch" checked onchange="showToolWarning()">
|
||||||
<label for="enableSearch"><i class="ri-search-line"></i> 搜索</label>
|
<label for="enableSearch"><i class="ri-search-line"></i> 搜索</label>
|
||||||
</div>
|
</div>
|
||||||
<button class="add-phrase-btn" onclick="showAddPhraseModal()"><i class="ri-add-line"></i> 添加</button>
|
<button class="add-phrase-btn" onclick="showAddPhraseModal()"><i class="ri-add-line"></i> 添加</button>
|
||||||
@@ -291,6 +291,8 @@
|
|||||||
const res = await fetch('/api/v2/providers');
|
const res = await fetch('/api/v2/providers');
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
providers = data.providers || [];
|
providers = data.providers || [];
|
||||||
|
// 加载后检查工具支持(如果agents已加载)
|
||||||
|
if (agents.length > 0) showToolWarning();
|
||||||
} catch (e) { console.error('加载Provider失败:', e); }
|
} catch (e) { console.error('加载Provider失败:', e); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,6 +304,52 @@
|
|||||||
return provider?.supports_vision || false;
|
return provider?.supports_vision || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查当前Agent是否支持某个工具
|
||||||
|
function checkAgentToolSupport(toolType) {
|
||||||
|
const agent = agents.find(a => a.id === currentAgentId);
|
||||||
|
if (!agent) return false;
|
||||||
|
const agentTools = agent.tools || [];
|
||||||
|
return agentTools.includes(toolType);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前Agent不支持的工具列表(用户已启用但Agent不支持)
|
||||||
|
function getUnsupportedTools() {
|
||||||
|
const unsupported = [];
|
||||||
|
const enableSearch = document.getElementById('enableSearch').checked;
|
||||||
|
if (enableSearch && !checkAgentToolSupport('search')) {
|
||||||
|
unsupported.push('搜索');
|
||||||
|
}
|
||||||
|
return unsupported;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示工具不支持提示
|
||||||
|
function showToolWarning() {
|
||||||
|
const unsupported = getUnsupportedTools();
|
||||||
|
const warningDiv = document.getElementById('tool-warning-tip');
|
||||||
|
|
||||||
|
if (unsupported.length > 0) {
|
||||||
|
const agent = agents.find(a => a.id === currentAgentId);
|
||||||
|
const agentName = agent?.display_name || agent?.name || '当前Agent';
|
||||||
|
const msg = `<i class="ri-alert-line"></i> <strong>${agentName}</strong> 不支持 <strong>${unsupported.join('、')}</strong> 工具,请关闭或切换Agent`;
|
||||||
|
|
||||||
|
if (warningDiv) {
|
||||||
|
warningDiv.innerHTML = msg;
|
||||||
|
warningDiv.style.display = 'block';
|
||||||
|
} else {
|
||||||
|
const newWarning = document.createElement('div');
|
||||||
|
newWarning.id = 'tool-warning-tip';
|
||||||
|
newWarning.style.cssText = 'margin-top:8px;padding:8px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:6px;font-size:13px;color:#856404;';
|
||||||
|
newWarning.innerHTML = msg;
|
||||||
|
document.getElementById('toolToggleArea').appendChild(newWarning);
|
||||||
|
}
|
||||||
|
// 禁用发送按钮
|
||||||
|
document.getElementById('sendBtn').disabled = true;
|
||||||
|
} else {
|
||||||
|
if (warningDiv) warningDiv.style.display = 'none';
|
||||||
|
document.getElementById('sendBtn').disabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 加载Agent
|
// 加载Agent
|
||||||
async function loadAgents() {
|
async function loadAgents() {
|
||||||
try {
|
try {
|
||||||
@@ -311,6 +359,8 @@
|
|||||||
const defaultAgent = agents.find(a => a.is_default) || agents[0];
|
const defaultAgent = agents.find(a => a.is_default) || agents[0];
|
||||||
if (defaultAgent) currentAgentId = defaultAgent.id;
|
if (defaultAgent) currentAgentId = defaultAgent.id;
|
||||||
renderAgentSelect();
|
renderAgentSelect();
|
||||||
|
// 加载后检查工具支持
|
||||||
|
showToolWarning();
|
||||||
} catch (e) { console.error('加载Agent失败:', e); }
|
} catch (e) { console.error('加载Agent失败:', e); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,6 +383,8 @@
|
|||||||
if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ action: 'switch_agent', agent_id: currentAgentId }));
|
if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ action: 'switch_agent', agent_id: currentAgentId }));
|
||||||
await createNewConversation();
|
await createNewConversation();
|
||||||
showAgentSwitchNotice();
|
showAgentSwitchNotice();
|
||||||
|
// 切换Agent后检查工具支持
|
||||||
|
showToolWarning();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1034,6 +1086,16 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查工具支持
|
||||||
|
const unsupported = getUnsupportedTools();
|
||||||
|
if (unsupported.length > 0) {
|
||||||
|
const agent = agents.find(a => a.id === currentAgentId);
|
||||||
|
const agentName = agent?.display_name || agent?.name || '当前Agent';
|
||||||
|
alert(`⚠️ ${agentName} 不支持 ${unsupported.join('、')} 工具\n\n请关闭不支持的工具,或切换到支持该工具的Agent。`);
|
||||||
|
document.getElementById('sendBtn').disabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
document.getElementById('sendBtn').disabled = true;
|
document.getElementById('sendBtn').disabled = true;
|
||||||
input.value = '';
|
input.value = '';
|
||||||
input.style.height = 'auto';
|
input.style.height = 'auto';
|
||||||
|
|||||||
Reference in New Issue
Block a user