feat: Agent不支持视觉能力时上传图片提示用户
This commit is contained in:
@@ -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 = `<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);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
// 发送消息
|
||||
|
||||
Reference in New Issue
Block a user