gemma-sage / test /wiki_rag_test.py
neuralworm's picture
feat: Agentic Oracle, Multi-Message Bubbles, Filtering, and UI Fixes
8ab43a3
import os
import sys
import torch
import time
# Ensure the app directory is in the path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(project_root)
from app import (
index_files,
answer_with_rag,
get_embedding_function,
get_llm,
clear_index
)
def run_wiki_rag_test():
print("--- Wikipedia Top 10 Multi-Dokument RAG Test ---")
# 1. Testdatenverzeichnis
wiki_dir = os.path.join(project_root, "test", "tests", "test_data", "wiki_top10")
if not os.path.exists(wiki_dir):
print(f"Fehler: Verzeichnis {wiki_dir} nicht gefunden.")
return
all_files = [os.path.join(wiki_dir, f) for f in os.listdir(wiki_dir) if f.endswith(".txt")]
print(f"Gefundene Artikel: {len(all_files)}")
# 2. Modelle laden
print("Lade Modelle...")
get_embedding_function()
get_llm()
# 3. Index vorbereiten
print("Bereite Index vor...")
clear_index()
# 4. Alle Artikel indexieren
print(f"Indexiere {len(all_files)} Artikel...")
status = index_files(all_files, "mongodb://localhost:27017/", "wiki_rag_db", "wiki_chunks", False)
print(f"Status: {status}")
# 5. RAG Abfragen (Cross-Article / Multi-Dokument)
test_queries = [
{
"query": "Erkläre den Zusammenhang zwischen Physik und Chemie. Wie wird Materie und Energie in beiden Disziplinen behandelt?",
"expected_keywords": ["Physik", "Chemie", "Materie", "Energie", "Naturwissenschaft"]
},
{
"query": "Vergleiche die Beiträge von Isaac Newton und Albert Einstein zur modernen Wissenschaft. Inwiefern hat Einstein Newtons Ideen erweitert?",
"expected_keywords": ["Newton", "Einstein", "Gravitation", "Relativität", "Bewegungsgesetze"]
},
{
"query": "Welche Bedeutung haben Wissenschaft und Bildung (wie sie in den Artikeln 'Science' und 'Education' beschrieben werden) für die Entwicklung von Nationen wie den USA, dem Vereinigten Königreich oder Indien?",
"expected_keywords": ["USA", "Indien", "Education", "Science", "Universitäten", "Entwicklung"]
}
]
for i, t in enumerate(test_queries, 1):
print(f"\n[Test {i}] Frage: {t['query']}")
print("Antwort:\n" + "="*20)
full_answer = ""
for token in answer_with_rag(t['query'], []):
full_answer += token
sys.stdout.write(token)
sys.stdout.flush()
print("\n" + "="*20)
# Validierung
found = [kw for kw in t['expected_keywords'] if kw.lower() in full_answer.lower()]
print(f"Gefundene Schlüsselwörter: {found}")
if len(found) >= 2:
print("ERGEBNIS: PASS")
else:
print("ERGEBNIS: FAIL")
print("\n--- Alle Wiki-RAG Tests abgeschlossen ---")
if __name__ == "__main__":
run_wiki_rag_test()