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.