feat: Agent不支持视觉能力时上传图片提示用户
This commit is contained in:
@@ -260,6 +260,7 @@
|
|||||||
let currentConversationId = null;
|
let currentConversationId = null;
|
||||||
let currentAgentId = null;
|
let currentAgentId = null;
|
||||||
let agents = [];
|
let agents = [];
|
||||||
|
let providers = []; // 大模型池数据
|
||||||
let quickPhrases = [];
|
let quickPhrases = [];
|
||||||
let lastSentMessage = null; // 记录最后发送的消息
|
let lastSentMessage = null; // 记录最后发送的消息
|
||||||
let lastSentFiles = null; // 记录发送的文件
|
let lastSentFiles = null; // 记录发送的文件
|
||||||
@@ -272,6 +273,7 @@
|
|||||||
let messageVersions = {}; // 存储每个assistant消息的多个版本 { messageId: [{content, thinking}] }
|
let messageVersions = {}; // 存储每个assistant消息的多个版本 { messageId: [{content, thinking}] }
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
loadProviders(); // 加载大模型池
|
||||||
loadAgents();
|
loadAgents();
|
||||||
loadQuickPhrases();
|
loadQuickPhrases();
|
||||||
connectWebSocket();
|
connectWebSocket();
|
||||||
@@ -279,6 +281,23 @@
|
|||||||
setupTextarea();
|
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
|
// 加载Agent
|
||||||
async function loadAgents() {
|
async function loadAgents() {
|
||||||
try {
|
try {
|
||||||
@@ -868,6 +887,16 @@
|
|||||||
// 如果没有消息且没有文件,不发送
|
// 如果没有消息且没有文件,不发送
|
||||||
if (!msg && pendingFiles.length === 0) return;
|
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;
|
document.getElementById('sendBtn').disabled = true;
|
||||||
input.value = '';
|
input.value = '';
|
||||||
input.style.height = 'auto';
|
input.style.height = 'auto';
|
||||||
@@ -1014,6 +1043,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
previewArea.appendChild(previewItem);
|
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 = `<i class="ri-alert-line"></i> <strong>${agentName}</strong> 不支持图片识别,请选择支持视觉的Agent或移除图片`;
|
||||||
|
// 避免重复添加
|
||||||
|
if (!document.getElementById('vision-warning-tip')) {
|
||||||
|
previewArea.appendChild(warningDiv);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 根据文件类型选择读取方式
|
// 根据文件类型选择读取方式
|
||||||
@@ -1035,6 +1079,13 @@
|
|||||||
pendingFiles = pendingFiles.filter(f => f.id !== fileId);
|
pendingFiles = pendingFiles.filter(f => f.id !== fileId);
|
||||||
const preview = document.getElementById(fileId + '-preview');
|
const preview = document.getElementById(fileId + '-preview');
|
||||||
if (preview) preview.remove();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送消息
|
// 发送消息
|
||||||
|
|||||||
Reference in New Issue
Block a user