Spaces:
Sleeping
Sleeping
| """ | |
| Session management for the AI Database Assistant. | |
| """ | |
| import streamlit as st | |
| from typing import List, Dict, Any | |
| class SessionManager: | |
| """Manages session state and message handling.""" | |
| def initialize_session() -> None: | |
| """Initialize session state variables.""" | |
| if "messages" not in st.session_state: | |
| st.session_state["messages"] = [] | |
| def get_messages() -> List[Dict[str, Any]]: | |
| """Get all messages from session state.""" | |
| return st.session_state.get("messages", []) | |
| def add_user_message(content: str) -> None: | |
| """Add a user message to the session.""" | |
| st.session_state["messages"].append({ | |
| "role": "user", | |
| "content": content | |
| }) | |
| def add_thinking_message() -> None: | |
| """Add a thinking placeholder message.""" | |
| st.session_state["messages"].append({ | |
| "role": "assistant", | |
| "content": "🤔 Thinking...", | |
| "is_placeholder": True | |
| }) | |
| def replace_last_message(content: str, data: List[Dict] = None, | |
| chart: str = None, is_error: bool = False) -> None: | |
| """Replace the last message with final response.""" | |
| st.session_state["messages"][-1] = { | |
| "role": "assistant", | |
| "content": content, | |
| "data": data or [], | |
| "chart": chart, | |
| "is_error": is_error, | |
| } | |
| def is_ai_thinking() -> bool: | |
| """Check if AI is currently thinking (has placeholder message).""" | |
| messages = SessionManager.get_messages() | |
| if not messages: | |
| return False | |
| last_message = messages[-1] | |
| return ( | |
| last_message["role"] == "assistant" and | |
| last_message.get("is_placeholder", False) | |
| ) | |
| def get_last_user_message() -> str: | |
| """Get the content of the last user message.""" | |
| messages = SessionManager.get_messages() | |
| if len(messages) >= 2: | |
| return messages[-2]["content"] | |
| return "" | |
| def has_pending_response() -> bool: | |
| """Check if there's a pending response to process.""" | |
| messages = SessionManager.get_messages() | |
| return ( | |
| messages and | |
| messages[-1].get("is_placeholder") and | |
| len(messages) >= 2 and | |
| messages[-2]["role"] == "user" | |
| ) | |