implement delete session endpoint

This commit is contained in:
Lucas Oliveira 2025-09-24 13:11:04 -03:00
parent 36fbe26406
commit 76f5540f19
3 changed files with 88 additions and 0 deletions

View file

@ -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
)

View file

@ -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",

View file

@ -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