From 76f5540f1983ba19e1bd2a5fc1939819df1db7fc Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Wed, 24 Sep 2025 13:11:04 -0300 Subject: [PATCH] implement delete session endpoint --- src/api/chat.py | 24 +++++++++++++++++ src/main.py | 12 +++++++++ src/services/chat_service.py | 52 ++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/src/api/chat.py b/src/api/chat.py index b9dea5ef..58492118 100644 --- a/src/api/chat.py +++ b/src/api/chat.py @@ -155,3 +155,27 @@ async def langflow_history_endpoint(request: Request, chat_service, session_mana return JSONResponse( {"error": f"Failed to get langflow history: {str(e)}"}, status_code=500 ) + + +async def delete_session_endpoint(request: Request, chat_service, session_manager): + """Delete a chat session""" + user = request.state.user + user_id = user.user_id + session_id = request.path_params["session_id"] + + try: + # Delete from both local storage and Langflow + result = await chat_service.delete_session(user_id, session_id) + + if result.get("success"): + return JSONResponse({"message": "Session deleted successfully"}) + else: + return JSONResponse( + {"error": result.get("error", "Failed to delete session")}, + status_code=500 + ) + except Exception as e: + logger.error(f"Error deleting session: {e}") + return JSONResponse( + {"error": f"Failed to delete session: {str(e)}"}, status_code=500 + ) diff --git a/src/main.py b/src/main.py index f78e07bc..b7883c4b 100644 --- a/src/main.py +++ b/src/main.py @@ -786,6 +786,18 @@ async def create_app(): ), methods=["GET"], ), + # Session deletion endpoint + Route( + "/sessions/{session_id}", + require_auth(services["session_manager"])( + partial( + chat.delete_session_endpoint, + chat_service=services["chat_service"], + session_manager=services["session_manager"], + ) + ), + methods=["DELETE"], + ), # Authentication endpoints Route( "/auth/init", diff --git a/src/services/chat_service.py b/src/services/chat_service.py index 5ffe30f9..32536f4b 100644 --- a/src/services/chat_service.py +++ b/src/services/chat_service.py @@ -484,3 +484,55 @@ class ChatService: "total_conversations": len(all_conversations), } + async def delete_session(self, user_id: str, session_id: str): + """Delete a session from both local storage and Langflow""" + try: + # Delete from local conversation storage + from agent import delete_user_conversation + local_deleted = delete_user_conversation(user_id, session_id) + + # Delete from Langflow using the monitor API + langflow_deleted = await self._delete_langflow_session(session_id) + + success = local_deleted or langflow_deleted + error_msg = None + + if not success: + error_msg = "Session not found in local storage or Langflow" + + return { + "success": success, + "local_deleted": local_deleted, + "langflow_deleted": langflow_deleted, + "error": error_msg + } + + except Exception as e: + logger.error(f"Error deleting session {session_id} for user {user_id}: {e}") + return { + "success": False, + "error": str(e) + } + + async def _delete_langflow_session(self, session_id: str): + """Delete a session from Langflow using the monitor API""" + try: + response = await clients.langflow_request( + "DELETE", + f"/api/v1/monitor/messages/session/{session_id}" + ) + + if response.status_code == 200 or response.status_code == 204: + logger.info(f"Successfully deleted session {session_id} from Langflow") + return True + else: + logger.warning( + f"Failed to delete session {session_id} from Langflow: " + f"{response.status_code} - {response.text}" + ) + return False + + except Exception as e: + logger.error(f"Error deleting session {session_id} from Langflow: {e}") + return False +