Same snake. Five brains.
One keeps up and keeps scoring.
A game loop gives every decision a few milliseconds: at 60 frames a second, a move must be ready in 16.7 ms. Five decision makers play the same games at the same speed. A snake whose answer has not arrived yet keeps going straight. Every lane below is a real recording: real calls, real measured latency, replayed here move for move.
Loading the recordings…
Faster games, fewer points. Except one.
Average food eaten per game, over 8 recorded games at each speed. "No clock" is the same games with the game waiting for every answer. The local models score the same at one or two moves a second; the LLM loses most of its score even at one move a second. As the clock speeds up, every lane that waits for its answer starts moving blind. Laya scores almost nothing even with no clock, so its line shows how it plays, not its speed.
The frame budget.
Median time to decide one move, on a log scale, against how long one frame lasts at common game speeds. Anything to the right of a line misses that frame.
Size, memory, hardware.
Measured while each lane played. Local models ran in llama.cpp on the Apple M5 Pro's 16-core GPU; shad0w on one of its CPU cores; the hosted LLM on someone else's hardware.
Now play against it.
The snake race above was recorded on an Apple M5 Pro. To feel the speed yourself, play Pong against shad0w: it runs in your browser and decides every frame in microseconds.
Watch, learn, prove, then race.
Put shad0w under your own decisions: Getting started · Playground · GitHub