feat(control-station): review native raw fisheye risk cases
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { after, before, test } from "node:test";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { createServer } from "vite";
|
||||
|
||||
let server;
|
||||
let fetchM48TRiskQualityResult;
|
||||
|
||||
const resultId = `m48q-native-risk-quality-lab-${"a".repeat(64)}`;
|
||||
|
||||
before(async () => {
|
||||
server = await createServer({
|
||||
appType: "custom",
|
||||
logLevel: "silent",
|
||||
server: { middlewareMode: true },
|
||||
});
|
||||
({ fetchM48TRiskQualityResult } = await server.ssrLoadModule(
|
||||
"/src/core/laboratory/m48tRiskQuality.ts",
|
||||
));
|
||||
});
|
||||
|
||||
after(async () => server?.close());
|
||||
|
||||
function response(value) {
|
||||
return { ok: true, status: 200, json: async () => value };
|
||||
}
|
||||
|
||||
function payload() {
|
||||
return {
|
||||
schema_version: "missioncore.m48q-native-risk-quality-view/v1",
|
||||
variant: "native-risk-review",
|
||||
result_id: resultId,
|
||||
created_at_utc: "2026-08-26T10:00:00Z",
|
||||
status: "complete-review-ready-quality-not-adjudicated",
|
||||
access: "read-only",
|
||||
ground_truth: false,
|
||||
source: {
|
||||
source_id: "RAVNOVES00",
|
||||
frame_count: 4489,
|
||||
raster_width: 800,
|
||||
raster_height: 600,
|
||||
geometric_resampling: false,
|
||||
rectification: false,
|
||||
warp: false,
|
||||
},
|
||||
configuration: {
|
||||
candidate: {
|
||||
provider_id: "triton-rf-detr-large-coco-native-kb4-risk-fp16-shadow/v0",
|
||||
model_id: "rf_detr_large_native_kb4:1",
|
||||
preprocess_id: "raw-kb4-uint8-fused-mask-rgb-pad8-imagenet-trt/v0",
|
||||
minimum_score: 0.25,
|
||||
},
|
||||
},
|
||||
method: {
|
||||
schema_version: "missioncore.laboratory-method/v1",
|
||||
completeness: "complete",
|
||||
execution_class: "hybrid",
|
||||
pipeline_id: "m48q-native-raw-fisheye-risk-case-review/v1",
|
||||
components: [{
|
||||
kind: "model",
|
||||
name: "RF-DETR-L native KB4 TensorRT",
|
||||
version: "rf_detr_large_native_kb4:1",
|
||||
role: "risk proposals",
|
||||
identity_sha256: "b".repeat(64),
|
||||
}],
|
||||
},
|
||||
execution: {
|
||||
effective_world_state_fps: 11.84338,
|
||||
world_state_completion_p95_ms: 47.940779,
|
||||
detector_total_p95_ms: 21.19895,
|
||||
gpu_utilization_p95_percent: 53,
|
||||
gpu_memory_used_maximum_mib: 9718,
|
||||
additional_inference_passes: 0,
|
||||
},
|
||||
metrics: {
|
||||
selection: {
|
||||
case_count: 24,
|
||||
minimum_sequence_separation: 12,
|
||||
selected_bucket_coverage: { person: 22, animal: 3 },
|
||||
selected_class_counts: { person: 44, dog: 3 },
|
||||
},
|
||||
runtime: {
|
||||
delivery_ratio: 1,
|
||||
integrated_runtime_gate_passed: true,
|
||||
operating_target_gate_passed: true,
|
||||
},
|
||||
native_tensor_parity: {
|
||||
risk_detection_precision: 0.9887,
|
||||
risk_detection_recall: 0.9831,
|
||||
matched_mean_iou: 0.9882,
|
||||
},
|
||||
},
|
||||
acceptance: {
|
||||
review_ready: true,
|
||||
integrated_runtime_gate_passed: true,
|
||||
independent_quality_evaluated: false,
|
||||
semantic_candidate_accepted: false,
|
||||
},
|
||||
review: {
|
||||
source_raster: { width: 800, height: 600 },
|
||||
overlay: { client_rendered: true, toggleable: true },
|
||||
cases: Array.from({ length: 24 }, (_, index) => {
|
||||
const caseId = String(index * 20 + 12).padStart(6, "0");
|
||||
return {
|
||||
case_id: caseId,
|
||||
sequence: Number(caseId),
|
||||
frame_id: `frame-${caseId}`,
|
||||
evidence_time_ns: 35_000_000_000 + index * 1_000_000,
|
||||
image_url: `/review/${caseId}.jpg`,
|
||||
media_type: "image/jpeg",
|
||||
width: 800,
|
||||
height: 600,
|
||||
byte_length: 1000 + index,
|
||||
sha256: String(index.toString(16)).padStart(64, "0"),
|
||||
geometric_resampling: false,
|
||||
selection_buckets: [index % 2 ? "person" : "animal"],
|
||||
comparison: {
|
||||
native_detection_count: 1,
|
||||
legacy_704_detection_count: 1,
|
||||
matched_detection_count_iou_at_least_0_5: 1,
|
||||
},
|
||||
proposals: [{
|
||||
proposal_id: `proposal-${index}-0`,
|
||||
class_name: index % 2 ? "person" : "dog",
|
||||
risk_family: index % 2 ? "person" : "animal",
|
||||
score: 0.75,
|
||||
box_xyxy: [10, 20, 100, 200],
|
||||
}],
|
||||
};
|
||||
}),
|
||||
},
|
||||
limitations: ["No independent route truth."],
|
||||
};
|
||||
}
|
||||
|
||||
test("M4.8Q parser accepts only the native 800x600 no-resampling review contract", async () => {
|
||||
const result = await fetchM48TRiskQualityResult(resultId, {
|
||||
fetcher: async () => response(payload()),
|
||||
});
|
||||
|
||||
assert.equal(result.variant, "native-risk-review");
|
||||
assert.equal(result.review.cases.length, 24);
|
||||
assert.equal(result.review.cases[0].width, 800);
|
||||
assert.equal(result.review.cases[0].proposals[0].className, "dog");
|
||||
assert.equal(result.execution.additionalInferencePasses, 0);
|
||||
assert.equal(result.acceptance.independentQualityEvaluated, false);
|
||||
});
|
||||
|
||||
test("M4.8Q parser fails closed if raw-fisheye geometry is resampled", async () => {
|
||||
const invalid = payload();
|
||||
invalid.source.geometric_resampling = true;
|
||||
|
||||
await assert.rejects(
|
||||
fetchM48TRiskQualityResult(resultId, {
|
||||
fetcher: async () => response(invalid),
|
||||
}),
|
||||
/source resampling/,
|
||||
);
|
||||
});
|
||||
|
||||
test("M4.8Q reuses the canonical image scene and viewer overlay toggle", async () => {
|
||||
const source = await readFile(
|
||||
new URL("../src/workspaces/laboratory/M48TRiskQualityVisual.tsx", import.meta.url),
|
||||
"utf8",
|
||||
);
|
||||
|
||||
assert.match(source, /<LaboratoryEvidenceViewer/);
|
||||
assert.match(source, /<RecordedEvidenceImageScene/);
|
||||
assert.match(source, /name=\{boxesVisible \? "eye-off" : "eye"\}/);
|
||||
assert.match(source, /raw KB4 800×600 · resampling NO/);
|
||||
assert.doesNotMatch(source, /<canvas/);
|
||||
});
|
||||
Reference in New Issue
Block a user