ppak10/Agentic-SLS-Telemetry
Inova-Mk1-Telemetry Time-aligned printer-state recordings from Inova Mk1 SLS 3D print runs. One row per 10 Hz tick — the recorder's /state/snapshot poll — with the full sensor state snapshot (~64 columns: temperatures, position, power, lights) on every row, the nearest camera frame embedded inline when one fell within the prior 100 ms window, and any 1 kHz position-stream samples from that window collected as a nested list. 25 parquet files across builds spanning 2026-05 through… See the full description on the dataset page: https://huggingface.co/datasets/ppak10/Agentic-SLS-Telemetry.
0413
1"""Shared paths and helpers for the extract scripts.2 3Raw data lives in this dataset's own source/ tree (source-based layout,42026-07-16); extract scripts read source/ and write to data/.5"""6import json7from pathlib import Path8 9ROOT = Path(__file__).parent.parent10DATA_DIR = ROOT / "data"11 12# Since 2026-07-16 this dataset is source-based: raw inputs live in OUR OWN13# source/ tree (written by the recorder repo's `sls-export` /14# `sls-deliver-frames`). data/exports in the recorder repo is retired.15# AGENTIC_ROOT still points at the containing recorder repo (submodule,16# two climbs) — used only for the transient frame buffer of builds not yet17# delivered into source/frames/ zips.18AGENTIC_ROOT = ROOT.parent.parent19SOURCE_DIR = ROOT / "source"20EXPORTS_DIR = SOURCE_DIR / "recorder" # builds/events/frames jsonl + sensors.csv21TELEMETRY_DIR = SOURCE_DIR / "telemetry" # {NNN}.parquet raw ticks22POSITION_DIR = SOURCE_DIR / "position_hf" # {NNN}.parquet23FRAMES_BUFFER = AGENTIC_ROOT / "data" / "frames" # pre-delivery loose frames24 25 26def iter_jsonl(path: Path):27 """Stream a JSONL file row-by-row. Skips blank lines."""28 with path.open(encoding="utf-8") as f:29 for line in f:30 line = line.strip()31 if not line:32 continue33 yield json.loads(line)34 35 36def load_build_to_profile_name() -> dict[int, str]:37 """Read upstream events.jsonl, return {build_id: printProfileName}.38 39 Uses the `build_start` event's `payload.printProfileName` field. Builds40 that never logged a build_start event (the recorder joined mid-run) are41 omitted from the map.42 """43 events_path = EXPORTS_DIR / "events.jsonl"44 out: dict[int, str] = {}45 for ev in iter_jsonl(events_path):46 if ev.get("kind") != "build_start":47 continue48 name = (ev.get("payload") or {}).get("printProfileName")49 if name:50 out[ev["build_id"]] = name51 return out52 