A small model with one job

Echo learns to play Snake like Jev.

I trained Echo on Jev’s Snake decisions. On held-out positions, it chooses the same move 93% of the time.

An Echo call took 0.20 ms in my benchmark. Jev was about 800 times slower.

I wanted to see whether using Echo to search ahead would improve its play, even though it had learned to make many of the same mistakes.

Similar scores

7.5 / 7.9Jev / Echo · unseen boards

Similar decisions

93%same top move on held-out positions

A local specialist

On your laptopno cloud or per-call charges for inference

What if Echo looks ahead?

Within Jev’s time budget, Echo can look roughly seven or eight moves ahead before choosing.

Average score20 unseen boards
Jev
7.5
Echo
7.9

Same test seeds, same board information, same game rules. These 20 boards were untouched by training or tuning. Evaluation details ↓

Why not search with Jev?

The same search would need about 361 Jev calls per move. At the measured latency and call cost, that is an estimated 6.1 hours and $2.76 per game.

A general model can help you build a specialist for a decision you repeat. Here, I spent the saved time on search.

Try the same board.

Jev and Echo scored 5 on this one. Echo + search scored 41. See how far you get.

Seed 0 · 10 × 10
Recorded scores on this seed
Jev5
Echo5
Echo + search41

From Jev’s answers to Echo’s decisions.

The input

One board, two representations.

Jev receives the board as text, head and food positions, and an instruction. Echo receives three grids: body, head and food. Both return a preference for each move.

The training

Learn by watching, and doing.

Echo learned Jev’s full move probabilities. Then it played for itself, with Jev labelling the positions it reached. I retrained on those positions twice.

Jev’s probabilities→Train Echo→Let Echo play→Jev labels new positions

How a future changes a move.

Search simulates every offered move and combines its consequences with Echo’s preferences. Follow one decision to see the values return through the tree.

Watch the video →

Run the experiment yourself.

38,199labelled positions
$0.77Jev calls for training data
~1 minutelaptop training time
What was held out, and what was measured?

The score comparison uses seeds 100–119, untouched by training or tuning. Each game runs until a crash or the configured 2,000-move limit. All players receive the same board information, represented differently for Jev and Echo.

Scores are averages over 20 games. Timing is the median across games of each game's median move time, measured one player at a time on an Apple M4 CPU. Jev includes the API request; Echo and Echo + search run locally. The near-equal 7.5 and 7.9 means do not establish exact equivalence.

Echo matched Jev’s top move 93% of the time in the held-out imitation evaluation. That is a different measurement from game score or overlap between full probability distributions.

What does the search actually do?

It expands every offered move breadth-first and evaluates the living boards at each level in one Echo batch. A leaf is valued by food gained, or −(score + 10) on death. Each move is weighted by Echo’s preference multiplied by exp(child value), then normalized. The weighted mean returns to the parent, and the root chooses the highest-weight move.

Depth adapts to the time budget. Simulated food uses fresh randomness rather than the real game’s future random sequence. The Jev search time and cost figures are estimates for comparable work, not a completed Jev search benchmark.

Can I run it myself?

The repository includes the training scripts, the trained Echo model (87 KB), the held-out results, the evaluation commands and the game. The current implementation uses MLX on an Apple Silicon Mac. Recreating teacher labels requires access to Jev; running the trained Echo model locally does not make cloud calls.

Reproduction commands on GitHub ↗