准备用mac

This commit is contained in:
CakeCN
2024-12-08 17:54:00 +08:00
parent 202b8ea4e2
commit 6d78595f1f
3 changed files with 69 additions and 40 deletions

View File

@@ -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)