From c6deed4e6e79c7827e805345b01747cdf57ab846 Mon Sep 17 00:00:00 2001 From: Dong_master <2213070223@qq.com> Date: Fri, 1 Aug 2025 11:33:16 +0800 Subject: [PATCH] feat: webchat stream is ok --- pkg/api/http/controller/groups/pipelines/webchat.py | 4 ++-- pkg/platform/sources/webchat.py | 5 +++-- .../components/debug-dialog/DebugDialog.tsx | 12 +++++++----- web/src/app/infra/http/HttpClient.ts | 6 ++---- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/pkg/api/http/controller/groups/pipelines/webchat.py b/pkg/api/http/controller/groups/pipelines/webchat.py index 9982b233..6dc7f85a 100644 --- a/pkg/api/http/controller/groups/pipelines/webchat.py +++ b/pkg/api/http/controller/groups/pipelines/webchat.py @@ -14,8 +14,8 @@ class WebChatDebugRouterGroup(group.RouterGroup): async def stream_generator(generator): async for message in generator: - yield rf"data:{json.dumps({'message': message})}\n\n" - yield "data:{type: end}\n\n''" + yield f"data: {json.dumps({'message': message})}\n\n" + yield "data: {\"type\": \"end\"}\n\n" try: data = await quart.request.get_json() session_type = data.get('session_type', 'person') diff --git a/pkg/platform/sources/webchat.py b/pkg/platform/sources/webchat.py index 274c5657..f7f3d964 100644 --- a/pkg/platform/sources/webchat.py +++ b/pkg/platform/sources/webchat.py @@ -242,11 +242,12 @@ class WebChatAdapter(msadapter.MessagePlatformAdapter): if is_stream: queue = use_session.resp_queues[message_id] + msg_id = len(use_session.get_message_list(pipeline_uuid)) + 1 while True: resp_message = await queue.get() - print(resp_message) + resp_message.id = msg_id if resp_message.is_final: - resp_message.id = len(use_session.get_message_list(pipeline_uuid)) + 1 + resp_message.id = msg_id use_session.get_message_list(pipeline_uuid).append(resp_message) yield resp_message.model_dump() break 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 2c051b00..7b0607e4 100644 --- a/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx +++ b/web/src/app/home/pipelines/components/debug-dialog/DebugDialog.tsx @@ -201,15 +201,17 @@ export default function DebugDialog({ (data) => { // 处理流式响应数据 if (data.message) { - accumulatedContent += data.message; + accumulatedContent += data.message.content; // 更新bot消息 setMessages((prevMessages) => { const updatedMessages = [...prevMessages]; - const botMessageIndex = updatedMessages.findIndex( - (msg) => - msg.id === botMessageId && msg.role === 'assistant', - ); + // const botMessageIndex = updatedMessages.findIndex( + // (msg) => + // msg.id === botMessageId && msg.role === 'assistant', + // ); + // 使用索引来更新消息,而不是id匹配 + const botMessageIndex = updatedMessages.length - 1; if (botMessageIndex !== -1) { const updatedBotMessage = { diff --git a/web/src/app/infra/http/HttpClient.ts b/web/src/app/infra/http/HttpClient.ts index 0cd55930..aeabc063 100644 --- a/web/src/app/infra/http/HttpClient.ts +++ b/web/src/app/infra/http/HttpClient.ts @@ -359,14 +359,12 @@ class HttpClient { messageChain: object[], pipelineId: string, timeout: number = 15000, - is_stream: boolean = false, ): Promise { return this.post( `/api/v1/pipelines/${pipelineId}/chat/send`, { session_type: sessionType, message: messageChain, - is_stream: is_stream, }, { timeout, @@ -432,10 +430,10 @@ class HttpClient { // 处理完整的JSON对象 const lines = buffer.split('\n\n'); - buffer = lines.pop() || ''; + buffer = ''; for (const line of lines) { - if (line.startsWith('data: ')) { + if (line.startsWith('data:')) { try { const data = JSON.parse(line.slice(6));