Skip to content

Submit a Job

The simplest useful armnet job is a smoke test that connects to a robot, reads one observation, optionally performs a small movement, and returns a structured result.

Build and Push an Image

from armnet_client import Image

image = Image.build(
    dockerfile="Dockerfile",
    context_dir=".",
    name="my-so101-smoke",
).push()

Image.build() uses a content hash so unchanged inputs reuse the local Docker cache. Image.push() uploads the image to the platform registry using short-lived credentials issued by the orchestrator.

Execute

from armnet_client import execute

result = execute(
    image=image,
    embodiment="lerobot/so-101",
    task="assemble_block_tower",
    args={"calibrate": False},
    secrets={"HF_TOKEN": "huggingface-token"},
    timeout_seconds=1200,
)

result.raise_for_status()
print(result.return_value)

Cell Selection

embodiment and task select the kind of managed robot cell that can run your job.

Examples:

  • embodiment="lerobot/so-101"
  • embodiment="lerobot/arx5"
  • task="assemble_block_tower"

The orchestrator routes your job to cells advertising the matching pair. The set of valid embodiments and tasks is maintained server-side (in the orchestrator database), not hard-coded in the SDK; a job submitted with an unknown embodiment or task is rejected with HTTP 400. Fetch the currently supported values from GET /embodiments and GET /tasks.

Logs and Cancellation

By default, execute() streams container stdout/stderr back to your terminal. If the log connection drops and detach=False, the platform requests that the cell gracefully stops the job.

Use:

execute(..., detach=True)

for jobs that should keep running after your client disconnects.