Metadata-Version: 2.5
Name: abstract-robots
Version: 0.1.0
Summary: The `abstract` command and the robot station: Abstract's robot models on your robot, several at once.
License-Expression: Apache-2.0
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: abstract-client==0.1.0
Requires-Dist: tomli>=1.1; python_version < '3.11'
Description-Content-Type: text/markdown

# abstract-robots

The `abstract` command and the robot station, on Abstract's robot API. It is built on
`abstract-client`, the SDK (`import atoms`), which is all a robot with its own stack needs,
and `abstract-atoms` installs both: Dream Labs' `dreamlabs`, `dreamlabs-client` and `dream-robots`.

```sh
uv tool install abstract-atoms  # the `abstract` command, on your PATH
```

```text
abstract login | status | token | logout     your key, saved for this machine (readable by you alone)
abstract models                              robot models you can run, and what an hour of motion costs
abstract robot run --model A [--model B ...] --task "..." --robot my_robot:Arms [--dry-run] [--view]
                                             models on your robot: the first drives, the others compare
abstract datasets upload | list              your LeRobot datasets
abstract finetune create | list | get | events | cancel | models | download
abstract env init | check | eval | push | upload | grades     your own simulation environment
abstract skill [install]                     the skill that teaches an agent the API
```

Every command has `--help` with examples and `--json` where it prints data (data on stdout,
progress on stderr), and exits 0 done, 1 failed (one line says why and what to run), 2 wrong
usage, 130 stopped. Spending asks first (`finetune create` shows its quote; `--yes` for scripts,
and it never asks without a terminal), and every file moved is checked by sha256.

`abstract robot` is the robot station, with Dream Labs' `dreamcli robot` commands for any number
of models. `robot run` drives your robot through a driver class of yours with two methods:
`observe()` returns the frames (one JPEG per camera) and both arms' state, and
`command(left, right)` sends one row to each arm. The first `--model` drives the arms; every other
one answers the same observations, and each prints its steps, rows, round trip and first pose side
by side. `--view` serves a page on this machine that draws every model's planned grasp-site paths
live, one colour each. `--dry-run` commands no arm, `--robot still` is a stand-in with no
hardware, and it runs until Ctrl-C or `--chunks`: each chunk is billed. A station config
(`station.toml` in `~/.abstract/station`, or `--config`) holds the task, models, robot and chunks;
flags override it.

Python 3.10 or later. It depends on `abstract-client` at its own version, since the two are
released together, and on Python 3.10 on `tomli`. Tests: `pytest apps/atoms`.
