feat(perception): integrate calibrated operator pipeline
Add calibrated K1 projection, recorded and near-live perception qualification, unified Rerun operator layers, bounded replay admission, audited viewer controls, worker experiments, and lab evidence.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from k1link.compute.realtime_tracking_qualification import (
|
||||
FRAME_SCHEMA,
|
||||
TELEMETRY_SCHEMA,
|
||||
_validate_realtime_frames,
|
||||
_validate_realtime_telemetry,
|
||||
)
|
||||
from k1link.sessions import SessionIntegrityError
|
||||
|
||||
|
||||
def _frame(index: int) -> dict[str, object]:
|
||||
return {
|
||||
"schema_version": FRAME_SCHEMA,
|
||||
"frame_index": index,
|
||||
"sequence": index + 1,
|
||||
"source_frame_index": 1000 + index,
|
||||
"source_sequence": 1001 + index,
|
||||
"session_seconds": 135.0 + index * 0.1,
|
||||
"detections": [],
|
||||
"tracks": [],
|
||||
"delivery": {"health": "healthy", "result_age_ms": 50.0},
|
||||
}
|
||||
|
||||
|
||||
def _telemetry(index: int) -> dict[str, object]:
|
||||
return {
|
||||
"schema_version": TELEMETRY_SCHEMA,
|
||||
"frame_index": index,
|
||||
"session_seconds": 135.0 + index * 0.1,
|
||||
"health": "healthy",
|
||||
"result_age_ms": 50.0,
|
||||
"processing_ms": 20.0,
|
||||
"queue_depth_after_take": 0,
|
||||
"queue_dropped_overflow": 0,
|
||||
}
|
||||
|
||||
|
||||
def test_realtime_rows_allow_explicit_latest_wins_gaps(tmp_path: Path) -> None:
|
||||
indices = (0, 2, 3)
|
||||
frames = tmp_path / "frames.jsonl"
|
||||
telemetry = tmp_path / "telemetry.jsonl"
|
||||
frames.write_text(
|
||||
"".join(json.dumps(_frame(index)) + "\n" for index in indices),
|
||||
encoding="utf-8",
|
||||
)
|
||||
telemetry.write_text(
|
||||
"".join(json.dumps(_telemetry(index)) + "\n" for index in indices),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
observed = _validate_realtime_frames(
|
||||
frames,
|
||||
tmp_path,
|
||||
expected_count=3,
|
||||
selection_count=4,
|
||||
source_start=1000,
|
||||
timeline_start=135.0,
|
||||
timeline_end=135.3,
|
||||
)
|
||||
_validate_realtime_telemetry(telemetry, tmp_path, expected_indices=observed)
|
||||
|
||||
assert observed == indices
|
||||
|
||||
|
||||
def test_realtime_rows_reject_out_of_order_results(tmp_path: Path) -> None:
|
||||
frames = tmp_path / "frames.jsonl"
|
||||
frames.write_text(
|
||||
json.dumps(_frame(1)) + "\n" + json.dumps(_frame(0)) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
with pytest.raises(SessionIntegrityError, match="frame metadata"):
|
||||
_validate_realtime_frames(
|
||||
frames,
|
||||
tmp_path,
|
||||
expected_count=2,
|
||||
selection_count=4,
|
||||
source_start=1000,
|
||||
timeline_start=135.0,
|
||||
timeline_end=135.3,
|
||||
)
|
||||
Reference in New Issue
Block a user