rag-session-3 / aimakerspace /utils /session_manager.py
s4um1l's picture
assignment checkpoint
209e402
import uuid
import logging
# Configure logging
logger = logging.getLogger(__name__)
class SessionManager:
"""
Manages user sessions for processing and query operations
"""
def __init__(self):
"""Initialize the session manager with an empty sessions dictionary"""
self.sessions = {}
logger.info("SessionManager initialized")
def create_session(self, initial_value="processing"):
"""Create a new session with a UUID and return the session ID"""
session_id = str(uuid.uuid4())
self.sessions[session_id] = initial_value
logger.info(f"Created session: {session_id} with initial value: {initial_value}")
return session_id
def update_session(self, session_id, value):
"""Update the session with the given ID to the provided value"""
self.sessions[session_id] = value
logger.info(f"Updated session: {session_id}")
def session_exists(self, session_id):
"""Check if a session with the given ID exists"""
return session_id in self.sessions
def get_session(self, session_id):
"""Get the session data for the given ID"""
return self.sessions.get(session_id)
def get_sessions_summary(self):
"""Get a summary of all sessions"""
session_info = {}
for session_id, session_data in self.sessions.items():
if session_data == "processing":
status = "processing"
elif session_data == "failed":
status = "failed"
else:
# It's a RAG pipeline object
status = "ready"
# Count documents in vector DB
doc_count = 0
if hasattr(session_data, 'vector_db_retriever'):
if hasattr(session_data.vector_db_retriever, 'documents'):
doc_count = len(session_data.vector_db_retriever.documents)
elif hasattr(session_data.vector_db_retriever, 'vectors'):
doc_count = len(session_data.vector_db_retriever.vectors)
session_info[session_id] = {
"status": status
}
if status == "ready":
session_info[session_id]["document_count"] = doc_count
return {
"session_count": len(self.sessions),
"sessions": session_info,
"memory_usage": {
"session_count": len(self.sessions)
}
}