SAAP / backend /scripts /run_real_tests.py
Hwandji's picture
Add full SAAP platform with Docker SDK
63bfc55
Raw
History Blame Contribute Delete
5.01 kB
#!/usr/bin/env python3
"""Echte Evaluationstests für alle 4 Hypothesen (H1-H4)"""
import requests
import time
import json
import statistics
BASE_URL = "http://localhost:8000"
results = {"h1": {}, "h2": {}, "h3": {}, "h4": {}}
# ===== H1: Privacy Detection Tests =====
print("=" * 50)
print("H1: Privacy Detection Tests")
print("=" * 50)
privacy_tests = [
{"msg": "Meine IBAN ist DE89370400440532013000", "expected": "private", "category": "IBAN"},
{"msg": "Kreditkarte: 4111111111111111", "expected": "private", "category": "Kreditkarte"},
{"msg": "Patient hat Diabetes Typ 2", "expected": "private", "category": "Medizin"},
{"msg": "Mein Gehalt beträgt 75000 Euro", "expected": "private", "category": "Finanzen"},
{"msg": "Was ist Python?", "expected": "public", "category": "Allgemein1"},
{"msg": "Erkläre Docker", "expected": "public", "category": "Allgemein2"},
]
h1_results = []
for test in privacy_tests:
try:
resp = requests.post(f"{BASE_URL}/api/v1/multi-agent/chat",
json={"user_message": test["msg"], "privacy_mode": "auto"}, timeout=60)
data = resp.json()
detected = data.get("privacy_protection", {}).get("privacy_level", "unknown")
correct = detected.lower() == test["expected"].lower()
h1_results.append({"category": test["category"], "expected": test["expected"],
"detected": detected, "correct": correct})
print(f" {test['category']}: {detected} (erwartet: {test['expected']}) -> {'✓' if correct else '✗'}")
except Exception as e:
print(f" {test['category']}: FEHLER - {e}")
results["h1"]["tests"] = h1_results
results["h1"]["accuracy"] = sum(1 for r in h1_results if r["correct"]) / len(h1_results) * 100 if h1_results else 0
print(f"\n>>> H1 Genauigkeit: {results['h1']['accuracy']:.1f}%")
# ===== H4: Latenz-Tests =====
print("\n" + "=" * 50)
print("H4: Latenz-Tests (Simple Query)")
print("=" * 50)
latency_tests = ["Was ist REST?", "Erkläre API-Design", "Was ist Machine Learning?"]
latencies = []
for msg in latency_tests:
try:
start = time.time()
resp = requests.post(f"{BASE_URL}/api/v1/multi-agent/chat",
json={"user_message": msg, "privacy_mode": "auto"}, timeout=120)
latency = time.time() - start
latencies.append(latency)
print(f" '{msg[:25]}...' -> {latency:.2f}s")
except Exception as e:
print(f" FEHLER: {e}")
if latencies:
results["h4"]["latencies"] = latencies
results["h4"]["avg"] = statistics.mean(latencies)
results["h4"]["min"] = min(latencies)
results["h4"]["max"] = max(latencies)
print(f"\n>>> H4 Durchschnitt: {results['h4']['avg']:.2f}s (Min: {results['h4']['min']:.2f}s, Max: {results['h4']['max']:.2f}s)")
# ===== H3: Kosten-Tracking =====
print("\n" + "=" * 50)
print("H3: Kosten-Analyse")
print("=" * 50)
try:
resp = requests.get(f"{BASE_URL}/api/v1/costs/summary", timeout=30)
if resp.status_code == 200:
costs = resp.json()
results["h3"] = costs
print(f" Gesamtkosten: ${costs.get('total_cost_usd', 0):.4f}")
print(f" Lokale Anfragen: {costs.get('local_requests', 0)}")
print(f" Cloud Anfragen: {costs.get('cloud_requests', 0)}")
else:
print(f" Kosten-API Status: {resp.status_code}")
except Exception as e:
print(f" Kosten-API nicht verfügbar: {e}")
# ===== H2: Parallele Anfragen =====
print("\n" + "=" * 50)
print("H2: Skalierbarkeit (5 parallele Anfragen)")
print("=" * 50)
import concurrent.futures
def send_parallel_request(i):
start = time.time()
try:
resp = requests.post(f"{BASE_URL}/api/v1/multi-agent/chat",
json={"user_message": f"Test {i}", "privacy_mode": "auto"}, timeout=60)
return {"id": i, "latency": time.time() - start, "success": resp.status_code == 200}
except:
return {"id": i, "latency": time.time() - start, "success": False}
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
h2_results = list(executor.map(send_parallel_request, range(1, 6)))
results["h2"]["tests"] = h2_results
results["h2"]["success_rate"] = sum(1 for r in h2_results if r["success"]) / len(h2_results) * 100
results["h2"]["avg_latency"] = statistics.mean([r["latency"] for r in h2_results])
for r in h2_results:
print(f" Anfrage {r['id']}: {r['latency']:.2f}s - {'✓' if r['success'] else '✗'}")
print(f"\n>>> H2 Erfolgsrate: {results['h2']['success_rate']:.0f}%, Durchschnitt: {results['h2']['avg_latency']:.2f}s")
# ===== ZUSAMMENFASSUNG =====
print("\n" + "=" * 50)
print("ZUSAMMENFASSUNG ECHTE TESTERGEBNISSE")
print("=" * 50)
print(f"H1 Privacy Detection: {results['h1']['accuracy']:.1f}% Genauigkeit")
print(f"H2 Skalierbarkeit: {results['h2']['success_rate']:.0f}% Erfolgsrate, {results['h2']['avg_latency']:.2f}s avg")
print(f"H3 Kosten: {results['h3'].get('total_cost_usd', 'N/A')}")
print(f"H4 Latenz: {results['h4'].get('avg', 'N/A'):.2f}s Durchschnitt")