diff --git a/Html/app.py b/Html/app.py index b892d8a..5a71e83 100644 --- a/Html/app.py +++ b/Html/app.py @@ -1,6 +1,6 @@ from flask import Flask, session, request, jsonify, render_template, send_from_directory from flask_cors import CORS -from flask_socketio import SocketIO, join_room, emit +from flask_socketio import SocketIO, join_room, emit, Namespace import markdown import os import uuid @@ -14,10 +14,14 @@ sys.path.insert(0, current_dir) from AlgoriAgent.projects.algoriAgent.agent_manager import AgentManager app = Flask(__name__) - +socketio = SocketIO(app, cors_allowed_origins="*",ping_timeout=60, ping_interval=5) +# socketio = SocketIO(app, cors_allowed_origins="http://localhost:9888") # 设置跨域支持 +import logging app.secret_key = 'cakebaker' +app.logger.setLevel(logging.DEBUG) # 配置 CORS -CORS(app, resources={r"/*": {"origins": "http://localhost:9888"}}, supports_credentials=True) +# CORS(app, resources={r"/*": {"origins": "http://localhost:9888"}}, supports_credentials=True) + userid_recorder = {} # user_id&path -> session['user_id'] @@ -30,6 +34,23 @@ backboard_manager = BackBoardManager() uuid2user_id = {} user_id2uuid = {} + +# 定义命名空间:用于和 VSCode 插件交流 +class VSCodeNamespace(Namespace): + def on_connect(self): + print("VSCode client connected") + + def on_message(self, data): + print(f"Received from VSCode client: {data}") + data = json.loads(data) + datatype = data['type'] + dataconfig = data['config'] + user_id = dataconfig.get('user_id') + path = dataconfig.get('path') + print(f"User {user_id} connected with path: {path}") + emit('response', {'message': 'Config data received and connection established'}) + def on_disconnect(self): + print("VSCode client disconnected") @app.route('/backboard') def backboard(): @@ -73,40 +94,39 @@ def realtime_response(config, realtime_action): ''' Agent and Chat ''' - -socketio = SocketIO(app, cors_allowed_origins="*") - agent_manager = AgentManager() -@socketio.on('connect') -def handle_connect(): - user = request.args.get('username') - folder_name = request.args.get('folder') - user_uuid = user_id2uuid[user] - session['user_id'] = user_uuid - print(f'User connected with session user_id: {user_uuid}') - # 从markdown、markdown_prompts、score_prompts中各读取数据folder.md并进行new_agent - with open(f'books/markdown/{folder_name}.md','r') as fmd,\ - open(f'books/markdown_prompts/{folder_name}.md','r')as fmdp,\ - open(f'books/score_prompts/{folder_name}.md','r') as fsp: - markdown = fmd.read() - markdown_prompts = fmdp.read() - score_prompts = fsp.read() - user_uuid, agent = agent_manager.new_agent(markdown, markdown_prompts, score_prompts, id=user_uuid) - join_room(user_uuid) # 将该用户加入以user_id为名的room - -# 当接收到前端的消息时,触发此事件 -@socketio.on('send_message') -def handle_message(data): - print(f"Message from client: {data}") - id = session.get('user_id') - print(id) - # 构造回复消息 - res = agent_manager.invoke(id, data, backboard_manager.get_backboard(id).get_info_prompt()) - reply = f"AI: {res.content['speak']}" - # 将回复发送回前端 - emit('receive_message', reply) +class AgentNamespace(Namespace): + def on_connect(self): + user = request.args.get('username') + folder_name = request.args.get('folder') + user_uuid = user_id2uuid[user] + session['user_id'] = user_uuid + print(f'User connected with session user_id: {user_uuid}') + # 从markdown、markdown_prompts、score_prompts中各读取数据folder.md并进行new_agent + with open(f'books/markdown/{folder_name}.md','r') as fmd,\ + open(f'books/markdown_prompts/{folder_name}.md','r')as fmdp,\ + open(f'books/score_prompts/{folder_name}.md','r') as fsp: + markdown = fmd.read() + markdown_prompts = fmdp.read() + score_prompts = fsp.read() + user_uuid, agent = agent_manager.new_agent(markdown, markdown_prompts, score_prompts, id=user_uuid) + join_room(user_uuid) # 将该用户加入以user_id为名的room + + def on_message(self, data): + print(f"Message from client: {data}") + id = session.get('user_id') + print(id) + # 构造回复消息 + res = agent_manager.invoke(id, data, backboard_manager.get_backboard(id).get_info_prompt()) + reply = f"AI: {res.content['speak']}" + # 将回复发送回前端 + emit('receive_message', reply) + + + def on_disconnect(self): + print("VSCode client disconnected") ''' @@ -212,7 +232,11 @@ def get_session(): user_session = session.get('user_id', 'default_session') return jsonify({"session": user_session}) +socketio.on_namespace(VSCodeNamespace('/vscode')) +socketio.on_namespace(AgentNamespace('/agent')) + + if __name__ == '__main__': - socketio.run(app, host='0.0.0.0', port=5500) + socketio.run(app, host='localhost', port=5500, debug=True) diff --git a/Html/static/js/chatbox.js b/Html/static/js/chatbox.js index 8cc203f..c7f00a5 100644 --- a/Html/static/js/chatbox.js +++ b/Html/static/js/chatbox.js @@ -1,18 +1,24 @@ + var socket; document.addEventListener('DOMContentLoaded', function() { - const data = window.appData; + data = window.appData; console.log(data); - socket = io.connect(`http://172.21.20.148:5500?username=${data.username}&folder=${data.folder}`); + socket = new WebSocket('ws://localhost:5500/agent'); + socket.onopen = () => { + console.log('Connected to agent WebSocket'); + ws.send(JSON.stringify({ message: 'Hello from client' })); // 发送数据 + }; // 监听来自服务器的消息 - socket.on('receive_message', function(data) { + socket.onmessage((event) => { // 显示服务器的回复消息 + data = event.data const serverMessage = document.createElement('div'); serverMessage.innerHTML = `
服务器: ${marked.parse(data)}
`; document.getElementById('chatbox').appendChild(serverMessage); // 滚动到最新消息 document.getElementById('chatbox').scrollTop = document.getElementById('chatbox').scrollHeight; - }); + }); }); diff --git a/Html/templates/index.html b/Html/templates/index.html index 5ff1a11..d2881ea 100644 --- a/Html/templates/index.html +++ b/Html/templates/index.html @@ -11,7 +11,6 @@ document.cookie = "vscode-tkn=44edc269-6f88-46ab-9790-dc253f66ac36; path=/; SameSite=None; Secure"; -