A Phone Joined 122B Inference

A Galaxy S25 autonomously downloaded its expert slice from the hub and computed one layer's experts every step of a live 122B decode. The output was correct.

prompt: "The capital of France is" → generated (with the phone in the loop): " Paris." — 8/8 tokens identical to the local run.

Measured · real 122B, phone computing layer-0

Correctness + TPS

8/8
tokens identical to local
4.01
TPS local (baseline)
3.13
TPS with phone
1.58 GB
autonomous download
A phone docked to a towering 122B model, printing tokens that spell Paris

Even with the phone computing layer-0's experts for every token, the generated tokens are exactly the local ones — the correct "Paris.". TPS drops to 3.13 from 4.01 — the phone-dispatch round trip (MI250 → tunnel → phone, ~100 ms/token) costs 22%. Throughput comes back with batching and replicas (M4).

The autonomous participation flow

Discover → reward-driven download → join the compute

1. Phone knows the hub (hub.kvasir-ai.net) — already holds its wallet node-token
2. GET /api/proxy/models/…/expert-shard?layers=0:1&experts=0:256
   # partially downloads its own expert slice (1.58 GB, WiFi)
3. linkcpp-expert-worker --serve
   # loads the slice (Adreno device, CPU backend) + waits for dispatch
4. MI250 backbone decodes the 122B → every token, layer-0 experts
   dispatch to the phone → experts return → combine → "Paris."
   (8/8 identical to local)
Verified vs remaining

The mechanism is complete; the in-app loop is productionization

  • Partial download (the expert-shard endpoint), worker serving, backbone dispatch, live 122B generation and TPS — all verified on the real device.
  • Correctness: with the phone participating, 8/8 tokens equal the local run, with the correct answer.
  • Remaining: the in-app autonomous loop (poll expert-demand → volunteer → download → serve → register) is Kotlin wiring — this demo drove the mechanism directly.
  • Transport: this demo used an SSH tunnel; production uses the 443 relay (already verified in the ring work).