update debug style

This commit is contained in:
Wenjie Zhang 2025-03-25 19:23:37 +08:00
parent 6b0ccf8d17
commit 4d6678d4ee

View File

@ -7,10 +7,10 @@
</div> </div>
<div class="conversation-list"> <div class="conversation-list">
<div class="conversation" <div class="conversation"
v-for="agent in agents" v-for="(agent, name) in agents"
:key="agent.name" :key="name"
:class="{ active: currentAgent === agent.name }" :class="{ active: currentAgent?.name === name }"
@click="selectAgent(agent.name)"> @click="selectAgent(name)">
<div class="conversation__title"><RobotOutlined /> &nbsp;{{ agent.name }}</div> <div class="conversation__title"><RobotOutlined /> &nbsp;{{ agent.name }}</div>
<div class="conversation__description">{{ agent.description }}</div> <div class="conversation__description">{{ agent.description }}</div>
</div> </div>
@ -29,12 +29,12 @@
<a-dropdown> <a-dropdown>
<div class="current-agent nav-btn"> <div class="current-agent nav-btn">
<RobotOutlined />&nbsp; <RobotOutlined />&nbsp;
<span v-if="currentAgent">{{ currentAgent }}</span> <span v-if="currentAgent">{{ currentAgent.name }}</span>
<span v-else>请选择智能体</span> <span v-else>请选择智能体</span>
</div> </div>
<template #overlay> <template #overlay>
<a-menu @click="({key}) => selectAgent(key)"> <a-menu @click="({key}) => selectAgent(key)">
<a-menu-item v-for="agent in agents" :key="agent.name"> <a-menu-item v-for="(agent, name) in agents" :key="name">
<RobotOutlined /> {{ agent.name }} <RobotOutlined /> {{ agent.name }}
</a-menu-item> </a-menu-item>
</a-menu> </a-menu>
@ -49,11 +49,11 @@
</div> </div>
<div v-if="messages.length === 0" class="chat-examples"> <div v-if="messages.length === 0" class="chat-examples">
<h1>选择一个智能体开始对话</h1> <h1>{{ currentAgent ? currentAgent.name : '请选择一个智能体开始对话' }}</h1>
<p>不同的智能体有不同的专长和能力</p> <p>{{ currentAgent ? currentAgent.description : '不同的智能体有不同的专长和能力' }}</p>
</div> </div>
<div class="chat-box" ref="messagesContainer"> <div class="chat-box" ref="messagesContainer" :class="{ 'is-debug': options.debug_mode }">
<div <div
v-for="(message, index) in messages" v-for="(message, index) in messages"
:key="index" :key="index"
@ -61,7 +61,7 @@
:class="message.role"> :class="message.role">
<p v-if="message.role === 'user'" class="message-text">{{ message.content.trim() }}</p> <p v-if="message.role === 'user'" class="message-text">{{ message.content.trim() }}</p>
<div v-else-if="message.role === 'assistant'" class="assistant-message" @click="handleAssistantClick(message)"> <div v-else-if="message.role === 'assistant'" class="assistant-message" @click="handleAssistantClick(message)">
<div v-if="options.debug_mode">{{ message }}</div> <div v-if="options.debug_mode" class="status-info">{{ message }}</div>
<div v-if="message.content" v-html="renderMarkdown(message.content)" class="message-md"></div> <div v-if="message.content" v-html="renderMarkdown(message.content)" class="message-md"></div>
<div v-if="message.toolCalls && Object.keys(message.toolCalls).length > 0" class="tool-calls-container"> <div v-if="message.toolCalls && Object.keys(message.toolCalls).length > 0" class="tool-calls-container">
<div v-for="(toolCall, index) in message.toolCalls || {}" <div v-for="(toolCall, index) in message.toolCalls || {}"
@ -222,7 +222,7 @@ const messagesContainer = ref(null);
const optionsPanel = ref(null); const optionsPanel = ref(null);
// //
const agents = ref([]); // const agents = ref({}); //
const currentAgent = ref(null); // const currentAgent = ref(null); //
const userInput = ref(''); // const userInput = ref(''); //
const messages = ref([]); // const messages = ref([]); //
@ -351,7 +351,7 @@ const prepareMessageHistory = (msgs) => {
// //
const selectAgent = (agentName) => { const selectAgent = (agentName) => {
currentAgent.value = agentName; currentAgent.value = agents.value[agentName];
messages.value = []; messages.value = [];
threadId.value = null; threadId.value = null;
resetStatusSteps(); resetStatusSteps();
@ -449,7 +449,7 @@ const sendMessageWithText = async (text) => {
}; };
// //
const response = await fetch(`/api/chat/agent/${currentAgent.value}`, { const response = await fetch(`/api/chat/agent/${currentAgent.value.name}`, {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(requestData) body: JSON.stringify(requestData)
@ -552,7 +552,7 @@ const handleMessageById = async (data) => {
// //
const existingMsgIndex = messageMap.value.get(msgId); const existingMsgIndex = messageMap.value.get(msgId);
console.log("existingMsgIndex", existingMsgIndex); // console.log("existingMsgIndex", existingMsgIndex);
if (existingMsgIndex === undefined) { if (existingMsgIndex === undefined) {
// //
@ -579,7 +579,7 @@ const handleMessageById = async (data) => {
// //
const createAssistantMessage = async (data) => { const createAssistantMessage = async (data) => {
console.log("createAssistantMessage", data); // console.log("createAssistantMessage", data);
const msgId = data.msg.id; const msgId = data.msg.id;
const msgContent = data.response || ''; const msgContent = data.response || '';
const runId = data.metadata?.run_id; const runId = data.metadata?.run_id;
@ -600,7 +600,7 @@ const createAssistantMessage = async (data) => {
// //
const toolCalls = data.msg.additional_kwargs?.tool_calls; const toolCalls = data.msg.additional_kwargs?.tool_calls;
if (toolCalls && toolCalls.length > 0) { if (toolCalls && toolCalls.length > 0) {
console.log("toolCalls in createAssistantMessage", toolCalls); // console.log("toolCalls in createAssistantMessage", toolCalls);
for (const toolCall of toolCalls) { for (const toolCall of toolCalls) {
const toolCallId = toolCall.id; const toolCallId = toolCall.id;
const toolIndex = toolCall.index || 0; const toolIndex = toolCall.index || 0;
@ -621,7 +621,7 @@ const createAssistantMessage = async (data) => {
// //
const updateExistingMessage = async (data, existingMsgIndex) => { const updateExistingMessage = async (data, existingMsgIndex) => {
const msgInstance = messages.value[existingMsgIndex]; const msgInstance = messages.value[existingMsgIndex];
console.log("updateExistingMessage", msgInstance); // console.log("updateExistingMessage", msgInstance);
// loadingprocessing // loadingprocessing
if (msgInstance.status === 'loading') { if (msgInstance.status === 'loading') {
@ -638,7 +638,7 @@ const updateExistingMessage = async (data, existingMsgIndex) => {
const toolCalls = data.msg.additional_kwargs?.tool_calls; const toolCalls = data.msg.additional_kwargs?.tool_calls;
if (toolCalls && toolCalls.length > 0) { if (toolCalls && toolCalls.length > 0) {
console.log("toolCalls in updateExistingMessage", toolCalls); // console.log("toolCalls in updateExistingMessage", toolCalls);
for (const toolCall of toolCalls) { for (const toolCall of toolCalls) {
const toolIndex = toolCall.index || 0; const toolIndex = toolCall.index || 0;
@ -669,7 +669,7 @@ const handleAssistantClick = (message) => {
} }
const appendToolMessageToExistingAssistant = async (data) => { const appendToolMessageToExistingAssistant = async (data) => {
console.log("appendToolMessageToExistingAssistant", data); // console.log("appendToolMessageToExistingAssistant", data);
currentToolCallId.value = data.msg.tool_call_id; currentToolCallId.value = data.msg.tool_call_id;
const assignedMsgId = toolCallMap.value.get(currentToolCallId.value); const assignedMsgId = toolCallMap.value.get(currentToolCallId.value);
if (assignedMsgId === undefined) { if (assignedMsgId === undefined) {
@ -709,7 +709,11 @@ const fetchAgents = async () => {
const response = await fetch('/api/chat/agent'); const response = await fetch('/api/chat/agent');
if (response.ok) { if (response.ok) {
const data = await response.json(); const data = await response.json();
agents.value = data.agents; //
agents.value = data.agents.reduce((acc, agent) => {
acc[agent.name] = agent;
return acc;
}, {});
} else { } else {
console.error('获取智能体失败'); console.error('获取智能体失败');
} }
@ -722,8 +726,8 @@ const fetchAgents = async () => {
const loadState = () => { const loadState = () => {
// //
const savedAgent = localStorage.getItem('agent-current-agent'); const savedAgent = localStorage.getItem('agent-current-agent');
if (savedAgent) { if (savedAgent && agents.value[savedAgent]) {
currentAgent.value = savedAgent; currentAgent.value = agents.value[savedAgent];
} }
// //
@ -749,7 +753,7 @@ const loadState = () => {
const saveState = () => { const saveState = () => {
// //
if (currentAgent.value) { if (currentAgent.value) {
localStorage.setItem('agent-current-agent', currentAgent.value); localStorage.setItem('agent-current-agent', currentAgent.value.name);
} }
// //
@ -1142,11 +1146,6 @@ const toggleToolCall = (toolCallId) => {
font-size: 15px; font-size: 15px;
box-sizing: border-box; box-sizing: border-box;
color: black; color: black;
.status-info {
margin-top: 10px;
border-top: 1px dashed var(--gray-300);
padding-top: 10px;
}
.reasoning-box { .reasoning-box {
margin-top: 10px; margin-top: 10px;
@ -1335,6 +1334,23 @@ const toggleToolCall = (toolCallId) => {
} }
} }
.chat-box.is-debug {
.message-box .assistant-message {
outline: 1px solid red;
outline-offset: 10px;
outline-style: dashed;
.status-info {
display: block;
background-color: var(--gray-50);
color: var(--gray-700);
padding: 10px;
border-radius: 8px;
margin-bottom: 10px;
}
}
}
.bottom { .bottom {
position: sticky; position: sticky;
bottom: 0; bottom: 0;