implement delete session endpoint
This commit is contained in:
parent
36fbe26406
commit
76f5540f19
3 changed files with 88 additions and 0 deletions
|
|
@ -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
|
||||
)
|
||||
|
|
|
|||
12
src/main.py
12
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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue