# components/chat.py import streamlit as st from datetime import datetime from langchain_core.messages import HumanMessage, AIMessage from backend import get_embeddings_model, initialize_qa_system from utils.persistence import PersistenceManager def ensure_embeddings_initialized(): """Ensure embeddings model is initialized in session state.""" if 'embeddings' not in st.session_state: try: st.session_state.embeddings = get_embeddings_model() except Exception as e: st.error(f"Error initializing embeddings model: {e}") return False return True def format_session_date(session_id: str) -> str: """Format session ID into readable date.""" try: # Handle different possible date formats if '_' in session_id: date_part = session_id.split('_')[1] else: date_part = session_id if len(date_part) == 8: # Format: YYYYMMDD return datetime.strptime(date_part, '%Y%m%d').strftime('%B %d, %Y') elif len(date_part) == 14: # Format: YYYYMMDD_HHMMSS return datetime.strptime(date_part, '%Y%m%d%H%M%S').strftime('%B %d, %Y %I:%M %p') else: return date_part # Return original if format unknown except Exception as e: return f"Session: {session_id}" # Fallback display def clean_ai_response(content): """Clean up AI response content and remove technical artifacts.""" content = str(content) # Remove common technical artifacts if "content='" in content: content = content.split("content='")[1] if "additional_kwargs" in content: content = content.split("additional_kwargs")[0] # Clean up any remaining artifacts content = content.strip("'") content = content.replace('\\n', '\n') content = content.replace('\\t', '\t') return content def format_assistant_response(content): """Format the assistant's response into a structured layout.""" try: # Clean the content first content = clean_ai_response(content) # Identify sections and structure lines = [line.strip() for line in content.split('\n') if line.strip()] formatted_sections = [] current_section = [] for line in lines: # Handle bullet points and lists if line.startswith(('•', '-', '*')): line = f"
  • {line.lstrip('•-* ')}
  • " if not current_section: current_section.append("