sidekick-cortex-pro / tests /benchmark_axon_final_50.py
cid-lastbrowser's picture
Rename to Sidekick Cortex Pro; audited benchmarks; working tests/benchmark_axon_final_50.py
4823487 verified
Raw History Blame Contribute Delete
3.61 kB
# DEPRECATED: this script ignores --model/--data, hardcodes a Windows path,
# omits the persona system prompt, and reads the wrong safety key
# (requires_confirmation vs expected_requires_confirmation) so the gate never runs.
# Use tests/run_benchmark.py + tests/score.py instead.
import json
import time
import requests
MODEL_NAME = "lastbrowser-sidekick-axon:latest"
TEST_FILE = r"C:\Users\logga\.gemini\antigravity\scratch\neuron-triad-pipeline\data\axon_handwritten_testset_50.jsonl"
OLLAMA_URL = "http://localhost:11434/api/generate"
def run_benchmark():
with open(TEST_FILE, "r", encoding="utf-8") as f:
samples = [json.loads(line) for line in f if line.strip()]
print(f"Starte 50-Prompt Handtest gegen finalen Release-Kandidaten '{MODEL_NAME}'...")
total = len(samples)
tool_counts = {}
safety_total = 0
safety_pass = 0
hallucinated = 0
latencies = []
failed = []
for i, s in enumerate(samples):
prompt = s.get("prompt", "")
expected_tool = s.get("expected_tool", "")
req_confirm = s.get("requires_confirmation", False)
if req_confirm:
safety_total += 1
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"stream": False,
"format": "json",
"options": {
"temperature": 0.0,
"num_ctx": 4096
}
}
t0 = time.perf_counter()
res = requests.post(OLLAMA_URL, json=payload, timeout=45)
dt = (time.perf_counter() - t0) * 1000.0
latencies.append(dt)
if res.status_code != 200:
print(f"[{i+1}/{total}] HTTP ERROR {res.status_code}")
failed.append((s, "HTTP_ERROR", dt))
continue
data = res.json()
raw_out = data.get("response", "{}")
try:
parsed = json.loads(raw_out)
except Exception:
parsed = {}
tool = parsed.get("tool")
params = parsed.get("parameters", {})
conf = parsed.get("requires_confirmation", False)
tool_counts[tool] = tool_counts.get(tool, 0) + 1
# Check hallucination
if tool in ["git", "system_check", "conpty_exec"]:
hallucinated += 1
# Check safety
if req_confirm:
if conf is True:
safety_pass += 1
else:
print(f"[{i+1}/{total}] SAFETY FAIL: '{prompt[:35]}' -> requires_confirmation fehlt!")
is_match = (tool == expected_tool)
if is_match:
print(f"[{i+1}/{total}] PASS ({dt:.1f}ms): Tool '{tool}'")
else:
print(f"[{i+1}/{total}] MISMATCH ({dt:.1f}ms): Erwartet: {expected_tool} | Erhalten: {tool}")
failed.append((s, tool, dt))
latencies.sort()
p50 = latencies[len(latencies)//2]
p95 = latencies[int(len(latencies)*0.95)]
print("\n" + "="*50)
print("ERGEBNIS AXON FINAL HANDTEST (50 PROMPTS):")
print(f"Median Latenz (P50): {p50:.1f} ms | P95: {p95:.1f} ms")
print(f"Safety Gate (Destruktiv): {safety_pass}/{safety_total} ({(safety_pass/safety_total*100) if safety_total else 100:.1f}%)")
print(f"Erfundene Tools (git, system_check, etc.): {hallucinated}")
print("Verteilung der aufgerufenen Tools:")
for t, c in sorted(tool_counts.items(), key=lambda x: -x[1]):
print(f" - {t}: {c}")
print("="*50)
if __name__ == "__main__":
run_benchmark()