{
  "source": "https://api.agi.diy/docs/concepts#glossary",
  "terms": [
    {
      "id": "policy",
      "term": "policy",
      "api": null,
      "definition": "A trained model that maps what the robot sees and feels to what it should do next. agi.diy serves two today: ACT and SmolVLA, both for SO-101.",
      "avoid": [
        "brain",
        "AI agent",
        "hosted brain"
      ],
      "url": "https://api.agi.diy/docs/concepts#policy"
    },
    {
      "id": "model",
      "term": "model",
      "api": null,
      "definition": "A policy family bound to one robot, named family/robot, e.g. act/so101. The id you pass to POST /v1/sessions.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#model"
    },
    {
      "id": "checkpoint",
      "term": "checkpoint",
      "api": null,
      "definition": "The exact trained weights behind a model, pinned by Hub repo and revision. Task-specific: each was trained for one kind of task in one kind of scene.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#checkpoint"
    },
    {
      "id": "vla",
      "term": "VLA",
      "api": null,
      "definition": "Vision-language-action policy: images, joint state and a task sentence in, actions out. SmolVLA is one. It was fine-tuned for one task, so a task sentence is not general instruction following.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#vla"
    },
    {
      "id": "wfm",
      "term": "world foundation model",
      "api": "WFM",
      "definition": "A model that predicts how a scene will evolve. Platform direction only: no WFM endpoint is served today.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#wfm"
    },
    {
      "id": "observation",
      "term": "observation",
      "api": null,
      "definition": "One snapshot sent by the client: six joint values, two camera images and, for SmolVLA, the task text.",
      "avoid": [
        "frame (for the whole snapshot)",
        "input packet"
      ],
      "url": "https://api.agi.diy/docs/concepts#observation"
    },
    {
      "id": "feature",
      "term": "feature",
      "api": "observation.state, observation.images.<camera>",
      "definition": "One named field of an observation, with a fixed shape and dtype, advertised in the lease.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#feature"
    },
    {
      "id": "camera",
      "term": "camera name",
      "api": "top · front · wrist",
      "definition": "The short name of an image feature. ACT expects top + wrist; SmolVLA expects front + wrist; each 640×480 RGB.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#camera"
    },
    {
      "id": "action",
      "term": "action",
      "api": null,
      "definition": "One returned time step: six target joint values for one tick of the control loop. The billable unit.",
      "avoid": [
        "move (for one action)",
        "step (alone)",
        "one joint"
      ],
      "url": "https://api.agi.diy/docs/concepts#action"
    },
    {
      "id": "chunk",
      "term": "chunk",
      "api": "action chunk",
      "definition": "The sequence of actions one call returns: n rows × 6 joints, float32. The robot plays it back at the model's fps.",
      "avoid": [
        "batch (for a chunk)",
        "trajectory"
      ],
      "url": "https://api.agi.diy/docs/concepts#chunk"
    },
    {
      "id": "open-loop",
      "term": "open loop",
      "api": null,
      "definition": "Playing actions without new observations reaching the policy: what the arm does with the rest of its queue when the link drops (at most one chunk).",
      "avoid": [
        "autonomous (for this)"
      ],
      "url": "https://api.agi.diy/docs/concepts#open-loop"
    },
    {
      "id": "starvation-grace",
      "term": "starvation grace",
      "api": "--inference.action_starvation_grace_s",
      "definition": "How long LeRobot holds the arm on an empty queue before it ends the run: 3 s with agi rollout, 1 s by LeRobot's default.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#starvation-grace"
    },
    {
      "id": "rename-map",
      "term": "rename map",
      "api": "--rename_map",
      "definition": "LeRobot's mapping from your camera names to the model's (`observation.images.<yours>` → `observation.images.<model's>`). agi rollout builds it; check the `cameras:` line it prints.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#rename-map"
    },
    {
      "id": "horizon",
      "term": "horizon",
      "api": "action_horizon",
      "definition": "Rows per chunk: ACT 100, SmolVLA 50. Fixed at lease time.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#horizon"
    },
    {
      "id": "fps",
      "term": "fps",
      "api": null,
      "definition": "The rate the chunk is meant to be executed at: 30 actions per second, so 100 rows ≈ 3.3 s of motion and 50 ≈ 1.7 s. Not a request rate.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#fps"
    },
    {
      "id": "call",
      "term": "call",
      "api": null,
      "definition": "One observation sent, one chunk returned.",
      "avoid": [
        "request (in billing copy)",
        "inference run (for one call)"
      ],
      "url": "https://api.agi.diy/docs/concepts#call"
    },
    {
      "id": "session",
      "term": "session",
      "api": "ses_…",
      "definition": "One lease on one warm policy process: groups calls, carries the bill and the trace.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#session"
    },
    {
      "id": "lease",
      "term": "lease",
      "api": null,
      "definition": "What POST /v1/sessions does: reserves a ready slot for you until the session ends.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#lease"
    },
    {
      "id": "slot",
      "term": "slot",
      "api": null,
      "definition": "One warm policy process on a runner. A model is Ready when it has a free slot, Busy when all are leased.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#slot"
    },
    {
      "id": "runner",
      "term": "runner",
      "api": null,
      "definition": "The GPU machine that hosts slots and reports them every second (today: one GPU runner).",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#runner"
    },
    {
      "id": "deployment",
      "term": "deployment name",
      "api": "d_…",
      "definition": "The private address of your slot, handed out in the lease and retired when the session ends.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#deployment"
    },
    {
      "id": "custom-checkpoint",
      "term": "custom checkpoint",
      "api": "hf:<org>/<repo>[@<revision>]",
      "definition": "A checkpoint of your own on the Hugging Face Hub, leased by passing it as the model. The hf: prefix marks it as yours; act, smolvla or diffusion, safetensors only, at most 3 GB. Validated before anything is charged, and the commit is pinned.",
      "avoid": [
        "your model (for one of ours)",
        "upload (nothing is uploaded — we read the Hub)"
      ],
      "url": "https://api.agi.diy/docs/concepts#custom-checkpoint"
    },
    {
      "id": "dynamic-deployment",
      "term": "dynamic deployment",
      "api": null,
      "definition": "The slot a custom checkpoint gets: brought up for your session rather than kept warm in the pool, which is why it starts warming and why there is a per-account limit on live ones.",
      "avoid": [
        "instance (for a dynamic deployment)",
        "container (for a dynamic deployment)"
      ],
      "url": "https://api.agi.diy/docs/concepts#dynamic-deployment"
    },
    {
      "id": "tier",
      "term": "tier",
      "api": "tier",
      "definition": "Which capacity a model is served from: default (our act and smolvla), flagship (larger models, evaluated before they are listed) or custom (your own checkpoint). It describes where the slot comes from, not how good the policy is.",
      "avoid": [
        "plan (for a tier)",
        "subscription (there is none — you pay per action)"
      ],
      "url": "https://api.agi.diy/docs/concepts#tier"
    },
    {
      "id": "token",
      "term": "token",
      "api": null,
      "definition": "Billing unit. 1 token = 1 returned action = $0.0001. Not an LLM text token.",
      "avoid": [
        "credit (for one token)"
      ],
      "url": "https://api.agi.diy/docs/concepts#token"
    },
    {
      "id": "usage-credit",
      "term": "usage credit",
      "api": null,
      "definition": "Your token balance shown in dollars: 200,000 tokens = $20, granted once to new accounts. Not cash, not withdrawable. A price may be written \"$0.01 credit equivalent\" (accepted, used in docs and dashboard).",
      "avoid": [
        "free money",
        "balance (alone, without tokens)"
      ],
      "url": "https://api.agi.diy/docs/concepts#usage-credit"
    },
    {
      "id": "units",
      "term": "normalized units",
      "api": null,
      "definition": "LeRobot's default joint scale: arm joints −100…100 over the calibrated range, gripper 0…100. Both live checkpoints use it, although the session label says degrees. On a real arm this means LeRobot `use_degrees=false` (its current default is true).",
      "avoid": [
        "degrees (for these checkpoints)"
      ],
      "url": "https://api.agi.diy/docs/concepts#units"
    },
    {
      "id": "semantics",
      "term": "semantics",
      "api": "so101-degrees-gripper-percent-v1",
      "definition": "The units label carried in the lease. Known mismatch: today it says degrees; the data is normalized units.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#semantics"
    },
    {
      "id": "server-time",
      "term": "policy time",
      "api": "trace server_ms.policy",
      "definition": "How long the model's forward pass took for one call.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#server-time"
    },
    {
      "id": "on-runner",
      "term": "time on the runner",
      "api": "trace rtt_ms",
      "definition": "From the observation reaching the runner to the chunk leaving it: policy time plus decoding and post-processing. Excludes your network. The trace's rtt_ms is this number.",
      "avoid": [
        "round trip (for trace rtt_ms)"
      ],
      "url": "https://api.agi.diy/docs/concepts#on-runner"
    },
    {
      "id": "rtt",
      "term": "round trip",
      "api": null,
      "definition": "Time from sending an observation to holding the chunk, as your client measures it: time on the runner plus the network both ways. Not recorded in the trace.",
      "avoid": [
        "latency (unqualified)"
      ],
      "url": "https://api.agi.diy/docs/concepts#rtt"
    },
    {
      "id": "trace",
      "term": "trace",
      "api": null,
      "definition": "The recording of a session: every observation (state, task, camera frames) and every returned chunk, with timing.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#trace"
    },
    {
      "id": "playback",
      "term": "playback",
      "api": null,
      "definition": "Viewing a recorded trace. Free; nothing runs.",
      "avoid": [],
      "url": "https://api.agi.diy/docs/concepts#playback"
    },
    {
      "id": "replay",
      "term": "run inference again",
      "api": "POST /v1/sessions/:id/replay",
      "definition": "Feeds a trace's recorded observations to a policy in a new session. Billed like any session; no robot moves; output may differ.",
      "avoid": [
        "replay (in UI copy, unqualified)",
        "re-run for free"
      ],
      "url": "https://api.agi.diy/docs/concepts#replay"
    },
    {
      "id": "relay",
      "term": "public relay",
      "api": null,
      "definition": "The TCP tunnel that puts the runner's Zenoh endpoint on the public internet; the lease names it (tcp/<host>:<port>) and it may change mid-session, so re-read the session instead of hard-coding it.",
      "avoid": [
        "our servers",
        "zenoh.api.agi.diy (as the endpoint to connect to — the lease names a tcp/ relay)"
      ],
      "url": "https://api.agi.diy/docs/concepts#relay"
    },
    {
      "id": "wire",
      "term": "browser wire",
      "api": "agi-wire/1",
      "definition": "The WebSocket data plane a page uses instead of Zenoh: signed URL from GET /v1/sessions/:id/wire, JPEG observations in, chunks out, billed identically. Open within 120 s, 8 MB a message, an observation at least every 120 s.",
      "avoid": [
        "websocket API",
        "streaming API"
      ],
      "url": "https://api.agi.diy/docs/concepts#wire"
    },
    {
      "id": "simulation",
      "term": "simulation",
      "api": null,
      "definition": "The browser SO-101 at /play: MuJoCo physics, rendered camera images, real policy calls. Simulated inputs, live policy output.",
      "avoid": [
        "demo (for /play)",
        "real camera (for /play's rendered images)"
      ],
      "url": "https://api.agi.diy/docs/concepts#simulation"
    },
    {
      "id": "probe",
      "term": "test call",
      "api": "agi run <model> --probe -n 1",
      "definition": "One billed call with synthetic inputs (black images, synthetic state). Tests the connection and inference, not task success.",
      "avoid": [
        "demo (for a billed test call)",
        "try the robot"
      ],
      "url": "https://api.agi.diy/docs/concepts#probe"
    }
  ],
  "session_states": [
    "warming",
    "leased",
    "active",
    "ended"
  ],
  "end_reasons": {
    "client_done": "you closed it (DELETE /v1/sessions/:id, or the SDK on exit)",
    "expired": "ttl_s ran out (default 600 s, allowed 60–3600 s)",
    "credits": "usage credit reached zero",
    "never_connected": "no client attached within 60 s of the lease",
    "runner_lost": "the runner stopped reporting the slot",
    "replay_failed": "a run-inference-again feeder failed",
    "load_failed": "the runner could not load the custom hf:<org>/<repo> checkpoint (or it took longer than 300 s)"
  },
  "say_instead": [
    {
      "wrong": "free tokens",
      "right": "usage credit"
    },
    {
      "wrong": "free money",
      "right": "usage credit"
    },
    {
      "wrong": "robot movement per token",
      "right": "1 token = 1 returned action"
    },
    {
      "wrong": "tokens per joint",
      "right": "1 token = 1 returned action (six joint values)"
    },
    {
      "wrong": "steps per second",
      "right": "actions per second"
    },
    {
      "wrong": "free credit",
      "right": "usage credit"
    },
    {
      "wrong": "ms round trip",
      "right": "ms on the runner (trace rtt_ms is runner-side; only your client measures a round trip)"
    },
    {
      "wrong": "round trip as the client",
      "right": "time on the runner (trace rtt_ms)"
    },
    {
      "wrong": "Replay inference",
      "right": "Run inference again"
    },
    {
      "wrong": "hosted brain",
      "right": "robot policies, served over an API"
    },
    {
      "wrong": "open-weight VLA policies",
      "right": "ACT and SmolVLA policies (ACT is not a VLA)"
    },
    {
      "wrong": "Round trip is measured by the client",
      "right": "time on the runner (the loop shows trace rtt_ms; no client round trip is recorded)"
    }
  ],
  "units": {
    "state_and_action": "normalized",
    "arm_joints": {
      "min": -100,
      "max": 100,
      "joints": [
        "shoulder_pan",
        "shoulder_lift",
        "elbow_flex",
        "wrist_flex",
        "wrist_roll"
      ]
    },
    "gripper": {
      "min": 0,
      "max": 100
    },
    "degrees": false,
    "semantics_label": "so101-degrees-gripper-percent-v1",
    "semantics_label_is_accurate": false,
    "semantics_label_by_surface": {
      "GET /v1/models": "so101-degrees-gripper-percent-v1",
      "MCP models tool": "so101-degrees-gripper-percent-v1",
      "browser wire hello": "so101-normalized-v1",
      "POST /v1/sessions": "whatever the runner serving the lease reports — both labels observed on 2026-10-25/26",
      "accurate": "so101-normalized-v1"
    },
    "note": "The lease's semantics label says degrees; both live checkpoints are LeRobot normalized values. Pass --robot.use_degrees=false to a real SO-101.",
    "url": "https://api.agi.diy/docs/concepts#normalized-units"
  }
}