From 4eb8d55ec0a664678895132256c97cc63a80be2b Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 21 十一月 2024 19:56:49 +0800 Subject: [PATCH] 写入记录问题 --- app/api/chat.py | 62 +++++++++++++++---------------- app/service/basic.py | 8 +++- app/service/session.py | 17 ++++---- app/api/agent.py | 6 +- 4 files changed, 48 insertions(+), 45 deletions(-) diff --git a/app/api/agent.py b/app/api/agent.py index af36024..fe6e6c0 100644 --- a/app/api/agent.py +++ b/app/api/agent.py @@ -60,7 +60,7 @@ 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 @@ 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"}) diff --git a/app/api/chat.py b/app/api/chat.py index 11af093..9784eb9 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -220,37 +220,32 @@ 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): - 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", "") + logger.error(agent.type) + if agent.type == "questionTalk": - 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}") + 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: + 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) + else: async for result in service.excel_talk(question, chat_id): try: @@ -273,7 +268,7 @@ 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 @@ 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") diff --git a/app/service/basic.py b/app/service/basic.py index f3e5db5..33e5f86 100644 --- a/app/service/basic.py +++ b/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 @@ 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 ) diff --git a/app/service/session.py b/app/service/session.py index 78ae31a..dd60c26 100644 --- a/app/service/session.py +++ b/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 @@ 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 @@ 杩斿洖: 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: -- Gitblit v1.8.0