From d3ab16761dad30f5d84f825be8d4808c2e318d93 Mon Sep 17 00:00:00 2001 From: fdc <2213070223@qq.com> Date: Thu, 31 Jul 2025 10:28:43 +0800 Subject: [PATCH] fix:lsome bug --- .../components/debug-dialog/DebugDialog.tsx | 47 +++++++++++-------- web/src/app/infra/http/HttpClient.ts | 20 ++++---- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx b/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx index 9fde4bc2..0a6330dc 100644 --- a/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx +++ b/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx @@ -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) => { 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({
- {t('pipelines.debugDialog.streaming')} + + {t('pipelines.debugDialog.streaming')} + void, + onMessage: (data: ApiRespWebChatMessage) => void, onComplete: () => void, - onError: (error: any) => void, + onError: (error: Error) => void, ): Promise { try { const url = `${this.baseURL}/api/v1/pipelines/${pipelineId}/chat/send`; - + // 使用fetch发送流式请求,因为axios在浏览器环境中不直接支持流式响应 const response = await fetch(url, { method: 'POST', @@ -415,7 +415,7 @@ class HttpClient { try { while (true) { const { done, value } = await reader.read(); - + if (done) { onComplete(); break; @@ -423,23 +423,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); @@ -454,7 +454,7 @@ class HttpClient { reader.releaseLock(); } } catch (error) { - onError(error); + onError(error as Error); } }