Skip to main content

pera banner

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

  1. Quickstart — first evaluation, reading results
  2. Manifests & contracts — declaring your policy honestly
  3. Stateful & chunked policiesmake() loops, replanning
  4. Verifying bundles — the evidence format
  5. Walkthrough: SmolVLA on LIBERO-Spatial — a complete worked example, from pip install to a score you can compare against our published row
  6. 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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pera_sdk-0.3.0.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pera_sdk-0.3.0-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

Details for the file pera_sdk-0.3.0.tar.gz.

File metadata

  • Download URL: pera_sdk-0.3.0.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for pera_sdk-0.3.0.tar.gz
Algorithm Hash digest
SHA256 42f5fe9e0cdb791a9a83b8cec6c48c546862b1427da858597f17a440855f94d7
MD5 290db1c65f708270d4029b5e3c93c2b6
BLAKE2b-256 fcc9bbf85a1bf824d13227b6f23226ae9822283f39080d71e78d3c11ef50ffb0

See more details on using hashes here.

File details

Details for the file pera_sdk-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: pera_sdk-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 29.4 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for pera_sdk-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b7ad5969aa5d7391d705f8e784fe5b80b3e921a8f8e29f0a56bc04d4b920e36
MD5 c497312cb758b30fa1cd51af8e39195e
BLAKE2b-256 d3448b17dee8633742c3cd9714b52b39671605480fadd89a481dfe3273effcda

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.1

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page