From 30311881800e4840a13f13dd702b093543b2082e Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期三, 16 十月 2024 15:00:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 app/api/chat.py |   33 +++++++++++++++------------------
 1 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/app/api/chat.py b/app/api/chat.py
index d5ab09d..80005f7 100644
--- a/app/api/chat.py
+++ b/app/api/chat.py
@@ -7,15 +7,13 @@
 from sqlalchemy.orm import Session
 from app.api import get_current_user_websocket
 from app.config.config import settings
+from app.models.agent_model import AgentModel, AgentType
 from app.models.base_model import get_db
 from app.models.user_model import UserModel
 from app.service.ragflow import RagflowService
 from app.service.token import get_bisheng_token, get_ragflow_token
 
 router = APIRouter()
-
-# 瀛樺偍瀹㈡埛绔� WebSocket 杩炴帴
-client_websockets = {}
 
 
 # 涓棿灞俉ebSocket 鏈嶅姟鍣紝鎺ユ敹瀹㈡埛绔殑杩炴帴
@@ -28,17 +26,16 @@
     await websocket.accept()
     print(f"Client {agent_id} connected")
 
-    if agent_id == "0":
-        agent_id = settings.bisheng_agent_id
-    elif agent_id == "1":
-        agent_id = settings.ragflow_agent_id
-        chat_id = settings.ragflow_chat_id
+    agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+    if not agent:
+        ret = {"message": "Agent not found", "type": "close"}
+        return websocket.send_json(ret)
+    agent_type = agent.agent_type
+    if chat_id == "" or chat_id == "0":
+        ret = {"message": "Chat ID not found", "type": "close"}
+        return websocket.send_json(ret)
 
-    if chat_id == "0":
-        chat_id = uuid.uuid4().hex
-
-    client_websockets[chat_id] = websocket
-    if agent_id == settings.ragflow_agent_id:
+    if agent_type == AgentType.RAGFLOW:
         ragflow_service = RagflowService(settings.ragflow_base_url)
         token = get_ragflow_token(db, current_user.id)
         try:
@@ -73,10 +70,8 @@
             await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
         except WebSocketDisconnect:
             print(f"Client {chat_id} disconnected")
-        finally:
-            del client_websockets[chat_id]
 
-    else:
+    elif agent_type == AgentType.BISHENG:
         token = get_bisheng_token(db, current_user.id)
         service_uri = f"{settings.bisheng_websocket_url}/api/v1/assistant/chat/{agent_id}?t=&chat_id={chat_id}"
         headers = {'cookie': f"access_token_cookie={token};"}
@@ -133,5 +128,7 @@
 
             except WebSocketDisconnect:
                 print(f"Client {chat_id} disconnected")
-            finally:
-                del client_websockets[chat_id]
+    else:
+        ret = {"message": "Agent not found", "type": "close"}
+        return websocket.send_json(ret)
+

--
Gitblit v1.8.0