| """ |
| Headless entrypoint for running a single experiment or a sweep. |
| |
| Usage: |
| python scripts/entrypoint.py --task example1 --out_dir experiments |
| python scripts/entrypoint.py --task example1 --out_dir experiments --use_wandb |
| |
| By default Weights & Biases logging is disabled. Use --use_wandb to enable it. |
| """ |
| import argparse |
| import json |
| import os |
| import importlib |
|
|
| def main(): |
| parser = argparse.ArgumentParser(description="Run ARC-AGI experiment (headless).") |
| parser.add_argument("--task", type=str, required=True, help="Task name or path to task JSON") |
| parser.add_argument("--out_dir", type=str, default="experiments", help="Output directory") |
| parser.add_argument("--use_wandb", action="store_true", help="Enable Weights & Biases logging (default: off)") |
| parser.add_argument("--params", type=str, default=None, help="Optional JSON string of params") |
| args = parser.parse_args() |
|
|
| os.makedirs(args.out_dir, exist_ok=True) |
|
|
| |
| import itt_solver.experiment_driver as ed |
| import itt_solver.solver_core as sc |
|
|
| |
| if os.path.exists(args.task): |
| with open(args.task) as fh: |
| task = json.load(fh) |
| else: |
| |
| |
| if args.task == "example1": |
| task = { |
| 'name': 'example1', |
| 'input': [[0,7,7],[7,7,7],[0,7,7]], |
| 'target': [ |
| [0,0,0,0,7,7,0,7,7], |
| [0,0,0,7,7,7,7,7,7], |
| [0,0,0,0,7,7,0,7,7], |
| [0,7,7,0,7,7,0,7,7], |
| [7,7,7,7,7,7,7,7,7], |
| [0,7,7,0,7,7,0,7,7], |
| [0,0,0,0,7,7,0,7,7], |
| [0,0,0,7,7,7,7,7,7], |
| [0,0,0,0,7,7,0,7,7], |
| ], |
| 'target_shape': (9,9) |
| } |
| else: |
| raise SystemExit(f"Unknown task identifier: {args.task}") |
|
|
| |
| params = {} |
| if args.params: |
| try: |
| params = json.loads(args.params) |
| except Exception: |
| print("Warning: could not parse --params JSON; ignoring.") |
|
|
| |
| atomic_library = ed.default_atomic_factory(params, task) |
|
|
| |
| result = ed.run_single(task, atomic_library, params, out_dir=args.out_dir) |
|
|
| |
| if args.use_wandb: |
| try: |
| from itt_solver.wandb_runner import run_and_log_wandb |
| run_and_log_wandb(task, atomic_library, params, out_dir=args.out_dir, |
| wandb_project=params.get('wandb_project','itt_solver'), |
| wandb_entity=None, resume="allow") |
| except Exception as e: |
| print("W&B logging failed or not configured:", e) |
|
|
| print("Run finished. Result summary:") |
| print(json.dumps(result, indent=2)) |
|
|
| if __name__ == "__main__": |
| main() |
|
|