Ochra Lab

Wikiracing

Cross Wikipedia from one article to another, choosing from hundreds of links at every step.

This page needs a TypeSafe key, and none is saved in this browser yet. Add your key. It stays in this browser, and every request runs on your own account.

0hops
$0.00000spent on Jev
$0.00same work, reasoning model
0links judged
0requests
0.0selapsed
0links invented

Jev gives every link on the page a probability. Up to 6 moves; backing out of a dead end uses one.

Hops

Pick two articles and press Race.

    How it works

    Code pulls every outbound link, filters and numbers them, then hands the list to Jev. Jev returns an index — never a title it typed itself. That is why the last meter reads zero: inventing a link that isn’t on the page is not a mistake it can make.

    Five questions for the price of one

    Each hop asks about the link, but also: how close is this page to the target, is the target one link away, is this a dead end, would going broader be smarter. All five are answered against the same state, in parallel, in a single request. Measured on a 240-link page, the four extra judgments cost +1.9% more tokens — $0.000008 — and did not add latency, because the expensive part is reading the links, and that happens once.

    The dead-end answer is not decoration. When the link Choice comes back spread thin and the page is called a dead end, the racer reverses out and bans the route. On Rubber duck it reads closeness unrelated and dead end 0.79 — correct, and it still finds the way through Patent, which reads close at 3.5 out of 4.

    Race another model

    The picker swaps the engine. Every model gets the same numbered candidate list and is asked for an index. Jev cannot return an index that is not on the list — choosing from a set is the only thing it does — whereas a language model writes a number and may write one that does not exist. The last meter counts it when that happens, which is why it is a measurement rather than a claim.

    A language model also gives one confidence for its own pick, not a probability for every link. So a Claude hop shows that single self-reported number and no bars for the links it passed over, and the reasoning-model comparison is left out, because that ratio is priced against Jev.

    Measured on Banana to Napoleon, first hop, same candidates: Jev picked Paris in 1,651ms, which links straight to the target and finishes in two hops. Haiku 4.5 picked Augustus in 5,220ms.

    What a call actually costs in time

    Measured from here, a call carrying 3 candidates takes 1,185ms and one carrying 240 takes 1,599ms. Latency is nearly flat against payload, which means roughly 1,100ms of every call is the round trip across the internet and not the model thinking. TypeSafe report sub-150ms from close to their datacentre; that is the same model, a shorter wire.

    That flat floor is the real argument for putting as much as possible in one request. If saying hello costs a second, then 240 candidates and five questions in a single call is close to free — which is exactly what the token measurements showed independently.

    See the wire

    Turn on Show requests and every hop that asked a model opens up: the exact endpoint, the state that was sent, all five questions with their instructions and criteria, and the raw typed answers with their probability distributions. On a Jev race nothing is reconstructed for display: it is the payload that went over the wire, untrimmed, except that each probability key is relabelled with the article its index stands for and the keys are listed from most to least likely. On a Claude race it is a summary of what the prompt carried and what came back; the prompt itself is not shown. A hop where the target was already linked shows no request, because code took it without asking.

    Hundreds of links, one question

    A Choice caps at 255 options, so longer pages split into heats that run in parallel and the winners race each other. The speculative questions ride on that final call only — they are about the page, so once per hop is enough.

    The model does the judging. Every threshold, ban and move limit is plain code.