Spaces:
Build error
Build error
| # 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 |