diff --git a/templates/index.html b/templates/index.html
index e366ada..cc00f0c 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -260,6 +260,7 @@
let currentConversationId = null;
let currentAgentId = null;
let agents = [];
+ let providers = []; // 大模型池数据
let quickPhrases = [];
let lastSentMessage = null; // 记录最后发送的消息
let lastSentFiles = null; // 记录发送的文件
@@ -272,6 +273,7 @@
let messageVersions = {}; // 存储每个assistant消息的多个版本 { messageId: [{content, thinking}] }
document.addEventListener('DOMContentLoaded', () => {
+ loadProviders(); // 加载大模型池
loadAgents();
loadQuickPhrases();
connectWebSocket();
@@ -279,6 +281,23 @@
setupTextarea();
});
+ // 加载大模型池
+ async function loadProviders() {
+ try {
+ const res = await fetch('/api/v2/providers');
+ const data = await res.json();
+ providers = data.providers || [];
+ } catch (e) { console.error('加载Provider失败:', e); }
+ }
+
+ // 检查当前Agent是否支持视觉
+ function checkAgentVisionSupport() {
+ const agent = agents.find(a => a.id === currentAgentId);
+ if (!agent) return false;
+ const provider = providers.find(p => p.id === agent.llm_provider_id);
+ return provider?.supports_vision || false;
+ }
+
// 加载Agent
async function loadAgents() {
try {
@@ -868,6 +887,16 @@
// 如果没有消息且没有文件,不发送
if (!msg && pendingFiles.length === 0) return;
+ // 检查是否有图片上传
+ const hasImages = pendingFiles.some(f => f.type && f.type.startsWith('image/'));
+ if (hasImages && !checkAgentVisionSupport()) {
+ const agent = agents.find(a => a.id === currentAgentId);
+ const agentName = agent?.display_name || agent?.name || '当前Agent';
+ alert(`⚠️ ${agentName} 不支持图片识别功能\n\n请选择支持视觉能力的Agent(如 vlm-agent),或者移除图片后再发送。`);
+ document.getElementById('sendBtn').disabled = false;
+ return;
+ }
+
document.getElementById('sendBtn').disabled = true;
input.value = '';
input.style.height = 'auto';
@@ -1014,6 +1043,21 @@
}
previewArea.appendChild(previewItem);
+
+ // 如果上传的是图片且当前Agent不支持视觉,显示警告提示
+ if (file.type.startsWith('image/') && !checkAgentVisionSupport()) {
+ const agent = agents.find(a => a.id === currentAgentId);
+ const agentName = agent?.display_name || agent?.name || '当前Agent';
+ const warningDiv = document.createElement('div');
+ warningDiv.className = 'vision-warning';
+ warningDiv.id = 'vision-warning-tip';
+ warningDiv.style.cssText = 'margin-top:8px;padding:8px 12px;background:#fff3cd;border:1px solid #ffc107;border-radius:6px;font-size:13px;color:#856404;';
+ warningDiv.innerHTML = ` ${agentName} 不支持图片识别,请选择支持视觉的Agent或移除图片`;
+ // 避免重复添加
+ if (!document.getElementById('vision-warning-tip')) {
+ previewArea.appendChild(warningDiv);
+ }
+ }
};
// 根据文件类型选择读取方式
@@ -1035,6 +1079,13 @@
pendingFiles = pendingFiles.filter(f => f.id !== fileId);
const preview = document.getElementById(fileId + '-preview');
if (preview) preview.remove();
+
+ // 如果没有图片了,移除视觉警告提示
+ const hasImages = pendingFiles.some(f => f.type && f.type.startsWith('image/'));
+ if (!hasImages) {
+ const warning = document.getElementById('vision-warning-tip');
+ if (warning) warning.remove();
+ }
}
// 发送消息