准备用mac
This commit is contained in:
94
Html/app.py
94
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)
|
||||
|
||||
|
||||
@@ -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 = `<div class="chat-message server-message"><b>服务器:</b> ${marked.parse(data)}</div>`;
|
||||
document.getElementById('chatbox').appendChild(serverMessage);
|
||||
|
||||
// 滚动到最新消息
|
||||
document.getElementById('chatbox').scrollTop = document.getElementById('chatbox').scrollHeight;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
document.cookie = "vscode-tkn=44edc269-6f88-46ab-9790-dc253f66ac36; path=/; SameSite=None; Secure";
|
||||
</script>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/marked/13.0.2/marked.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.1/socket.io.min.js"></script>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://unpkg.com/split.js/dist/split.min.js"></script>
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user