08AI Research

FrogsGame Post-Training

#ModelScoreStepsIn tokOut tokAvg costAvg time
1Claude Fable 5.1
0.7344
±0.226
15421.9M141k$14.3616.4h
2GLM-5.3
0.4388
±0.320
25749.8M206k$17.7319.4h
3Kimi K3
0.2244
±0.160
17926.6M169k$12.3219.7h
4Grok 4.6
0.1428
±0.098
20233.5M318k$34.6518.7h
5Qwen3.8-Max
0.0936
±0.075
32949.2M357k$15.2419.4h
6GPT-5.6
0.0460
±0.029
23742.3M110k$42.9916.2h
7DeepSeek V4 Flash Exp
0.0456
±0.049
34271.3M237k$1.3619.8h
8Gemini 3.7 Flash
0.0356
±0.017
26069.3M124k$24.3912.4h
9Muse Spark 1.2
0.0136
±0.012
650302.1M357k$53.704.7h
10Inkling
0.0016
±0.004
1073.8M21k$3.730.5h

Background

The Frog Placement Game is a Queens-style constraint puzzle: an N×N grid of N colors, on which exactly one frog must be placed in every row, every column, and every color, with no two frogs adjacent — including diagonally. Boards range from N=6 (easy) to N=13 (expert), and the game is played through a tool-call interface: the board is not included in the prompt, so the model must call get_state to discover the layout, then place, check, and revise frogs one call at a time within a 200-call budget.

Post-training a small model to do this is hard because nothing is given: no training boards are provided, so the agent must generate its own solvable boards across every difficulty tier, build a multi-turn tool-use dataset in exactly the format the verifier replays, and execute the entire fine-tuning pipeline on a single local GPU within the time budget — while producing a policy that generalizes to board sizes it may have undertrained on.

Task

Post-train Qwen/Qwen3-8B to solve unseen Frog Placement Game boards through iterative tool use, generalizing across board sizes N=6 through N=13. The agent implements the training pipeline in /app/train.py, executes it on the local GPU, and leaves a trained adapter in place.

  • The deliverable is an unmerged PEFT LoRA adapter at /app/checkpoint/adapter/ (an adapter_config.json plus adapter_model.safetensors) that targets Qwen/Qwen3-8B and has rank at most 256.
  • /app/prepare.py— the immutable game engine, tool schemas, and shared prompt builder — must not be modified; training must use its build_system_prompt() and USER_MESSAGE so the format matches the verifier exactly.
  • No training boards are provided: the agent must generate its own boards and verify each one is solvable before using it.
  • The trained model must operate without solver or solution access at inference time, and the LoRA must not be merged into the base model.
  • The pipeline must actually be executed — the adapter files must exist in the workspace before the sandbox times out.

What The Agent Gets

A self-contained workspace at /app: prepare.py (game engine, tool interface, and eval harness), train.py (the editable training entry point), infer.py(a vLLM smoke test that verifies an adapter loads and generates), and a local copy of the Qwen3-8B tokenizer. The Qwen3-8B base weights are baked into the image's Hugging Face cache, and the pinned stack — Axolotl 0.18.0 for LoRA fine-tuning, vLLM 0.23.0 for local inference, PyTorch with CUDA, and PEFT — is preinstalled. Training and inference run on a dedicated A100-80GB GPU. The machine is offline; a sandbox-timer CLI reports the remaining time budget.

Verification

A clean-room verifier, running as root in a separate container, generates its own 500 hidden test boards (125 per difficulty tier), loads a pristine Qwen3-8B plus the submitted LoRA adapter in local vLLM, and replays every board through the same prompt and tool interface defined in prepare.py, with the same 200-tool-call budget. The reward is the solve rate over the fixed 500-board denominator; boards left unevaluated when the scoring deadline expires count as unsolved.

  • The visible /app/prepare.pyis checked against a SHA-256 hash pin of the trusted baked copy — any modification is a contract violation that zeroes the result.
  • The adapter is strictly audited before evaluation: LoRA-only tensors with matching A/B pairs, safetensors format (no adapter_model.bin), no symlinks, no DoRA, modules_to_save, or per-module rank/alpha patterns, at most 1000 files and 8 GiB total.
  • A declared base model other than Qwen/Qwen3-8Bor a LoRA rank outside 1–256 zeroes the result; a missing or invalid adapter cannot be evaluated and scores zero.
  • Pipeline-quality checks on train.py, the generated boards, and the checkpoint are reported as diagnostics but are excluded from the reward.

Environment

Base imagenvidia/cuda:12.5.1-devel-ubuntu24.04
Tools availableCUDA, PyTorch, C/C++ toolchain, Python 3
Compute8 CPUs · 64 GB RAM
GPU1× A100-80GB
Time limit20h

Changes From V1

This task is an improved revision of FrogsGame Post-Training from FrontierSWE V1.

  • Training moved from the remote Tinker API (internet access and a TINKER_API_KEY, no local GPU) to a fully offline local pipeline: Axolotl on a dedicated A100-80GB with the Qwen3-8B weights baked into the image.
  • The deliverable changed from a Tinker checkpoint path plus a self-reported results.json to a strictly validated unmerged PEFT LoRA adapter at /app/checkpoint/adapter/ (safetensors only, rank at most 256, LoRA-only tensors, no DoRA or modules_to_save, at most 8 GiB).
  • Scoring is now clean-room and hardware-fixed: a separate no-network verifier container with a pinned A100-80GB loads clean Qwen3-8B plus the adapter in local vLLM, instead of evaluating through the Tinker API.
  • The reward is an absolute solve rate over a fixed 500-board denominator (unevaluated boards count as unsolved), replacing V1's raw solved-count reward.
  • Anti-cheat hardened: prepare.py is SHA-256 hash-pinned against a trusted baked copy, verifier assets are root-locked before scoring, and the adapter is audited for symlinks, non-LoRA tensors, and size caps.
  • The agent budget grew from 8 to 20 hours, the timer moved from /app/.timer/ files to the sandbox-timer CLI, and both agent and verifier images are pinned by digest under the new harbor schema.

References

  • Frog Placement Game: The board generator, solver, and game engine are first-party, authored for this evaluation. The puzzle is a Queens-style constraint game (row/column/color/adjacency uniqueness), a family of folk logic puzzles; no third-party puzzle code or board data is vendored.
  • Axolotl (Apache-2.0): Version 0.18.0, installed into the image; the framework the agent uses for LoRA fine-tuning on the local GPU.
  • vLLM (Apache-2.0): Version 0.23.0; serves the verifier's base model plus the submitted LoRA during scoring, and backs the agent-visible infer.py smoke test.
  • Qwen3-8B (Apache-2.0): Weights and tokenizer baked into the image's Hugging Face cache at build time so training and inference run fully offline.
  • uv (Apache-2.0 OR MIT): Version 0.11.7; its binaries install the hash-pinned Python environment at image build.
  • NVIDIA CUDA base image (NVIDIA Deep Learning Container License / CUDA EULA): nvidia/cuda:12.5.1-devel-ubuntu24.04 supplies the CUDA toolkit for building GPU extensions; the CUDA image Dockerfiles are BSD-3-Clause and the OS layer is Ubuntu 24.04 under Canonical terms.
  • Supporting Python libraries: PyTorch (BSD-3-Clause, CUDA wheels), Hugging Face transformers/tokenizers/huggingface_hub (Apache-2.0), peft (Apache-2.0), the openai client (Apache-2.0), and NumPy (BSD), installed from PyPI at image build.