- 拆分应用工厂、业务服务与路由,保留原有 HTTP/SSE 和存储入口 - 分离页面资源,重排客服工作台并完善响应式导航、草稿和附件交互 - 整理维护脚本、请求示例和贡献指南,移除启动脚本中的密钥配置 - 上传文件改为仅本地保留,补充隔离的后端与前端回归验证 验证:46 项 Python 测试通过,含 14 个已有子测试;12 个 Node 前端场景通过。
30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
"""HTTP adapters for chat; business logic lives in services."""
|
|
|
|
from flask import Blueprint, Response, request, stream_with_context
|
|
|
|
from .. import business_service, chat_service
|
|
|
|
bp = Blueprint('chat', __name__)
|
|
|
|
@bp.route('/stream_chat', methods=['GET', 'POST'])
|
|
def stream_chat():
|
|
if request.method == 'POST':
|
|
data = request.get_json(silent=True) or {}
|
|
msg = (data.get('msg') or '').strip()
|
|
conv_id = data.get('conv_id')
|
|
try:
|
|
conv_id = int(conv_id) if conv_id else None
|
|
except (TypeError, ValueError):
|
|
conv_id = None
|
|
else:
|
|
msg = (request.args.get('msg') or '').strip()
|
|
conv_id = request.args.get('conv_id', type=int)
|
|
frames, headers = chat_service.create_chat_stream(msg, conv_id)
|
|
body = frames if isinstance(frames, str) else stream_with_context(frames)
|
|
return Response(body, mimetype='text/event-stream', headers=headers)
|
|
|
|
|
|
@bp.route('/api/feedback', methods=['POST'])
|
|
def feedback():
|
|
return business_service.feedback(request.get_json(silent=True) or {})
|