1717from data_designer .engine import flags
1818from data_designer .engine .dataset_builders .errors import DatasetGenerationError
1919from data_designer .engine .mcp .registry import MCPRegistry
20+ from data_designer .engine .models .clients .adapters .http_model_client import ClientConcurrencyMode
2021from data_designer .engine .readiness import run_readiness_check
22+ from data_designer .engine .resources .resource_provider import ResourceProvider
2123
2224
2325@pytest .fixture (autouse = True )
@@ -52,6 +54,14 @@ def _build_columns(
5254 return builder .build ().columns
5355
5456
57+ def _run_sync_readiness (column_configs : Sequence [ColumnConfigT ], resource_provider : ResourceProvider ) -> None :
58+ run_readiness_check (
59+ column_configs ,
60+ resource_provider ,
61+ client_concurrency_mode = ClientConcurrencyMode .SYNC ,
62+ )
63+
64+
5565# ---------------------------------------------------------------------------
5666# Model health check
5767# ---------------------------------------------------------------------------
@@ -82,7 +92,7 @@ def _gen_with_two_models(row, generator_params, models):
8292
8393 builder .add_column (CustomColumnConfig (name = "custom_col" , generator_function = _gen_with_two_models ))
8494
85- run_readiness_check (builder .build ().columns , stub_resource_provider )
95+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
8696
8797 stub_resource_provider .model_registry .run_health_check .assert_called_once ()
8898 (called_aliases ,), _ = stub_resource_provider .model_registry .run_health_check .call_args
@@ -99,7 +109,7 @@ def test_run_readiness_check_skips_model_probe_when_no_aliases(
99109
100110 columns = _build_columns (model_configs = stub_model_configs , llm_columns = [])
101111
102- run_readiness_check (columns , stub_resource_provider )
112+ _run_sync_readiness (columns , stub_resource_provider )
103113
104114 stub_resource_provider .model_registry .run_health_check .assert_not_called ()
105115
@@ -117,7 +127,7 @@ def test_run_readiness_check_propagates_model_probe_error(
117127 columns = _build_columns (model_configs = stub_model_configs , llm_columns = [("col" , "stub-text" )])
118128
119129 with pytest .raises (ModelAuthenticationError , match = "bad creds" ):
120- run_readiness_check (columns , stub_resource_provider )
130+ _run_sync_readiness (columns , stub_resource_provider )
121131
122132
123133# ---------------------------------------------------------------------------
@@ -142,7 +152,7 @@ def test_run_readiness_check_collects_unique_sorted_tool_aliases(
142152 LLMTextColumnConfig (name = "c" , prompt = "x" , model_alias = "stub-text" , tool_alias = "alpha" ) # duplicate
143153 )
144154
145- run_readiness_check (builder .build ().columns , stub_resource_provider )
155+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
146156
147157 mock_mcp_registry .run_health_check .assert_called_once_with (["alpha" , "zebra" ])
148158
@@ -158,7 +168,7 @@ def test_run_readiness_check_skips_tool_probe_when_no_tool_aliases(
158168
159169 columns = _build_columns (model_configs = stub_model_configs , llm_columns = [("col" , "stub-text" )])
160170
161- run_readiness_check (columns , stub_resource_provider )
171+ _run_sync_readiness (columns , stub_resource_provider )
162172
163173 mock_mcp_registry .run_health_check .assert_not_called ()
164174
@@ -176,7 +186,7 @@ def test_run_readiness_check_raises_when_tools_referenced_but_no_mcp_registry(
176186 builder .add_column (LLMTextColumnConfig (name = "col" , prompt = "x" , model_alias = "stub-text" , tool_alias = "missing-tools" ))
177187
178188 with pytest .raises (DatasetGenerationError , match = "missing-tools" ):
179- run_readiness_check (builder .build ().columns , stub_resource_provider )
189+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
180190
181191
182192def test_run_readiness_check_propagates_tool_probe_error (
@@ -194,7 +204,7 @@ def test_run_readiness_check_propagates_tool_probe_error(
194204 builder .add_column (LLMTextColumnConfig (name = "col" , prompt = "x" , model_alias = "stub-text" , tool_alias = "tools" ))
195205
196206 with pytest .raises (RuntimeError , match = "mcp down" ):
197- run_readiness_check (builder .build ().columns , stub_resource_provider )
207+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
198208
199209
200210# ---------------------------------------------------------------------------
@@ -218,7 +228,7 @@ def test_run_readiness_check_runs_models_before_tools(
218228 builder .add_column (LLMTextColumnConfig (name = "col" , prompt = "x" , model_alias = "stub-text" , tool_alias = "tools" ))
219229
220230 with pytest .raises (ModelAuthenticationError ):
221- run_readiness_check (builder .build ().columns , stub_resource_provider )
231+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
222232
223233 # The MCP probe must not have been reached.
224234 mock_mcp_registry .run_health_check .assert_not_called ()
@@ -235,7 +245,7 @@ def test_run_readiness_check_no_models_no_tools_is_noop(
235245
236246 columns = _build_columns (model_configs = stub_model_configs , llm_columns = [])
237247
238- run_readiness_check (columns , stub_resource_provider )
248+ _run_sync_readiness (columns , stub_resource_provider )
239249
240250 stub_resource_provider .model_registry .run_health_check .assert_not_called ()
241251 mock_mcp_registry .run_health_check .assert_not_called ()
@@ -266,7 +276,7 @@ def test_run_readiness_check_collects_image_model_aliases(
266276 builder .add_column (LLMTextColumnConfig (name = "caption" , prompt = "x" , model_alias = "stub-text" ))
267277 builder .add_column (ImageColumnConfig (name = "picture" , prompt = "y" , model_alias = "stub-image" ))
268278
269- run_readiness_check (builder .build ().columns , stub_resource_provider )
279+ _run_sync_readiness (builder .build ().columns , stub_resource_provider )
270280
271281 stub_resource_provider .model_registry .run_health_check .assert_called_once ()
272282 (called_aliases ,), _ = stub_resource_provider .model_registry .run_health_check .call_args
@@ -292,7 +302,7 @@ def test_run_readiness_check_passes_skip_flagged_aliases_to_registry(
292302 llm_columns = [("col" , "stub-text" )],
293303 )
294304
295- run_readiness_check (columns , stub_resource_provider )
305+ _run_sync_readiness (columns , stub_resource_provider )
296306
297307 stub_resource_provider .model_registry .run_health_check .assert_called_once_with (["stub-text" ])
298308
@@ -331,7 +341,11 @@ def test_run_readiness_check_dispatches_to_async_registry_under_async_engine(
331341 patch ("data_designer.engine.dataset_builders.utils.async_concurrency.ensure_async_engine_loop" ),
332342 patch ("asyncio.run_coroutine_threadsafe" , return_value = sentinel_future ) as mock_submit ,
333343 ):
334- run_readiness_check (columns , stub_resource_provider )
344+ run_readiness_check (
345+ columns ,
346+ stub_resource_provider ,
347+ client_concurrency_mode = ClientConcurrencyMode .ASYNC ,
348+ )
335349
336350 # The async coroutine was created from arun_health_check and submitted to the loop.
337351 stub_resource_provider .model_registry .arun_health_check .assert_called_once_with (["stub-text" ])
@@ -362,6 +376,32 @@ def test_run_readiness_check_cancels_future_and_reraises_on_timeout(
362376 patch ("asyncio.run_coroutine_threadsafe" , return_value = sentinel_future ),
363377 pytest .raises (TimeoutError ),
364378 ):
365- run_readiness_check (columns , stub_resource_provider )
379+ run_readiness_check (
380+ columns ,
381+ stub_resource_provider ,
382+ client_concurrency_mode = ClientConcurrencyMode .ASYNC ,
383+ )
366384
367385 sentinel_future .cancel .assert_called_once ()
386+
387+
388+ def test_run_readiness_check_uses_sync_registry_for_sync_mode_clients (
389+ stub_resource_provider ,
390+ stub_model_configs ,
391+ monkeypatch : pytest .MonkeyPatch ,
392+ ) -> None :
393+ """Readiness follows the explicit client mode, not only the raw async env flag."""
394+ monkeypatch .setattr (flags , "DATA_DESIGNER_ASYNC_ENGINE" , True )
395+ stub_resource_provider .model_registry .run_health_check = Mock ()
396+ stub_resource_provider .model_registry .arun_health_check = Mock ()
397+ stub_resource_provider .mcp_registry = None
398+
399+ columns = _build_columns (
400+ model_configs = stub_model_configs ,
401+ llm_columns = [("col" , "stub-text" )],
402+ )
403+
404+ run_readiness_check (columns , stub_resource_provider , client_concurrency_mode = ClientConcurrencyMode .SYNC )
405+
406+ stub_resource_provider .model_registry .run_health_check .assert_called_once_with (["stub-text" ])
407+ stub_resource_provider .model_registry .arun_health_check .assert_not_called ()
0 commit comments