Procházet zdrojové kódy

Merge branch 'master' of http://192.168.5.5:10010/r/rag-gateway

zhangqian před 1 rokem
rodič
revize
ce9fb375be
4 změnil soubory, kde provedl 47 přidání a 44 odebrání
  1. 3 3
      app/api/agent.py
  2. 29 31
      app/api/chat.py
  3. 6 2
      app/service/basic.py
  4. 9 8
      app/service/session.py

+ 3 - 3
app/api/agent.py

@@ -60,7 +60,7 @@ async def chat_list(
 
     elif agent.agent_type == AgentType.BASIC:
         offset = (page - 1) * limit
-        records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id).offset(offset).limit(limit).all()
+        records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).offset(offset).limit(limit).all()
         result = [item.to_dict() for item in records]
         return ResponseList(code=200, msg="", data=result)
 
@@ -140,8 +140,8 @@ async def session_log(agent_id: str, conversation_id: str, db: Session = Depends
         except Exception as e:
             raise HTTPException(status_code=500, detail=str(e))
     elif agent.agent_type == AgentType.BASIC:
-        session = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).first()
-        return JSONResponse(status_code=200, content={"code": 200, "data": session.log_to_json()})
+        session = db.query(SessionModel).filter(SessionModel.id == conversation_id).first()
+        return JSONResponse(status_code=200, content={"code": 200, "data": session.log_to_json() if session else {}})
     else:
         return JSONResponse(status_code=200, content={"code": 200, "log": "Unsupported agent type"})
 

+ 29 - 31
app/api/chat.py

@@ -220,37 +220,32 @@ async def handle_client(websocket: WebSocket,
                 if not question:
                     await websocket.send_json({"message": "Invalid request", "type": "error"})
                     continue
-                if agent.agent_type == "questionTalk":
-                    async for result in service.questions_talk(question, chat_id):
+                logger.error(agent.type)
+                if agent.type == "questionTalk":
+
+                    try:
+                        data = await service.questions_talk(question, chat_id)
+                        output = data.get("output", "")
+                        file_name = data.get("filename", "")
+
+                        excel_url = None
+                        if file_name:
+                            excel_url = f"/api/files/download/?agent_id=basic_question_talk&file_id={file_name}&file_type=word"
+                        result = {"message": output, "type": "message", "file_url": excel_url}
                         try:
-                            if result[:5] == "data:":
-                                # 如果是,则截取掉前5个字符,并去除首尾空白符
-                                text = result[5:].strip()
-                            else:
-                                # 否则,保持原样
-                                text = result
-                            try:
-                                data = json.loads(text)
-                                output = data.get("output", "")
-                                file_name = data.get("filename", "")
+                            SessionService(db).update_session(chat_id,
+                                                              message={"role": "assistant", "content": result})
+                        except Exception as e:
+                            logger.error(e)
+                        logger.error("-----------------11111111--------------------")
+                        await websocket.send_json(result | data)
+                    except Exception as e2:
+
+                        result = {"message": f"内部错误: {e2}", "type": "close"}
+                        logger.error(str(e2))
+                        logger.error(f"Error process message of basic chuti agent: {e2}")
+                        await websocket.send_json(result)
 
-                                excel_url = None
-                                if file_name:
-                                    excel_url = f"/api/files/download/?agent_id=basic_question_talk&file_id={file_name}&file_type=word"
-                                result = {"message": output, "type": "message", "file_url": excel_url}
-                                try:
-                                    SessionService(db).update_session(session_id=chat_id, is_incr=1,
-                                                                      message={"role": "assistant", "content": result})
-                                except Exception as e:
-                                    logger.error(e)
-                                await websocket.send_json(result | data)
-                            except json.JSONDecodeError as e:
-                                print(f"Error decoding JSON: {e}")
-                                # print(f"Response text: {text}")
-                        except Exception as e2:
-                            result = {"message": f"内部错误: {e2}", "type": "close"}
-                            await websocket.send_json(result)
-                            print(f"Error process message of basic agent: {e2}")
                 else:
                     async for result in service.excel_talk(question, chat_id):
                         try:
@@ -273,7 +268,7 @@ async def handle_client(websocket: WebSocket,
                                     image_url = f"/api/files/download/?agent_id=basic_excel_talk&file_id={image_name}&file_type=image"
                                 result = {"message": output, "type": "message", "excel_url": excel_url, "image_url": image_url}
                                 try:
-                                    SessionService(db).update_session(session_id=chat_id, is_incr=1,
+                                    SessionService(db).update_session(chat_id,
                                                                       message={"role": "assistant", "content": result})
                                 except Exception as e:
                                     logger.error(e)
@@ -286,7 +281,10 @@ async def handle_client(websocket: WebSocket,
                             await websocket.send_json(result)
                             print(f"Error process message of basic agent: {e2}")
         except Exception as e:
-            await websocket.send_json({"message": str(e), "type": "error"})
+            logger.error("----------------------------------------------fffffff")
+            logger.error(e)
+            print(e)
+            await websocket.send_json({"message": "出现错误!", "type": "error"})
         finally:
             await websocket.close()
             print(f"Client {agent_id} disconnected")

+ 6 - 2
app/service/basic.py

@@ -1,5 +1,7 @@
 import httpx
 
+from Log import logger
+
 
 class BasicService:
     def __init__(self, base_url: str):
@@ -73,13 +75,15 @@ class BasicService:
                 else:
                     yield f"Error: {response.status_code}"
 
-    async def questions_talk(self, chat_id: str):
+    async def questions_talk(self,question, chat_id: str):
+        logger.error("---------------questions_talk--------------------------")
         url = f"{self.base_url}/questions/talk"
         params = {'chat_id': chat_id}
         headers = {'Content-Type': 'text/plain'}
-        async with httpx.AsyncClient() as client:
+        async with httpx.AsyncClient(timeout=1800) as client:
             response = await client.post(
                 url,
+                data=question,
                 headers=headers,
                 params=params
             )

+ 9 - 8
app/service/session.py

@@ -1,5 +1,6 @@
 from sqlalchemy.orm import Session
 
+from Log import logger
 from app.models import AgentType
 from app.models.session_model import SessionModel
 
@@ -29,7 +30,7 @@ class SessionService:
 
         new_session = SessionModel(
             id=session_id,
-            name=name,
+            name=name[0:200],
             agent_id=agent_id,
             agent_type=agent_type,
             tenant_id = user_id,
@@ -63,16 +64,16 @@ class SessionService:
         返回:
             SessionModel: 更新后的会话模型实例。
         """
-        session = self.get_session_by_id(session_id)
+        logger.error("更新数据---------------------------")
+        session = self.db.query(SessionModel).filter_by(id=session_id).first()
         if session:
             if "message" in kwargs:
-                message =  session.message
+
+                message = session.message
                 message.append(kwargs["message"])
-                kwargs["message"] = message
-            for key, value in kwargs.items():
-                setattr(session, key, value)
-            self.db.commit()
-            self.db.refresh(session)
+                session = message
+                self.db.commit()
+                self.db.refresh(session)
         return session
 
     def delete_session(self, session_id: str) -> None: