agi.diy

Models · WFM (world foundation model, Cosmos3-Edge post-trained) · tic-tac-toe · vision-driven

agi-wfm/so101-ttt

checking availability…

Our checkpoint cagataydev/agi-wfm-so101-ttt (weights private for now), for the SO-101 arm. It answers one observation with the next 32 actions. It is not a general-purpose controller; the task sentence is passed to the model, but only the task it was trained on is expected to work. The older id wfm/so101-ttt still works and leases the same row.

tic-tac-toe · vision-driven.cell not yet selectable by language. The numbers below are held-out offline scores, not a success rate on a real arm — what the service can and cannot tell you.

Price

per call
$0.0032 · 32 tokens
per action
$0.0001
billed
every returned action, whether or not your robot plays it

What you send

observation.state [6]
shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper · normalized: arm -100..100, gripper 0..100
observation.images.front [480, 640, 3]
front camera, RGB uint8 (JPEG on the wire)
observation.images.wrist [480, 640, 3]
wrist camera, RGB uint8 (JPEG on the wire)
task text
passed to the policy

Read the camera names out of your lease’s features (or the wire’s hello) rather than this table: a slot answers with its own.

What comes back

32 actions × 6 joints, to be played at 15 Hz — 2.13 s of motion per call.

Units before motion.Values are LeRobot normalized (arm −100…100, gripper 0…100), not degrees — whatever the semantics label says. That label echoes whichever runner answered your lease, so both values are in circulation: never branch on it (units, explained). LeRobot’s so101_follower defaults to degrees: run it with --robot.use_degrees=false. What the arm does if the connection drops.

Held out

ours
14.17 chunk / 6.2 first step

14.17 over the 2.13 s it predicts (seed 0, 4 denoise steps, 263 held-out windows) against 19.80 for repeating the last action — 1.40x; across seeds it varies by 1.03. It picks and places from vision; the task string does not yet choose the cell..

RMSE over 2.133 s of motion (32 actions at 15 Hz) / first step, so101-normalized-v1 units — every gate below is over the same 2.133 s on the same 263 windows · cagataydev/so101-tic-tac-toe-norm (apache-2.0), the LAST episode of every task held out (19,29,…,209), every 15th frame · warm start from runs/20261025T092425Z-train (the flagship's svla post-training), 1,000 iterations ≈ 76k samples ≈ 1.9 epochs of 190 episodes, lr 3e-5, one H200, 181 min, $15.11. Lower is closer to the recorded human demonstration; it is not a task success rate.

The chunk here is its own 32 steps — 2.13 s of motion at 15 Hz. Do not read it against another model’s figure unless both the step count and the seconds of motion match: drift grows with time, so a chunk covering less of it is an easier average.

The deadline is not this model’s chunk. With agi rollout the arm asks for the next chunk when 0.75 s of motion is left in its queue (LeRobot’s own default is 0.5 s), so a round trip has roughly that long however long the chunk is — 2.13 s here only sets how often you pay for one. Answer later than that and the arm holds its last position targets until the chunk arrives; it does not stop. Your own round trip is the figure the dashboard and /play print after a call.

Try it

One billed call with synthetic inputs ($0.0032). No robot moves.

Code
pip install agi-diy
agi login
agi run agi-wfm/so101-ttt --probe -n 1

Needs Python 3.12 — LeRobot is installed on first use, requires 3.12 or later and does not run on 3.14 yet.

Or run a test call from the dashboard, or drive the simulated SO-101.

Licences and data

Checkpointcagataydev/agi-wfm-so101-ttt · weights privateOpenMDW-1.1 (base nvidia/Cosmos3-Edge)
Base modelnvidia/Cosmos3-EdgeOpenMDW-1.1
Training datacagataydev/so101-tic-tac-toe-norm (apache-2.0), the LAST episode of every task held out (19,29,…,209), every 15th frameas declared on the Hub

Licences as declared on the Hub. A lease says which of these answered it — pool and checkpoint on the session. Policies, explained.