feat(perception): add occupied-only low-step shadow

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 12:39:54 +03:00
parent 5983883ffe
commit 343ddeac2d
8 changed files with 1124 additions and 7 deletions
@@ -383,6 +383,7 @@ def main() -> int:
):
parser.add_argument(f"--{name}", type=Path, required=True)
parser.add_argument("--triton-origin", default="http://127.0.0.1:8000")
parser.add_argument("--additive-low-step-profile", type=Path)
parser.add_argument("--loops", type=int, default=1)
parser.add_argument("--maximum-frames", type=int)
parser.add_argument("--source-rate-hz", type=float)
@@ -477,6 +478,7 @@ def main() -> int:
decode_timing_observer=timing_store.observe_decode,
source_pacing_observer=timing_store.observe_pacing,
detector_timing_observer=timing_store.observe_detector,
additive_low_step_profile=arguments.additive_low_step_profile,
maximum_frames=arguments.maximum_frames,
source_rate_hz=arguments.source_rate_hz,
) as runtime:
@@ -685,7 +687,11 @@ def main() -> int:
"worker_id": "worker-006",
"graph_id": "reference-perception-graph/v2",
"detector_provider_id": detector_provider_id,
"inputs": _input_digests(paths, arguments.detector_profile),
"inputs": _input_digests(
paths,
arguments.detector_profile,
arguments.additive_low_step_profile,
),
"runtime_artifact_sha256": arguments.runtime_artifact_sha256,
"runner_sha256": arguments.runner_sha256,
},
@@ -1105,12 +1111,15 @@ def _gc_telemetry_summary(events: list[dict[str, object]]) -> dict[str, object]:
def _input_digests(
paths: ReferenceGraphRuntimePaths,
detector_profile: Path,
additive_low_step_profile: Path | None = None,
) -> dict[str, str]:
values = {
field.name: _sha256(getattr(paths, field.name))
for field in fields(ReferenceGraphRuntimePaths)
}
values["detector_profile"] = _sha256(detector_profile)
if additive_low_step_profile is not None:
values["additive_low_step_profile"] = _sha256(additive_low_step_profile)
return dict(sorted(values.items()))
@@ -20,6 +20,7 @@ param(
[double]$MinimumEffectiveWorldStateFps = 9.5,
[ValidateRange(1.0, 10000.0)]
[double]$MaximumWorldStateCompletionP95Ms = 125.0,
[switch]$AdditiveLowStep,
[string]$OutputRoot = (
"D:\NDC_MISSIONCORE\runtime\results\m48n-native-reference-graph-shadow"
)
@@ -109,6 +110,15 @@ $expectedConfigs = [ordered]@{
"8c3a5aa837da1f028f5998fb504a1381f9b2b68de6420a32160410b6dc0887c7"
)
}
if ($AdditiveLowStep) {
$expectedConfigs.Remove("m48n-rf-detr-native-reference-graph-shadow-v0.json")
$expectedConfigs["m48r3-native-low-step-reference-graph-shadow-v1.json"] = (
"d5434825c3a73a9a070aea37927755771e07d38a017111d2014a8e8c88969227"
)
$expectedConfigs["m48r3-additive-low-step-occupancy-v1.json"] = (
"62dd41400169080e1a38f713b283b67cdf201078c4c7fd807783fe6c1838082c"
)
}
foreach ($entry in $expectedConfigs.GetEnumerator()) {
$null = Assert-File (Join-Path $release $entry.Key) $entry.Value (
"M48N config {0}" -f $entry.Key
@@ -203,8 +213,16 @@ if (-not $canonicalTriton.State.Running -or $canonicalTriton.State.Health.Status
throw "Canonical Triton must remain healthy during M48N shadow"
}
$canonicalTritonId = [string]$canonicalTriton.Id
$tritonName = "ndc-mission-core-m48n-native-reference-graph-triton"
$graphName = "ndc-mission-core-m48n-native-reference-graph"
$tritonName = if ($AdditiveLowStep) {
"ndc-mission-core-m48r3-low-step-triton"
} else {
"ndc-mission-core-m48n-native-reference-graph-triton"
}
$graphName = if ($AdditiveLowStep) {
"ndc-mission-core-m48r3-low-step-reference-graph"
} else {
"ndc-mission-core-m48n-native-reference-graph"
}
foreach ($name in @($tritonName, $graphName)) {
if (& docker ps -a --format "{{.Names}}" --filter "name=^/$name$") {
throw "M48N candidate container $name already exists"
@@ -263,6 +281,19 @@ try {
throw "M48N Triton published a host port"
}
$graphConfigName = if ($AdditiveLowStep) {
"m48r3-native-low-step-reference-graph-shadow-v1.json"
} else {
"m48n-rf-detr-native-reference-graph-shadow-v0.json"
}
$additiveArguments = if ($AdditiveLowStep) {
@(
"--additive-low-step-profile",
"/release/m48r3-additive-low-step-occupancy-v1.json"
)
} else {
@()
}
$arguments = @(
"run", "--name", $graphName,
"--label", "com.nodedc.product=mission-core",
@@ -294,7 +325,7 @@ try {
"--entrypoint", "python3",
$image,
"/release/run_m48s_reference_graph_shadow_worker.py",
"--graph-config", "/release/m48n-rf-detr-native-reference-graph-shadow-v0.json",
"--graph-config", ("/release/{0}" -f $graphConfigName),
"--baseline-profile", "/release/m4-recorded-realtime-baseline-v1.json",
"--detector-profile", "/release/rf-detr-large-native-kb4-risk-shadow-v0.json",
"--geometry-profile", "/release/m4-geometry-association-v1.json",
@@ -331,7 +362,7 @@ try {
"--output", "/output/result.json",
"--progress", "/output/progress.jsonl",
"--frame-ledger", "/output/frames.jsonl"
)
) + $additiveArguments
& docker @arguments
Assert-LastExitCode "M48N native complete reference graph shadow"
foreach ($name in @("result.json", "frames.jsonl", "progress.jsonl")) {