Jev Pong
Pong where the ball moves one step per model decision. Slow model, slow ball.
Recorded run · London via Vercel AI Gateway · same serve, same rules
replay0.0 sWhat counts as one decision
Every lane gets the same serve, the same rules, and the same question.
The state the model is sent, in full — numbers only, 127 bytes:
{"court":{"w":160,"h":100},"ball":{"x":80,"y":50,"vx":26.7,"vy":6.1},"paddle":{"y":50,"h":20},"interceptY":68.3,"dir":"toward"}The question, in the words every lane is given:
You control the right paddle in a game of Pong. The state is a JSON object of numbers: the court size, the ball position and velocity, your paddle (paddle.y is its CENTRE, paddle.h its height), interceptY, and dir. y = 0 is the top edge and y grows downward, so "up" DECREASES y and "down" INCREASES y. interceptY is the y value where the ball will cross your paddle plane after any wall bounces; it is null when the ball is moving away from you. Move so that paddle.y covers interceptY. Treat the paddle as already covering it when paddle.y is within 5 units of interceptY. Answer with one move only.
Three answers: up · down · stay.
Jev answers through the AI SDK experimental_evaluate API. The LLM lanes get the identical state and the identical words through structured output at temperature 0 with reasoning off, and there are no retries for anyone.
The number on a lane is the round trip of that one call, timed on the server, and nothing else.