feat: add webchat stream but only some

This commit is contained in:
fdc
2025-07-30 17:06:14 +08:00
parent 3291266f5d
commit daaf4b54ef
4 changed files with 97 additions and 16 deletions

View File

@@ -1,3 +1,5 @@
import json
import quart
from ... import group
@@ -9,10 +11,16 @@ class WebChatDebugRouterGroup(group.RouterGroup):
@self.route('/send', methods=['POST'])
async def send_message(pipeline_uuid: str) -> str:
"""发送调试消息到流水线"""
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''"
try:
data = await quart.request.get_json()
session_type = data.get('session_type', 'person')
message_chain_obj = data.get('message', [])
is_stream = data.get('is_stream', False)
if not message_chain_obj:
return self.http_status(400, -1, 'message is required')
@@ -25,13 +33,29 @@ class WebChatDebugRouterGroup(group.RouterGroup):
if not webchat_adapter:
return self.http_status(404, -1, 'WebChat adapter not found')
result = await webchat_adapter.send_webchat_message(pipeline_uuid, session_type, message_chain_obj)
if is_stream:
generator = webchat_adapter.send_webchat_message(pipeline_uuid, session_type, message_chain_obj, is_stream)
return quart.Response(
stream_generator(generator),
mimetype='text/event-stream'
)
else:
# result = await webchat_adapter.send_webchat_message(pipeline_uuid, session_type, message_chain_obj)
result = None
async for message in webchat_adapter.send_webchat_message(pipeline_uuid, session_type, message_chain_obj):
result = message
if result is not None:
return self.success(
data={
'message': result,
}
)
else:
return self.http_status(400, -1, 'message is required')
return self.success(
data={
'message': result,
}
)
except Exception as e:
return self.http_status(500, -1, f'Internal server error: {str(e)}')