Skip to content

hylo-env-libero

Hylo LIBERO environment adapter (runs out of process in its own venv) and LIBERO benchmarks

Repository hylo-bench, adapters/hylo-env-libero. Licence: Apache-2.0. Depends on: hylo-core.

Registered entry points
Group Name Object
benchmarks libero hylo.envs.libero.suites:libero_benchmark
envs libero hylo.envs.libero.env:LiberoEnv
Module Summary
hylo.envs.libero LIBERO (Liu et al. 2023) for Hylo: environment adapter and benchmark suites
hylo.envs.libero.env LIBERO Environment adapter. Runs inside the simulator venv (hf-libero, robosuite 1.4) behind an
hylo.envs.libero.suites LIBERO benchmarks as Hylo Benchmarks, built from a bundled task index (suites.json) so the

hylo.envs.libero

LIBERO (Liu et al. 2023) for Hylo: environment adapter and benchmark suites.

META module-attribute

META = {'contracts': {'envs': 'hylo.env/v0.1', 'benchmarks': 'hylo.benchmark/v0.1'}, 'maturity': 'implemented', 'plugins': {'envs/libero': {'notes': 'LIBERO (MIT); assets from lerobot/libero-assets'}, 'benchmarks/libero': {'notes': 'LIBERO (MIT)'}}}

hylo.envs.libero.env

LIBERO Environment adapter. Runs inside the simulator venv (hf-libero, robosuite 1.4) behind an EnvServer; the main process never imports LIBERO.

Conventions match LeRobot's LIBERO integration so LeRobot-trained policies see what they saw in training: - images: agentview and wrist cameras, rotated 180 degrees (robosuite renders them upside down); - state: eef position (3), eef axis-angle from the xyzw quaternion (3), gripper qpos (2); - reset: load the task's stored init state (index = seed % 50), then 10 no-op steps; - action: 7-D OSC delta pose in [-1, 1], last dim gripper (-1 open, +1 close); - success: LIBERO's BDDL goal predicate (env.check_success()); the episode ends on success.

NOOP module-attribute

NOOP = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]

LiberoEnv

LiberoEnv(image_size: int = 256, num_steps_wait: int = 10)

spec

spec() -> EnvSpec

reset

reset(task: TaskInstance) -> Observation

step

step(action: Action) -> StepResult

privileged_state

privileged_state() -> dict

render

render(camera: str = 'agentview', width: int = 256, height: int = 256) -> np.ndarray

close

close() -> None

quat2axisangle

quat2axisangle(q: ndarray) -> np.ndarray

xyzw quaternion -> axis-angle (same formula as robosuite / LeRobot's LiberoProcessorStep).

hylo.envs.libero.suites

LIBERO benchmarks as Hylo Benchmarks, built from a bundled task index (suites.json) so the main process can enumerate tasks without importing LIBERO.

Seeds index LIBERO's 50 stored init states per task (seed % 50). The official protocol evaluates all 50; splits partition them: validation = init states [0, n_validation), heldout = the next n_heldout. Regenerate the index inside the simulator venv with python -m hylo.envs.libero.suites.

INDEX module-attribute

INDEX = Path(__file__).with_name('suites.json')

MAX_STEPS module-attribute

MAX_STEPS = {'libero_spatial': 280, 'libero_object': 280, 'libero_goal': 300, 'libero_10': 520, 'libero_90': 400}

libero_tasks

libero_tasks(suite: str, task_indices: list[int] | None = None)

libero_benchmark

libero_benchmark(suite: str = 'libero_spatial', n_validation: int = 25, n_heldout: int = 25, task_indices: list[int] | None = None, protocol: str = 'standard', replicates: int = 1, rsi_bounds: tuple[int, int, int] = (20, 30, 40), gate_looks: int = 1)

protocol="standard": validation / heldout over the official 50 init states. protocol="rsi": search / search_val / gate / heldout (RFC-0002), with replicates noise replicates per init state (seed + 50 r: same init state, different policy noise).