mindnet/tests/test_wp06_decision.py

103 lines
3.8 KiB
Python
Raw Normal View History

2025-12-08 19:00:42 +01:00
"""
2025-12-08 19:41:32 +01:00
tests/test_wp06_decision.py — Flexibler Integrationstest für WP-06
2025-12-09 15:14:38 +01:00
Update: Timeout auf 300s erhöht für CPU-Inference Cold-Starts.
2025-12-08 19:00:42 +01:00
"""
import requests
import json
import sys
2025-12-08 19:41:32 +01:00
import argparse
2025-12-08 19:00:42 +01:00
2025-12-09 13:22:34 +01:00
def test_decision_engine(query: str, port: int, expected_intent: str):
2025-12-08 19:41:32 +01:00
api_url = f"http://localhost:{port}"
print(f"🔵 Starte WP-06 Decision Engine Test gegen {api_url}...\n")
2025-12-08 19:00:42 +01:00
payload = {
2025-12-08 19:41:32 +01:00
"message": query,
2025-12-08 19:00:42 +01:00
"top_k": 3,
"explain": True
}
try:
# Request senden
2025-12-08 19:41:32 +01:00
print(f"FRAGE: '{query}'")
2025-12-09 15:14:38 +01:00
print("... warte auf LLM (kann auf CPU >120s dauern) ...")
2025-12-08 19:00:42 +01:00
2025-12-09 15:14:38 +01:00
# FIX: Timeout auf 300 erhöht, passend zur Server-Config
response = requests.post(f"{api_url}/chat/", json=payload, timeout=300)
2025-12-08 19:00:42 +01:00
response.raise_for_status()
data = response.json()
# --- CHECKS ---
# 1. Intent Check
intent = data.get("intent", "UNKNOWN")
2025-12-09 13:22:34 +01:00
match = intent == expected_intent
print(f"\n1. INTENT DETECTION: [{'✅' if match else '❌'}]")
print(f" Erkannt: {intent} (Erwartet: {expected_intent})")
2025-12-08 19:00:42 +01:00
# 2. Source Check (Strategic Retrieval)
sources = data.get("sources", [])
2025-12-08 19:41:32 +01:00
strategic_hits = []
fact_hits = []
2025-12-08 19:00:42 +01:00
2025-12-08 19:41:32 +01:00
print(f"\n2. RETRIEVED SOURCES:")
if not sources:
print(" (Keine Quellen gefunden)")
2025-12-08 19:00:42 +01:00
for i, source in enumerate(sources):
# Safe access auf Source-Dict
src_meta = source.get("source", {})
node_type = src_meta.get("type", "unknown")
title = source.get("note_id", "Unknown")
2025-12-08 19:41:32 +01:00
score = source.get("total_score", 0.0)
2025-12-08 19:00:42 +01:00
2025-12-08 19:41:32 +01:00
# Marker für Ausgabe
marker = " "
2025-12-09 13:22:34 +01:00
if node_type in ["value", "principle", "goal", "experience", "belief", "profile"]:
2025-12-08 19:41:32 +01:00
marker = "🎯" # Strategischer Treffer
strategic_hits.append(title)
else:
marker = "📄"
fact_hits.append(title)
print(f" {marker} [{i+1}] {title} (Typ: {node_type}, Score: {score:.2f})")
2025-12-08 19:00:42 +01:00
2025-12-08 19:41:32 +01:00
# Analyse der Strategie
if strategic_hits:
print(f"\n ✅ ERFOLG: Strategische Quellen geladen: {strategic_hits}")
2025-12-08 19:00:42 +01:00
else:
2025-12-09 13:22:34 +01:00
print(f"\n ℹ️ INFO: Keine strategischen Quellen (Value/Experience/etc.) gefunden.")
2025-12-08 19:00:42 +01:00
# 3. Reasoning Check (LLM Antwort)
answer = data.get("answer", "")
print(f"\n3. REASONING (LLM Antwort):")
print("-" * 60)
print(answer)
print("-" * 60)
2025-12-09 15:14:38 +01:00
except requests.exceptions.ReadTimeout:
print(f"\n❌ TIMEOUT: Der Server hat nicht innerhalb von 300s geantwortet.")
print(" Tipp: Prüfe die Server-Logs. Lädt er noch das Modell?")
sys.exit(1)
2025-12-08 19:03:06 +01:00
except requests.exceptions.ConnectionError:
2025-12-08 19:41:32 +01:00
print(f"\n❌ FEHLER: Keine Verbindung zu {api_url}. Läuft der Server?")
2025-12-08 19:03:06 +01:00
sys.exit(1)
2025-12-08 19:00:42 +01:00
except Exception as e:
print(f"\n❌ CRITICAL ERROR: {e}")
sys.exit(1)
if __name__ == "__main__":
2025-12-08 19:41:32 +01:00
parser = argparse.ArgumentParser(description="Testet die WP-06 Decision Engine.")
parser.add_argument("--query", "-q", type=str,
default="Soll ich SuperCloud Sync für meine privaten Tagebücher nutzen?",
help="Die Frage, die an das System gestellt wird.")
parser.add_argument("--port", "-p", type=int,
default=8002,
help="Der Port der API (Default: 8002 für Dev).")
2025-12-09 13:22:34 +01:00
parser.add_argument("--expect", "-e", type=str,
default="DECISION",
help="Der erwartete Intent (z.B. DECISION, EMPATHY).")
2025-12-08 19:41:32 +01:00
args = parser.parse_args()
2025-12-09 13:22:34 +01:00
test_decision_engine(args.query, args.port, args.expect)