Skip to content

Commit 3a1eadc

Browse files
GWealecopybara-github
authored andcommitted
fix: use asyncio.sleep to avoid blocking event loop
Co-authored-by: George Weale <gweale@google.com> PiperOrigin-RevId: 910839657
1 parent 398f28f commit 3a1eadc

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

src/google/adk/tools/environment_simulation/environment_simulation_engine.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import concurrent.futures
1919
import logging
2020
import random
21-
import time
2221
from typing import Any
2322
from typing import Dict
2423
from typing import Optional
@@ -107,7 +106,7 @@ async def simulate(
107106
self._random_generator.random()
108107
< injection_config.injection_probability
109108
):
110-
time.sleep(injection_config.injected_latency_seconds)
109+
await asyncio.sleep(injection_config.injected_latency_seconds)
111110
if injection_config.injected_error:
112111
return {
113112
"error_code": (

tests/unittests/tools/environment_simulation/test_environment_simulation_engine.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,37 @@ async def test_injection_with_random_seed_is_deterministic(
221221
result2 = await engine_injected.simulate(mock_tool, {}, MagicMock())
222222
assert result2 == {"injected": True}
223223
mock_create_strategy.assert_not_called()
224+
225+
async def test_injected_latency_awaits_asyncio_sleep(
226+
self, mock_create_strategy, mock_analyzer
227+
):
228+
"""Regression guard against blocking time.sleep in the async path."""
229+
del mock_create_strategy, mock_analyzer
230+
latency = 0.2
231+
config = EnvironmentSimulationConfig(
232+
tool_simulation_configs=[
233+
ToolSimulationConfig(
234+
tool_name="test_tool",
235+
injection_configs=[
236+
InjectionConfig(
237+
injected_latency_seconds=latency,
238+
injected_response={"injected": True},
239+
)
240+
],
241+
)
242+
],
243+
simulation_model="test-model",
244+
simulation_model_configuration=genai_types.GenerateContentConfig(),
245+
)
246+
engine = EnvironmentSimulationEngine(config)
247+
mock_tool = MagicMock()
248+
mock_tool.name = "test_tool"
249+
250+
with patch(
251+
"google.adk.tools.environment_simulation.environment_simulation_engine.asyncio.sleep",
252+
new_callable=AsyncMock,
253+
) as mock_sleep:
254+
result = await engine.simulate(mock_tool, {}, MagicMock())
255+
256+
mock_sleep.assert_awaited_once_with(latency)
257+
assert result == {"injected": True}

0 commit comments

Comments
 (0)