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,109 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from types import ModuleType
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
|
||||
def _worker_module() -> ModuleType:
|
||||
worker_root = Path(__file__).parents[1] / "experiments" / "perception" / "worker"
|
||||
path = worker_root / "run_e8_realtime_tracking.py"
|
||||
sys.path.insert(0, str(worker_root))
|
||||
try:
|
||||
spec = importlib.util.spec_from_file_location("e8_realtime_tracking_worker", path)
|
||||
assert spec is not None and spec.loader is not None
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
sys.modules[spec.name] = module
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
finally:
|
||||
sys.path.pop(0)
|
||||
|
||||
|
||||
def _profile_path(name: str = "e8_realtime_tracking_profile.json") -> Path:
|
||||
return Path(__file__).parents[1] / "experiments" / "perception" / "worker" / name
|
||||
|
||||
|
||||
def _envelope(worker: ModuleType, index: int) -> object:
|
||||
return worker.FrameEnvelope(
|
||||
frame_index=index,
|
||||
path=Path(f"frame-{index:06d}.png"),
|
||||
timeline={"source_frame_index": 1000 + index},
|
||||
scheduled_monotonic=float(index),
|
||||
decoded_monotonic=float(index),
|
||||
image=np.zeros((1, 1, 3), dtype=np.uint8),
|
||||
decode_ms=1.0,
|
||||
source_release_lag_ms=0.0,
|
||||
)
|
||||
|
||||
|
||||
def test_e8_profile_pins_realtime_policy_and_e5_model() -> None:
|
||||
worker = _worker_module()
|
||||
|
||||
profile, digest = worker._read_profile(_profile_path())
|
||||
|
||||
assert len(digest) == 64
|
||||
assert profile["model"]["id"] == "yolox_s"
|
||||
assert profile["realtime"]["queue_policy"] == "bounded-latest-wins"
|
||||
assert profile["realtime"]["queue_capacity"] == 2
|
||||
assert profile["acceptance"]["minimum_effective_fps"] == 9.5
|
||||
assert profile["acceptance"]["expect_overload"] is False
|
||||
|
||||
|
||||
def test_e8_overload_profile_requires_observed_overload() -> None:
|
||||
worker = _worker_module()
|
||||
|
||||
profile, _digest = worker._read_profile(
|
||||
_profile_path("e8_realtime_tracking_overload_profile.json")
|
||||
)
|
||||
|
||||
assert profile["mode"] == "overload-negative-control"
|
||||
assert profile["realtime"]["consumer_delay_ms"] == 140.0
|
||||
assert profile["acceptance"]["expect_overload"] is True
|
||||
|
||||
|
||||
def test_e8_profile_rejects_unbounded_queue(tmp_path: Path) -> None:
|
||||
worker = _worker_module()
|
||||
profile = json.loads(_profile_path().read_text(encoding="utf-8"))
|
||||
profile["realtime"]["queue_capacity"] = 0
|
||||
path = tmp_path / "profile.json"
|
||||
path.write_text(json.dumps(profile), encoding="utf-8")
|
||||
|
||||
with pytest.raises(RuntimeError, match="scheduling"):
|
||||
worker._read_profile(path)
|
||||
|
||||
|
||||
def test_e8_latest_wins_queue_discards_oldest_frame() -> None:
|
||||
worker = _worker_module()
|
||||
queue = worker.LatestWinsQueue(capacity=2)
|
||||
queue.publish(_envelope(worker, 1))
|
||||
queue.publish(_envelope(worker, 2))
|
||||
queue.publish(_envelope(worker, 3))
|
||||
queue.close()
|
||||
|
||||
assert queue.take().frame_index == 2
|
||||
assert queue.take().frame_index == 3
|
||||
assert queue.take() is None
|
||||
assert queue.snapshot() == {
|
||||
"capacity": 2,
|
||||
"final_depth": 0,
|
||||
"maximum_depth": 2,
|
||||
"published": 3,
|
||||
"consumed": 2,
|
||||
"dropped_overflow": 1,
|
||||
"closed": True,
|
||||
}
|
||||
|
||||
|
||||
def test_e8_health_uses_explicit_freshness_thresholds() -> None:
|
||||
worker = _worker_module()
|
||||
realtime = {"stale_after_ms": 150.0, "unavailable_after_ms": 500.0}
|
||||
|
||||
assert worker._health(149.9, realtime) == "healthy"
|
||||
assert worker._health(150.0, realtime) == "stale"
|
||||
assert worker._health(500.0, realtime) == "unavailable"
|
||||
Reference in New Issue
Block a user