Skip to content

hylo-catalog

Hylo catalog: a read-only query API over the runs directory (runs, episode timelines and frames, paired comparisons, campaigns, artifacts, skills, lessons, memories)

Repository hylo-harness, packages/hylo-catalog. Licence: Apache-2.0. Depends on: hylo-core, hylo-eval, numpy>=1.24.

Module Summary
hylo.catalog
hylo.catalog.episodes Episode replay data: one trace -> a compact, step-indexed timeline, and camera frames as arrays
hylo.catalog.index Read-only catalog over the runs directory: runs, campaigns, artifacts, skill libraries, lesson books, memories

hylo.catalog

hylo.catalog.episodes

Episode replay data: one trace -> a compact, step-indexed timeline, and camera frames as arrays.

TraceCache

TraceCache(size: int = 6)

A few recently opened traces (reading resolves every image blob, so reuse matters for frame requests).

size instance-attribute

size = size

get

get(run_dir: Path, episode_id: str) -> EpisodeTrace

to_json

to_json(v: Any, nd: int = 4) -> Any

timeline

timeline(tr: EpisodeTrace) -> dict[str, Any]

frame_array

frame_array(tr: EpisodeTrace, obs_index: int, camera: str) -> np.ndarray

hylo.catalog.index

Read-only catalog over the runs directory: runs, campaigns, artifacts, skill libraries, lesson books, memories.

The trace store is the only source of truth; nothing is copied into a database. Scans are cached by file mtime, so new runs (from the live sandbox or a job) appear on the next request.

SKIP_DIRS module-attribute

SKIP_DIRS = {'blobs', 'episodes', '__pycache__', 'vlm-cache', 'registry'}

Catalog module-attribute

Catalog = Index

Index

Index(root: str | Path)

root instance-attribute

root = Path(root).resolve()

rel

rel(p: Path) -> str

runs

runs() -> list[dict[str, Any]]

run_dir

run_dir(run_id: str) -> Path

run

run(run_id: str) -> dict[str, Any]

compare

compare(a: str, b: str) -> dict[str, Any]

Two runs paired on (task, seed); b is the candidate, a the baseline (exact one-sided McNemar).

campaigns

campaigns() -> list[dict[str, Any]]

campaign

campaign(cid: str) -> dict[str, Any]

loop_summary

loop_summary() -> dict[str, Any]

Counts along the improvement cascade over every campaign, and each campaign's strongest gate result.

latest_live

latest_live() -> dict[str, Any] | None

artifacts

artifacts() -> list[dict[str, Any]]

skill_libraries

skill_libraries() -> list[dict[str, Any]]

lesson_books

lesson_books() -> list[dict[str, Any]]

memories

memories() -> list[dict[str, Any]]