dewiri commited on
Commit
78e02ca
·
verified ·
1 Parent(s): b5c29bb

Update rag_pipeline.py

Browse files
Files changed (1) hide show
  1. rag_pipeline.py +39 -14
rag_pipeline.py CHANGED
@@ -1,4 +1,4 @@
1
- # rag_pipeline.py
2
 
3
  import os
4
  import pickle
@@ -12,28 +12,46 @@ from groq import Groq
12
  from openai import OpenAI
13
  import tqdm
14
 
15
- # === Load environment variables (handled by Hugging Face Secrets in deployment) ===
 
 
16
  openai_api_key = os.getenv("OPENAI_API_KEY")
17
  groq_api_key = os.getenv("GROQ_API_KEY")
18
 
19
  groq_client = Groq(api_key=groq_api_key) if groq_api_key else None
20
  openai_client = OpenAI(api_key=openai_api_key) if openai_api_key else None
21
 
 
 
 
 
22
 
23
- if not os.path.exists("faiss/faiss_index.index"):
24
- raise FileNotFoundError("Fehlende FAISS-Datei: faiss_index.index")
 
 
 
25
 
26
- # === Load FAISS Index and Chunks ===
27
- index = faiss.read_index("faiss/faiss_index.index")
28
- with open("faiss/chunks_mapping.pkl", "rb") as f:
29
- token_split_texts = pickle.load(f)
30
 
31
- # === Load SentenceTransformer model ===
32
- model = SentenceTransformer("Sahajtomar/German-semantic")
33
- chunk_embeddings = model.encode(token_split_texts, convert_to_numpy=True)
 
 
 
34
 
35
- # === Fit UMAP ===
36
- umap_transform = umap.UMAP(random_state=0, transform_seed=0).fit(chunk_embeddings)
 
 
 
 
 
 
 
 
37
 
38
  def project_embeddings(embeddings, umap_transform):
39
  umap_embeddings = np.empty((len(embeddings), 2))
@@ -42,6 +60,8 @@ def project_embeddings(embeddings, umap_transform):
42
  return umap_embeddings
43
 
44
  def retrieve(query, k=5):
 
 
45
  query_embedding = model.encode([query], convert_to_numpy=True)
46
  distances, indices = index.search(query_embedding, k)
47
  retrieved_texts = [token_split_texts[i] for i in indices[0]]
@@ -85,11 +105,16 @@ def ask_openai_llm(prompt):
85
  return response.choices[0].message.content.strip()
86
 
87
  def run_qa_pipeline(user_query, k=5):
 
88
  retrieved_texts, _, _ = retrieve(user_query, k=k)
 
 
 
89
  prompt = build_prompt(user_query, retrieved_texts)
 
90
  answer_groq = ask_groq_llm(prompt)
91
  answer_openai = ask_openai_llm(prompt)
92
 
93
  return f"\U0001f999 Groq LLaMA 3 Antwort:\n{answer_groq}\n\n\U0001f52e OpenAI GPT-4 Antwort:\n{answer_openai}"
94
 
95
- # Optional: Für Visualisierung könnte ein UMAP-Plot integriert werden, derzeit ausgelassen für Spaces
 
1
+ # rag_pipeline.py (Debug-Version mit Indexprüfung & Logging)
2
 
3
  import os
4
  import pickle
 
12
  from openai import OpenAI
13
  import tqdm
14
 
15
+ print("🚀 RAG-App gestartet")
16
+
17
+ # === Load environment variables (in HF Spaces über Secrets verfügbar) ===
18
  openai_api_key = os.getenv("OPENAI_API_KEY")
19
  groq_api_key = os.getenv("GROQ_API_KEY")
20
 
21
  groq_client = Groq(api_key=groq_api_key) if groq_api_key else None
22
  openai_client = OpenAI(api_key=openai_api_key) if openai_api_key else None
23
 
24
+ # === Load SentenceTransformer model ===
25
+ print("📦 Lade SentenceTransformer Modell...")
26
+ model = SentenceTransformer("Sahajtomar/German-semantic")
27
+ print("✅ Modell geladen")
28
 
29
+ # === Lade FAISS-Index und Chunk-Mapping ===
30
+ try:
31
+ print("📂 Lade FAISS-Index...")
32
+ if not os.path.exists("faiss/faiss_index.index"):
33
+ raise FileNotFoundError("❌ faiss_index.index fehlt!")
34
 
35
+ if not os.path.exists("faiss/chunks_mapping.pkl"):
36
+ raise FileNotFoundError("❌ chunks_mapping.pkl fehlt!")
 
 
37
 
38
+ index = faiss.read_index("faiss/faiss_index.index")
39
+ with open("faiss/chunks_mapping.pkl", "rb") as f:
40
+ token_split_texts = pickle.load(f)
41
+
42
+ chunk_embeddings = model.encode(token_split_texts, convert_to_numpy=True)
43
+ print("✅ FAISS & Embeddings geladen")
44
 
45
+ # UMAP initialisieren
46
+ umap_transform = umap.UMAP(random_state=0, transform_seed=0).fit(chunk_embeddings)
47
+ print("✅ UMAP fit abgeschlossen")
48
+
49
+ except Exception as e:
50
+ print(f"❌ Fehler beim Laden von FAISS oder Chunks: {e}")
51
+ index = None
52
+ token_split_texts = []
53
+ chunk_embeddings = None
54
+ umap_transform = None
55
 
56
  def project_embeddings(embeddings, umap_transform):
57
  umap_embeddings = np.empty((len(embeddings), 2))
 
60
  return umap_embeddings
61
 
62
  def retrieve(query, k=5):
63
+ if index is None or chunk_embeddings is None:
64
+ return ["Kein Index verfügbar."], [], []
65
  query_embedding = model.encode([query], convert_to_numpy=True)
66
  distances, indices = index.search(query_embedding, k)
67
  retrieved_texts = [token_split_texts[i] for i in indices[0]]
 
105
  return response.choices[0].message.content.strip()
106
 
107
  def run_qa_pipeline(user_query, k=5):
108
+ print(f"🔎 Frage erhalten: {user_query}")
109
  retrieved_texts, _, _ = retrieve(user_query, k=k)
110
+ if not retrieved_texts or retrieved_texts[0] == "Kein Index verfügbar.":
111
+ return "❌ FAISS-Index nicht verfügbar. Bitte lade den Index hoch oder führe die Preprocessing-Pipeline aus."
112
+
113
  prompt = build_prompt(user_query, retrieved_texts)
114
+ print("✉️ Prompt gebaut, sende an LLMs...")
115
  answer_groq = ask_groq_llm(prompt)
116
  answer_openai = ask_openai_llm(prompt)
117
 
118
  return f"\U0001f999 Groq LLaMA 3 Antwort:\n{answer_groq}\n\n\U0001f52e OpenAI GPT-4 Antwort:\n{answer_openai}"
119
 
120
+ # Ende