pera
The benchmarking platform for physical intelligence. This is its open SDK.
pera evaluates robot policies (VLAs) on canonical, versioned simulation protocols: same tasks, same seeds, same rules for every model. Your model stays on your GPU; the benchmark runs on pera's servers over a WebSocket Environment API. Every published score is anchored to the model authors' own harness run on the same machine, and links to per-episode videos, action traces, labeled failures, and a checksummed evidence bundle anyone can verify.
Models evaluated so far include OpenVLA-OFT, GR00T N1.6, π0.5, X-VLA, SmolVLA, Octo, MolmoAct2, and PulseVLA across the four LIBERO suites and SimplerEnv WidowX.
Install
pip install pera-sdk
Python ≥ 3.10. Runtime dependencies are only numpy and websockets — no
framework, validation stack, HTTP client, or computer-vision package to fight
your model's environment.
Sixty seconds to a score
import pera
MANIFEST = {
"schema_version": "pera.policy.v1",
"name": "my-policy",
"observation": {
"cameras": ({"role": "primary", "resolution": (256, 256), "required": True},),
"language": True,
},
"control_frequency_hz": {"trained": 20.0, "accepts": (10.0, 30.0)},
"action": {
"kind": "chunk", "horizon": 8,
"translation": {"format": "delta", "frame": "base"},
"rotation": {"format": "euler_xyz"},
"gripper": {"format": "continuous_neg1_1", "close": "high"},
},
}
def act(obs, task):
# obs["images"]["primary"]: HxWx3 uint8 (upright), obs["state"]: np.ndarray | None
return my_model(obs, task.instruction) # -> (horizon, 7) action chunk
out = pera.evaluate(act, "libero-spatial@1", url=PERA_URL, api_key=KEY,
policy_manifest=MANIFEST,
tasks=[0], episodes_per_task=2) # smoke-test scale
print(out["episodes"], "->", out["run_id"])
Two episodes cost a minute and catch convention bugs before they cost an
afternoon; when the videos look right, widen to the full protocol
(tasks=list(range(10)), episodes_per_task=50 for the LIBERO suites).
No GPU is needed on your side until a real model enters the loop — the simulator runs server-side, so you can prove your whole integration from a laptop.
Stateful policy (internal history, action queues, per-episode reset)? Drive the
loop yourself with pera.make() — see
docs/03-stateful-and-chunked-policies.md.
The manifest is the contract
You declare what your policy consumes and emits — cameras, state format and rotation convention, action space, control rate. The platform resolves your manifest against the benchmark's:
- direct — formats match, nothing touches your data;
- adapted — explicit, recorded transforms (e.g. a resize), listed in the result bundle;
- refused — incompatible, before any simulation runs or credits burn.
A mismatched pair can never silently produce garbage — that's the design goal.
The convention bugs that inspired it (quaternion double-cover at θ=π, a wrist
camera served in the wrong frame, upside-down training images) are documented in
docs/02-manifests-and-contracts.md,
along with a checklist for your own integration.
Evidence you can check
Every evaluation exports a bundle: seeds, per-step action transcripts, per-episode outcomes, failure videos, and per-file checksums under a root hash. The bundle format is an open spec. Verify any published bundle:
pera verify path/to/bundle
See docs/04-verifying-bundles.md. The spec
itself is published in spec/ — bundle format, wire protocol, format
registry, manifest schemas and every launch protocol.
Tutorials — runnable
tutorials/ has three notebooks plus the actual clients behind
every published leaderboard row:
- 01 · Quickstart — manifest → evaluation → results
- 02 · Explore & verify bundles — fully offline: dissect a real vendored evidence bundle, tamper with it, watch verification fail, play the episode video
- 03 · Stateful policy loops — the
make()pattern for models with history/action queues tutorials/*_client.py— the production integrations (OFT, GR00T, Octo, SmolVLA, π0.5, X-VLA, PulseVLA), each documenting the convention that mattered
New here? Start with ONBOARDING.md — the seven-step path from install to a score you can trust.
Reference docs
- Quickstart — first evaluation, reading results
- Manifests & contracts — declaring your policy honestly
- Stateful & chunked policies —
make()loops, replanning - Verifying bundles — the evidence format
- Walkthrough: SmolVLA on LIBERO-Spatial — a complete worked example, from
pip installto a score you can compare against our published row - Walkthrough: π0-FAST on LIBERO-Spatial — a full 500-episode run, same-machine reference anchor, and evidence-led investigation
Status & access
The hosted platform is in early access with waitlisted API keys. The SDK,
bundle spec, and these docs are Apache-2.0. The evaluation engine itself is not
open source — published scores are verified precisely because pera runs them;
the open spec plus pera verify is how you audit us.
pera is a verapulse project.
Metadata
Release files for pera-sdk 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pera_sdk-0.3.0.tar.gz | 1.0 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pera_sdk-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / pera_sdk-0.3.0.tar.gz
| Download URL | pera_sdk-0.3.0.tar.gz |
|---|---|
| Size | 1.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42f5fe9e0cdb791a9a83b8cec6c48c546862b1427da858597f17a440855f94d7
|
|
BLAKE2b-256 checksum How to use checksums |
fcc9bbf85a1bf824d13227b6f23226ae9822283f39080d71e78d3c11ef50ffb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / pera_sdk-0.3.0-py3-none-any.whl
| Download URL | pera_sdk-0.3.0-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4b7ad5969aa5d7391d705f8e784fe5b80b3e921a8f8e29f0a56bc04d4b920e36
|
|
BLAKE2b-256 checksum How to use checksums |
d3448b17dee8633742c3cd9714b52b39671605480fadd89a481dfe3273effcda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for pera-sdk 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.