Skip to content

Commit 2f8a474

Browse files
author
Tim Huff
committed
responding to AI PR feedback
1 parent 7c2b321 commit 2f8a474

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/groundlight/edge/config.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,24 @@ class DetectorsConfig(BaseModel):
8484

8585
@model_validator(mode="after")
8686
def validate_inference_configs(self):
87+
for name, config in self.edge_inference_configs.items():
88+
if name != config.name:
89+
raise ValueError(
90+
f"Edge inference config key '{name}' must match InferenceConfig.name '{config.name}'."
91+
)
92+
93+
seen_detector_ids = set()
94+
duplicate_detector_ids = set()
95+
for detector_config in self.detectors:
96+
detector_id = detector_config.detector_id
97+
if detector_id in seen_detector_ids:
98+
duplicate_detector_ids.add(detector_id)
99+
else:
100+
seen_detector_ids.add(detector_id)
101+
if duplicate_detector_ids:
102+
duplicates = ", ".join(sorted(duplicate_detector_ids))
103+
raise ValueError(f"Duplicate detector IDs are not allowed: {duplicates}.")
104+
87105
for detector_config in self.detectors:
88106
if detector_config.edge_inference_config not in self.edge_inference_configs:
89107
raise ValueError(f"Edge inference config '{detector_config.edge_inference_config}' not defined.")

test/unit/test_edge_config.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,35 @@ def test_add_detector_rejects_different_named_inference_config():
5151
)
5252

5353

54+
def test_constructor_rejects_duplicate_detector_ids():
55+
with pytest.raises(ValueError, match="Duplicate detector IDs"):
56+
DetectorsConfig(
57+
edge_inference_configs={"default": DEFAULT},
58+
detectors=[
59+
{"detector_id": "det_1", "edge_inference_config": "default"},
60+
{"detector_id": "det_1", "edge_inference_config": "default"},
61+
],
62+
)
63+
64+
65+
def test_constructor_rejects_mismatched_inference_config_key_and_name():
66+
with pytest.raises(ValueError, match="must match InferenceConfig.name"):
67+
DetectorsConfig(
68+
edge_inference_configs={"default": InferenceConfig(name="not_default")},
69+
detectors=[],
70+
)
71+
72+
73+
def test_constructor_accepts_matching_inference_config_key_and_name():
74+
config = DetectorsConfig(
75+
edge_inference_configs={"default": InferenceConfig(name="default")},
76+
detectors=[{"detector_id": "det_1", "edge_inference_config": "default"}],
77+
)
78+
79+
assert list(config.edge_inference_configs.keys()) == ["default"]
80+
assert [detector.detector_id for detector in config.detectors] == ["det_1"]
81+
82+
5483
def test_edge_endpoint_config_add_detector_delegates_to_detectors_logic():
5584
config = EdgeEndpointConfig()
5685
config.add_detector("det_1", NO_CLOUD)

0 commit comments

Comments
 (0)