Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| Test script: Jeffrey Epstein <-> Severna Park, Maryland (both directions) | |
| Tests precomputed embedding, oracle (BFS), and claude-haiku-4.5 agents. | |
| """ | |
| from __future__ import annotations | |
| import os | |
| import sys | |
| import time | |
| # Fix Windows console encoding | |
| if sys.platform == "win32": | |
| sys.stdout.reconfigure(encoding="utf-8", errors="replace") | |
| # Suppress TensorFlow and protobuf warnings before any imports | |
| os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" | |
| os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0" | |
| import warnings | |
| warnings.filterwarnings("ignore", category=UserWarning, module="google.protobuf") | |
| warnings.filterwarnings("ignore", category=DeprecationWarning) | |
| from pathlib import Path | |
| project_root = Path(__file__).parent.parent | |
| sys.path.insert(0, str(project_root)) | |
| import logging | |
| logging.basicConfig(level=logging.WARNING) | |
| from src.agents import get_agent | |
| from src.game import GameEngine | |
| # ============================================================================= | |
| # TEST CONFIGURATION | |
| # ============================================================================= | |
| TEST_CASES = [ | |
| ("Jeffrey Epstein", "Severna Park, Maryland"), | |
| ("Severna Park, Maryland", "Jeffrey Epstein"), | |
| ] | |
| AGENTS = [ | |
| ("precomputed", {}), # Embedding similarity baseline | |
| ("oracle", {}), # BFS optimal path | |
| ("llm", {"model": "anthropic/claude-haiku-4.5"}), | |
| ] | |
| def run_game(agent_name: str, start: str, target: str, max_steps: int = 30, **kwargs) -> dict: | |
| """Run a single game and return result dict.""" | |
| try: | |
| agent = get_agent(agent_name, **kwargs) | |
| # Warmup: load models/data before timing (follows project pattern) | |
| if hasattr(agent, "_ensure_loaded"): | |
| agent._ensure_loaded() | |
| with GameEngine(visualize=False) as engine: | |
| start_time = time.time() | |
| result = engine.run(agent=agent, start=start, target=target, max_steps=max_steps) | |
| elapsed = time.time() - start_time | |
| return { | |
| "agent": agent.name, | |
| "won": result.won, | |
| "clicks": result.total_clicks, | |
| "time": round(elapsed, 2), | |
| "path": result.path, | |
| } | |
| except Exception as e: | |
| import traceback | |
| return { | |
| "agent": agent_name, | |
| "won": False, | |
| "clicks": -1, | |
| "time": 0, | |
| "path": [], | |
| "error": str(e), | |
| "traceback": traceback.format_exc(), | |
| } | |
| def main(): | |
| print("=" * 80) | |
| print("EPSTEIN TEST: Comparing agents on a tricky path") | |
| print("=" * 80) | |
| print() | |
| total_tests = len(TEST_CASES) * len(AGENTS) | |
| current_test = 0 | |
| for case_idx, (start, target) in enumerate(TEST_CASES, 1): | |
| print("=" * 80) | |
| print(f"TEST {case_idx}/{len(TEST_CASES)}: {start} -> {target}") | |
| print("=" * 80) | |
| for agent_name, kwargs in AGENTS: | |
| current_test += 1 | |
| agent_display = kwargs.get("model", agent_name).split("/")[-1] | |
| print(f"\n[{current_test}/{total_tests}] Running {agent_display}...", flush=True) | |
| result = run_game(agent_name, start, target, **kwargs) | |
| if "error" in result: | |
| print(f" Result: ERROR - {result['error']}") | |
| if result.get("traceback"): | |
| # Print last few lines of traceback | |
| tb_lines = result["traceback"].strip().split("\n") | |
| for line in tb_lines[-3:]: | |
| print(f" {line}") | |
| else: | |
| status = "WIN" if result["won"] else "LOST" | |
| clicks = result["clicks"] if result["won"] else ">30" | |
| print(f" Model: {result['agent']}") | |
| print(f" Result: {status}") | |
| print(f" Clicks: {clicks}") | |
| print(f" Time: {result['time']:.1f}s") | |
| print(f" Path: {' -> '.join(result['path'])}") | |
| print() | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(main()) |