Why an engine makes a good answer key
A world model predicts what happens next. To grade one, you need to know what actually would happen next — exactly, as a distribution, not a sample. Euca can provide that because of the properties on the rest of these pages: the world is deterministic, its logic is rules-as-data with explicit outcome distributions, and it is forkable so the engine can compute the exact post-action next step without disturbing the run. That exact next-step distribution is the answer key. The benchmark built on this works like this: host a world, hide its ground truth behind a server, let an external model predict the next step, and score the prediction against the truth.Prequential regret, in nats
A contestant is scored by prequential log-loss: at each step it assigns a probability to the realized outcome, and accumulates−ln P̂(realized). The engine accumulates the same
quantity for its own true distribution, −ln P*(realized). The score is the difference:
Regret is reported in nats (natural-log units). Zero means a perfectly calibrated
world model; positive means the model spent more bits than the ground truth required.
Action-conditioned, by construction
A world model must answer “what happens next given this action” — not just “what happens next.” So the contestant is shown the pre-action observation and the action, and is scored against the engine’s exact post-action next-step distribution (the engine forks, applies the action, and reads the truth). A real action genuinely moves the odds, so a model that ignores the action scores strictly worse than one that uses it.How the harness ships today
The scoring machinery is an in-process Rust library (euca-online), not a hosted server —
it works directly against a running world:
- The engine reads its own exact next-step distribution with
peek(which equalsstep— see Query verbs). - To score an action-conditioned prediction, it forks the world, applies the action, and reads the true post-action distribution.
- A
RegretAccumulatoraccumulates prequential regret in nats against the realized outcome, step by step.
euca-online-py PyO3 binding
exposes peek / step / regret to Python, so an in-process contestant can be written in Python
with no network hop.
Planned: a truth-hiding HTTP boundary
The natural way to grade an external model is over an HTTP boundary that never returns the truth during a scored run: Euca hosts the world, the model connects from outside and only ever sees observations and a prediction schema, and there is deliberately no route that returns the truth during scoring.The intended client shape
Once shipped, a/bench server would launch locally for development or point at a hosted
endpoint:
A Rust
BenchClient and a packaged Python client (euca_bench) are planned alongside the
server above. Until they ship, grade in-process against the euca-online library, or use the
raw-HTTP form once the server lands. A "practice": true session is intended to return the
realized outcome and per-step regret while developing; a scored session would reveal neither.