File size: 2,626 Bytes
e26f9a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# app.py

import streamlit as st
import os
import faiss
import pickle
from sentence_transformers import SentenceTransformer
from groq import Groq
from dotenv import load_dotenv
import re # Import regular expressions for expand_query_with_llm_app

# --- Page Configuration (MUST BE THE FIRST STREAMLIT COMMAND) ---
st.set_page_config(page_title="RAG BITS Tutor", page_icon="🎓") # Set page title and icon

# --- Konfiguration und Modell-Laden (am besten ausserhalb von Funktionen, um Caching zu nutzen) ---
@st.cache_resource # Wichtig für das Caching von grossen Modellen und Daten
def load_models_and_data():
    # Lade Umgebungsvariablen (falls .env Datei im Space vorhanden ist)
    load_dotenv()
    groq_api_key_app = os.getenv("GROQ_API_KEY") # Stelle sicher, dass der Key im Space verfügbar ist (siehe Schritt 3)

    # Pfade zum Index und den Chunks
    output_folder = "faiss_index_bits" # Muss im HF Space vorhanden sein
    index_path = os.path.join(output_folder, "bits_tutor.index")
    chunks_path = os.path.join(output_folder, "bits_chunks.pkl")

    # Lade FAISS Index
    if not os.path.exists(index_path):
        st.error(f"FAISS Index nicht gefunden unter: {index_path}") # This is a Streamlit command
        return None, None, None, None
    index_loaded = faiss.read_index(index_path)

    # Lade Chunks
    if not os.path.exists(chunks_path):
        st.error(f"Chunks-Datei nicht gefunden unter: {chunks_path}") # This is a Streamlit command
        return None, None, None, None
    with open(chunks_path, "rb") as f:
        chunks_loaded = pickle.load(f)

    # Lade Embedding-Modell
    embedding_model_name_app = "Sahajtomar/German-semantic" 
    embedding_model_loaded = SentenceTransformer(embedding_model_name_app)
    
    # Initialisiere Groq Client
    if not groq_api_key_app:
        st.error("GROQ_API_KEY nicht gefunden. Bitte im Hugging Face Space als Secret hinzufügen.") # This is a Streamlit command
        return None, None, None, None
    groq_client_loaded = Groq(api_key=groq_api_key_app)

    return index_loaded, chunks_loaded, embedding_model_loaded, groq_client_loaded

# Lade Modelle und Daten beim Start der App
# Wichtig: Die Funktion load_models_and_data() verwendet st.error(), was ein Streamlit-Befehl ist.
# Daher muss st.set_page_config() VOR dem ersten möglichen Aufruf von st.error() stehen.
faiss_index, chunks_data, embedding_model, groq_client = load_models_and_data()

# ... (Rest deines app.py Skripts bleibt gleich) ...

# --- Streamlit UI (kommt nach load_models_and_data) ---
st.title("🎓 RAG Study Tutor for Business IT Strategy") 
# ... etc. ...