fix: 修复流式聊天的问题
This commit is contained in:
parent
fb66af9154
commit
8d259e2d50
|
|
@ -3,7 +3,7 @@ import json
|
||||||
import os
|
import os
|
||||||
import requests
|
import requests
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from flask import request, jsonify, Response, Blueprint
|
from flask import request, jsonify, Response, Blueprint, current_app
|
||||||
from . import db
|
from . import db
|
||||||
from .models import Conversation, Message, User
|
from .models import Conversation, Message, User
|
||||||
from . import load_config
|
from . import load_config
|
||||||
|
|
@ -217,6 +217,9 @@ def _sync_response(conv):
|
||||||
|
|
||||||
|
|
||||||
def _stream_response(conv):
|
def _stream_response(conv):
|
||||||
|
conv_id = conv.id
|
||||||
|
app = current_app._get_current_object()
|
||||||
|
|
||||||
def generate():
|
def generate():
|
||||||
full_content = ""
|
full_content = ""
|
||||||
full_thinking = ""
|
full_thinking = ""
|
||||||
|
|
@ -224,8 +227,11 @@ def _stream_response(conv):
|
||||||
msg_id = str(uuid.uuid4())
|
msg_id = str(uuid.uuid4())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resp = _call_glm(conv, stream=True)
|
with app.app_context():
|
||||||
resp.raise_for_status()
|
active_conv = db.session.get(Conversation, conv_id)
|
||||||
|
resp = _call_glm(active_conv, stream=True)
|
||||||
|
resp.raise_for_status()
|
||||||
|
|
||||||
for line in resp.iter_lines():
|
for line in resp.iter_lines():
|
||||||
if not line:
|
if not line:
|
||||||
continue
|
continue
|
||||||
|
|
@ -255,12 +261,15 @@ def _stream_response(conv):
|
||||||
yield f"event: error\ndata: {json.dumps({'content': str(e)}, ensure_ascii=False)}\n\n"
|
yield f"event: error\ndata: {json.dumps({'content': str(e)}, ensure_ascii=False)}\n\n"
|
||||||
return
|
return
|
||||||
|
|
||||||
msg = Message(
|
# 流式结束后最后写入数据库
|
||||||
id=msg_id, conversation_id=conv.id, role="assistant",
|
with app.app_context():
|
||||||
content=full_content, token_count=token_count, thinking_content=full_thinking,
|
msg = Message(
|
||||||
)
|
id=msg_id, conversation_id=conv_id, role="assistant",
|
||||||
db.session.add(msg)
|
content=full_content, token_count=token_count, thinking_content=full_thinking,
|
||||||
db.session.commit()
|
)
|
||||||
|
db.session.add(msg)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
yield f"event: done\ndata: {json.dumps({'message_id': msg_id, 'token_count': token_count})}\n\n"
|
yield f"event: done\ndata: {json.dumps({'message_id': msg_id, 'token_count': token_count})}\n\n"
|
||||||
|
|
||||||
return Response(generate(), mimetype="text/event-stream",
|
return Response(generate(), mimetype="text/event-stream",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue