Chatbot_RAG / session_state.py
felixflier03's picture
Update session_state.py
46a7c4a verified
Raw
History Blame Contribute Delete
5.74 kB
# session_state.py
import streamlit as st
import logging
from pathlib import Path
from typing import Optional
from chatbot_new import InitializationError, StateError
from config import VECTOR_STORE_PATH
from chatbot_new import IntelligentRAGChatbot
import os
logger = logging.getLogger(__name__)
import streamlit as st
from chatbot_new import IntelligentRAGChatbot
from environment_setup import setup_environment
import logging
logger = logging.getLogger(__name__)
def initialize_session_state():
"""Initialisiert den Session State"""
try:
st.info("Starte Initialisierung...")
if "theme" not in st.session_state:
st.session_state.theme = "dark"
_initialize_basic_state()
if "chatbot" not in st.session_state:
status_container = st.empty()
status_container.info("Lade Environment...")
# Hole API Key und Vector Store Path
api_key, vector_store_path = setup_environment()
status_container.info("Environment geladen!")
# Überprüfe ob die Datei existiert
vector_file = vector_store_path / "vectorstore.pkl"
if not vector_file.exists():
status_container.error(f"Datei nicht gefunden: {vector_file}")
raise FileNotFoundError(f"Vector Store Datei nicht gefunden: {vector_file}")
status_container.info(f"Vector Store gefunden: {vector_file}")
with st.spinner("Initialisiere Chatbot..."):
logger.info("Starte Chatbot-Initialisierung...")
status_container.info("Initialisiere Chatbot Komponenten...")
st.session_state.chatbot = IntelligentRAGChatbot(
vectorstore_file=vector_file,
bm25_file=vector_file, # Verwende die gleiche Datei
api_key=api_key
)
status_container.success("Chatbot erfolgreich initialisiert!")
status_container.empty()
except FileNotFoundError as e:
error_msg = f"Datei nicht gefunden: {str(e)}"
logger.error(error_msg)
st.error(error_msg)
raise
except Exception as e:
error_msg = f"Fehler bei der State-Initialisierung: {str(e)}"
logger.error(error_msg)
st.error(error_msg)
raise
def _initialize_basic_state():
"""Initialisiert die grundlegenden Session State Variablen"""
if "messages" not in st.session_state:
st.session_state.messages = [{
"role": "assistant",
"content": "Hallo! Ich bin Ihr KI-Assistent für Wirtschaftsprüfungsthemen. Wie kann ich Ihnen helfen?"
}]
default_settings = {
"feedback": None,
"debug": False,
"theme": "light",
"error_count": 0,
"conversation_context": {
"last_response": None,
"active_themes": [],
"interaction_count": 0
}
}
for key, value in default_settings.items():
if key not in st.session_state:
st.session_state[key] = value
def _initialize_chatbot():
"""Initialisiert den Chatbot mit Fehlerprüfung"""
try:
# Pfadprüfungen
_verify_paths()
# API Key Prüfung
api_key = _verify_api_key()
# Chatbot Initialisierung
logger.info("Starte Chatbot-Initialisierung...")
st.session_state.chatbot = IntelligentRAGChatbot(
vectorstore_file=VECTOR_STORE_PATH / "vectorstore.pkl",
bm25_file=VECTOR_STORE_PATH / "bm25.pkl",
api_key=api_key
)
except Exception as e:
raise InitializationError(f"Chatbot-Initialisierung fehlgeschlagen: {str(e)}")
def _verify_paths():
"""Überprüft die erforderlichen Dateipfade"""
if not VECTOR_STORE_PATH.exists():
raise FileNotFoundError(f"Verzeichnis nicht gefunden: {VECTOR_STORE_PATH}")
required_files = {
"vectorstore.pkl": "Vector Store Datei",
"bm25.pkl": "BM25 Datei"
}
for filename, description in required_files.items():
file_path = VECTOR_STORE_PATH / filename
if not file_path.exists():
raise FileNotFoundError(f"{description} nicht gefunden: {file_path}")
def _verify_api_key() -> str:
"""Überprüft und gibt den API Key zurück"""
api_key = os.getenv("GOOGLE_API_KEY")
if not api_key:
raise ValueError("Google API Key nicht gefunden. Bitte setzen Sie die Umgebungsvariable.")
return api_key
def _handle_initialization_error(error: Exception):
"""Zentrale Fehlerbehandlung für Initialisierungsfehler"""
error_messages = {
FileNotFoundError: "Datei nicht gefunden",
ValueError: "Konfigurationsfehler",
InitializationError: "Chatbot-Initialisierungsfehler",
StateError: "Session State Fehler"
}
error_type = type(error)
base_message = error_messages.get(error_type, "Unerwarteter Fehler")
error_msg = f"{base_message}: {str(error)}"
# Debug-Modus Handling
if st.session_state.get('debug', False):
st.error(f"Detaillierter Fehler: {error_msg}")
logger.error(error_msg, exc_info=True)
else:
st.error("Ein Fehler ist bei der Initialisierung aufgetreten.")
logger.error(error_msg)
# Fehlerzähler
st.session_state.error_count = st.session_state.get('error_count', 0) + 1
if st.session_state.error_count > 3:
st.error("Mehrere Fehler aufgetreten. Bitte laden Sie die Seite neu.")
logger.critical("Kritische Fehlerhäufung bei der Initialisierung")
raise error