fix:lsome bug

This commit is contained in:
fdc
2025-07-31 10:28:43 +08:00
parent e4d951b174
commit 5560a4f52d
2 changed files with 38 additions and 29 deletions

View File

@@ -46,6 +46,18 @@ export default function DebugDialog({
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
};
const loadMessages = async (pipelineId: string) => {
try {
const response = await httpClient.getWebChatHistoryMessages(
pipelineId,
sessionType,
);
setMessages(response.messages);
} catch (error) {
console.error('Failed to load messages:', error);
}
};
useEffect(() => {
scrollToBottom();
}, [messages]);
@@ -61,7 +73,7 @@ export default function DebugDialog({
if (open) {
loadMessages(selectedPipelineId);
}
}, [sessionType, selectedPipelineId]);
}, [sessionType, selectedPipelineId, open, loadMessages]);
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
@@ -86,18 +98,6 @@ export default function DebugDialog({
}
}, [showAtPopover]);
const loadMessages = async (pipelineId: string) => {
try {
const response = await httpClient.getWebChatHistoryMessages(
pipelineId,
sessionType,
);
setMessages(response.messages);
} catch (error) {
console.error('Failed to load messages:', error);
}
};
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const value = e.target.value;
if (sessionType === 'group') {
@@ -179,12 +179,16 @@ export default function DebugDialog({
// 添加用户消息和初始bot消息到状态
setMessages((prevMessages) => [...prevMessages, userMessage, botMessage]);
setMessages((prevMessages) => [
...prevMessages,
userMessage,
botMessage,
]);
setInputValue('');
setHasAt(false);
try {
let botMessageId = botMessage.id;
const botMessageId = botMessage.id;
let accumulatedContent = '';
await httpClient.sendStreamingWebChatMessage(
@@ -200,14 +204,17 @@ export default function DebugDialog({
setMessages((prevMessages) => {
const updatedMessages = [...prevMessages];
const botMessageIndex = updatedMessages.findIndex(
(msg) => msg.id === botMessageId && msg.role === 'assistant'
(msg) =>
msg.id === botMessageId && msg.role === 'assistant',
);
if (botMessageIndex !== -1) {
const updatedBotMessage = {
...updatedMessages[botMessageIndex],
content: accumulatedContent,
message_chain: [{ type: 'Plain', text: accumulatedContent }],
message_chain: [
{ type: 'Plain', text: accumulatedContent },
]
};
updatedMessages[botMessageIndex] = updatedBotMessage;
}
@@ -226,7 +233,7 @@ export default function DebugDialog({
if (sessionType === 'person') {
toast.error(t('pipelines.debugDialog.sendFailed'));
}
}
},
);
} catch (error) {
console.error('Failed to send streaming message:', error);
@@ -378,7 +385,9 @@ export default function DebugDialog({
<div className="p-4 pb-0 bg-white flex gap-2">
<div className="flex items-center gap-2">
<span className="text-sm text-gray-600">{t('pipelines.debugDialog.streaming')}</span>
<span className="text-sm text-gray-600">
{t('pipelines.debugDialog.streaming')}
</span>
<Switch
checked={isStreaming}
onCheckedChange={setIsStreaming}

View File

@@ -34,7 +34,7 @@ import {
} from '@/app/infra/entities/api';
import { GetBotLogsRequest } from '@/app/infra/http/requestParam/bots/GetBotLogsRequest';
import { GetBotLogsResponse } from '@/app/infra/http/requestParam/bots/GetBotLogsResponse';
import {boolean} from "zod";
type JSONValue = string | number | boolean | JSONObject | JSONArray | null;
interface JSONObject {
@@ -329,13 +329,13 @@ class HttpClient {
sessionType: string,
messageChain: object[],
pipelineId: string,
onMessage: (data: any) => void,
onMessage: (data: ApiRespWebChatMessage) => void,
onComplete: () => void,
onError: (error: any) => void,
onError: (error: Error) => void,
): Promise<void> {
try {
const url = `${this.baseURL}/api/v1/pipelines/${pipelineId}/chat/send`;
// 使用fetch发送流式请求因为axios在浏览器环境中不直接支持流式响应
const response = await fetch(url, {
method: 'POST',
@@ -365,7 +365,7 @@ class HttpClient {
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
onComplete();
break;
@@ -373,23 +373,23 @@ class HttpClient {
// 解码数据
buffer += decoder.decode(value, { stream: true });
// 处理完整的JSON对象
const lines = buffer.split('\n\n');
buffer = lines.pop() || '';
for (const line of lines) {
if (line.startsWith('data: ')) {
try {
const data = JSON.parse(line.slice(6));
if (data.type === 'end') {
// 流传输结束
reader.cancel();
onComplete();
return;
}
if (data.message) {
// 处理消息数据
onMessage(data);
@@ -404,7 +404,7 @@ class HttpClient {
reader.releaseLock();
}
} catch (error) {
onError(error);
onError(error as Error);
}
}