22Tests for PrimingGroup and ML pipeline methods on ExperimentalApi.
33
44The 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