Skip to content

Dataset readers

Generic LeRobot v3

The reader functions return Daft DataFrames directly:

from physical_ai_evals.datasets import (
    ALOHA,
    lerobot,
    lerobot_episodes,
    lerobot_tasks,
)

episodes = lerobot_episodes(ALOHA)
tasks = lerobot_tasks(ALOHA)
frames = lerobot(ALOHA, load_video_frames=False)

lerobot() decodes no video unless load_video_frames names a camera (or is True). lerobot_episodes() reads episode metadata only.

LeRobotSource binds a Hugging Face dataset to an exact revision:

from physical_ai_evals.datasets import LeRobotSource, lerobot_episodes

source = LeRobotSource("organization/dataset", "<40-character-commit>")
lerobot_episodes(source).show()

Daft 0.7.21 recursive Hugging Face globs lose the @revision component in listed paths. The wrapper therefore verifies that the repository head still equals the recorded commit before constructing the lazy read. It fails closed if the repository moved.

Recorded sources

Constant Dataset Revision
ALOHA lerobot/aloha_mobile_shrimp 6e828202059d2cc204b61ff968c232d202127a34
ABC_130K lerobot/abc_130k_v3_train 68651e4929d9fb00f798937b2d62617cab5c771d
ABC_130K_SMOKE lerobot/abc_130k_v3_smoke b342a0ff262195d49bae3eece6e3f40c6e1dbe15

LIBERO task plans

Each LIBERO constructor exposes its lazy executable episode plan directly:

import daft
from physical_ai_evals import libero_para, libero_pro

para = libero_para(task_ids=[3], episodes=1).rollouts
para.groupby("perturbation").agg(
    daft.col("bddl_path").count().alias("variants")
).show()

pro = libero_pro(
    "libero_spatial",
    perturbations=["lan"],
    episodes=1,
).rollouts
pro.select("task_key", "bddl_path", "init_path").show()

The constructors use Daft glob, regex, join, download, and expression nodes to turn the benchmark files into rows that the LIBERO runtime can execute.