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).
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'}
Index
root
instance-attribute
root = Path(root).resolve()
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]]