| """CLI entry point for the Wayfinder agent. |
| |
| Wraps the SDK's main.py interface so the agent can be run via: |
| uv run main.py --agent=wayfinder --game=ls20 |
| """ |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import logging |
| import sys |
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| def main() -> int: |
| """CLI entry point. |
| |
| Returns: |
| Exit code (0 for success). |
| """ |
| parser = argparse.ArgumentParser( |
| description="Wayfinder agent for ARC-AGI-3" |
| ) |
| parser.add_argument( |
| "--agent", default="wayfinder", |
| help="Agent name (default: wayfinder)" |
| ) |
| parser.add_argument( |
| "--game", default="ls20", |
| help="Game ID to play (default: ls20)" |
| ) |
| parser.add_argument( |
| "--max-actions", type=int, default=1000, |
| help="Max actions per level (default: 1000)" |
| ) |
| parser.add_argument( |
| "--device", default="cpu", |
| help="Torch device (default: cpu)" |
| ) |
| parser.add_argument( |
| "--verbose", "-v", action="store_true", |
| help="Enable verbose logging" |
| ) |
|
|
| args = parser.parse_args() |
|
|
| logging.basicConfig( |
| level=logging.DEBUG if args.verbose else logging.INFO, |
| format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", |
| ) |
|
|
| |
| try: |
| from arc_agi_3 import main as sdk_main |
| logger.info("Using SDK runner with agent=%s, game=%s", args.agent, args.game) |
| |
| sdk_main(agent_name=args.agent, game_id=args.game) |
| except ImportError: |
| logger.error( |
| "arc-agi-3 SDK not found. Install with: uv pip install arc-agi-3" |
| ) |
| logger.info("Running in standalone mode (no SDK)...") |
| _run_standalone(args) |
|
|
| return 0 |
|
|
|
|
| def _run_standalone(args: argparse.Namespace) -> None: |
| """Run the agent without the SDK (for testing/scaffolding). |
| |
| Args: |
| args: Parsed CLI arguments. |
| """ |
| import numpy as np |
|
|
| from agents.wayfinder.agent import WayfinderAgent |
|
|
| agent = WayfinderAgent( |
| max_actions=args.max_actions, |
| device=args.device, |
| ) |
|
|
| |
| logger.info("Running standalone simulation (5 steps)...") |
| for step in range(5): |
| frame = np.random.randint(0, 16, size=(64, 64), dtype=np.uint8) |
| result = agent.act( |
| frames=[frame], |
| state="NOT_FINISHED", |
| score=0.0, |
| win_score=1.0, |
| available_actions=["ACTION1", "ACTION2", "ACTION3", "ACTION4", "ACTION5"], |
| ) |
| logger.info("Step %d: %s", step + 1, result) |
|
|
| logger.info("Standalone simulation complete.") |
|
|
|
|
| if __name__ == "__main__": |
| sys.exit(main()) |
|
|