Skip to content

Commit be0e45d

Browse files
author
brandon
committed
fixes
1 parent c8b9d8d commit be0e45d

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

src/groundlight/experimental_api.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ def get_priming_group(self, priming_group_id: str) -> PrimingGroup:
940940
**Example usage**::
941941
942942
gl = ExperimentalApi()
943-
pg = gl.get_priming_group("pgp_abc123")
943+
pg = gl.get_priming_group("pg_abc123")
944944
print(f"Priming group name: {pg.name}")
945945
946946
:param priming_group_id: The ID of the PrimingGroup to retrieve.
@@ -952,6 +952,8 @@ def get_priming_group(self, priming_group_id: str) -> PrimingGroup:
952952
)
953953
if response.status_code == 404:
954954
raise NotFoundError(f"PrimingGroup '{priming_group_id}' not found.")
955+
if response.status_code == 410:
956+
raise NotFoundError(f"PrimingGroup '{priming_group_id}' has been deleted.")
955957
response.raise_for_status()
956958
return PrimingGroup(**response.json())
957959

@@ -965,7 +967,7 @@ def delete_priming_group(self, priming_group_id: str) -> None:
965967
**Example usage**::
966968
967969
gl = ExperimentalApi()
968-
gl.delete_priming_group("pgp_abc123")
970+
gl.delete_priming_group("pg_abc123")
969971
970972
:param priming_group_id: The ID of the PrimingGroup to delete.
971973
"""

test/unit/test_priming_groups.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
Tests for PrimingGroup and ML pipeline methods on ExperimentalApi.
33
44
The create/get/delete priming group tests are marked @pytest.mark.expensive because they
5-
require training a detector (submit images, wait ~45 s) before a pipeline has a
6-
cached_vizlogic_key that can seed a PrimingGroup. Run them explicitly with:
5+
require training a detector (submit 8 labeled images, wait ~90s) before a pipeline has a
6+
trained_at timestamp that indicates it can seed a PrimingGroup. Run them explicitly with:
77
88
pytest -m expensive test/unit/test_priming_groups.py
99
"""
@@ -69,7 +69,7 @@ def test_list_priming_groups_returns_list(gl_experimental: ExperimentalApi):
6969
}
7070

7171
_MOCK_PG = {
72-
"id": "pgp_mock0000000000000001",
72+
"id": "pg_mock0000000000000001",
7373
"name": "test-primer",
7474
"is_global": False,
7575
"canonical_query": "Is there a dog?",
@@ -101,7 +101,7 @@ def test_create_priming_group_mocked(gl_experimental: ExperimentalApi):
101101
)
102102

103103
assert isinstance(pg, PrimingGroup)
104-
assert pg.id == "pgp_mock0000000000000001"
104+
assert pg.id == "pg_mock0000000000000001"
105105
assert pg.name == "test-primer"
106106
assert pg.canonical_query == "Is there a dog?"
107107
assert pg.is_global is False
@@ -131,10 +131,10 @@ def test_get_priming_group_mocked(gl_experimental: ExperimentalApi):
131131
with patch("groundlight.experimental_api.requests.get") as mock_get:
132132
mock_get.return_value = _mock_response(200, _MOCK_PG)
133133

134-
pg = gl_experimental.get_priming_group("pgp_mock0000000000000001")
134+
pg = gl_experimental.get_priming_group("pg_mock0000000000000001")
135135

136136
assert isinstance(pg, PrimingGroup)
137-
assert pg.id == "pgp_mock0000000000000001"
137+
assert pg.id == "pg_mock0000000000000001"
138138
assert pg.name == "test-primer"
139139

140140

@@ -151,14 +151,14 @@ def test_delete_priming_group_mocked(gl_experimental: ExperimentalApi):
151151
patch("groundlight.experimental_api.requests.get") as mock_get,
152152
patch("groundlight.experimental_api.requests.delete") as mock_delete,
153153
):
154-
mock_get.return_value = _mock_response(404)
154+
mock_get.return_value = _mock_response(410)
155155
mock_delete.return_value = _mock_response(204)
156156

157-
gl_experimental.delete_priming_group("pgp_mock0000000000000001")
157+
gl_experimental.delete_priming_group("pg_mock0000000000000001")
158158

159-
# After deletion, getting it should raise NotFoundError
159+
# After deletion, getting it should raise NotFoundError (410 Gone)
160160
with pytest.raises(NotFoundError):
161-
gl_experimental.get_priming_group("pgp_mock0000000000000001")
161+
gl_experimental.get_priming_group("pg_mock0000000000000001")
162162

163163
mock_delete.assert_called_once()
164164

@@ -170,22 +170,29 @@ def test_created_priming_group_appears_in_list_mocked(gl_experimental: Experimen
170170

171171
groups = gl_experimental.list_priming_groups()
172172

173-
assert any(g.id == "pgp_mock0000000000000001" for g in groups)
173+
assert any(g.id == "pg_mock0000000000000001" for g in groups)
174174

175175

176176
# ---------------------------------------------------------------------------
177177
# create / get / delete (expensive — require a trained pipeline)
178178
# ---------------------------------------------------------------------------
179179

180180

181-
def _wait_for_trained_pipeline(gl_experimental: ExperimentalApi, detector, timeout: int = 45) -> MLPipeline:
181+
def _wait_for_trained_pipeline(gl_experimental: ExperimentalApi, detector, timeout: int = 90) -> MLPipeline:
182182
"""
183-
Submit the cat and dog test images, then poll until the active pipeline has a
184-
cached_vizlogic_key (i.e. has been trained). Raises TimeoutError if training
183+
Submit 4 dog images (labeled YES) and 4 cat images (labeled NO), then poll until the active
184+
pipeline has a trained_at timestamp (i.e. has been trained). Raises TimeoutError if training
185185
doesn't complete within `timeout` seconds.
186186
"""
187-
gl_experimental.submit_image_query(detector, "test/assets/dog.jpeg", human_review="NEVER")
188-
gl_experimental.submit_image_query(detector, "test/assets/cat.jpeg", human_review="NEVER")
187+
# Submit 4 dog images with YES labels
188+
for _ in range(4):
189+
iq = gl_experimental.submit_image_query(detector, "test/assets/dog.jpeg", human_review="NEVER")
190+
gl_experimental.add_label(iq, "YES")
191+
192+
# Submit 4 cat images with NO labels
193+
for _ in range(4):
194+
iq = gl_experimental.submit_image_query(detector, "test/assets/cat.jpeg", human_review="NEVER")
195+
gl_experimental.add_label(iq, "NO")
189196

190197
deadline = time.monotonic() + timeout
191198
while time.monotonic() < deadline:
@@ -209,7 +216,7 @@ def test_create_priming_group(gl_experimental: ExperimentalApi, detector):
209216
)
210217

211218
assert isinstance(pg, PrimingGroup)
212-
assert pg.id.startswith("pgp_")
219+
assert pg.id.startswith("pg_")
213220
assert pg.name == f"test-primer-{detector.id}"
214221
assert pg.canonical_query == "Is there a dog?"
215222
assert pg.is_global is False

0 commit comments

Comments
 (0)