-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
Milestone
Description
Describe the bug
RunResultStreamed.stream_events() cannot be cancelled using asyncio primitives. In the script below, we'd like to time out if a streaming event takes longer than 5 seconds to arrive. However, using asyncio.wait_for's cancellation event is not propagated to the stream_events iterator.
Debug information
- Agents SDK version: (e.g.
v0.0.3) - Python version (e.g. Python 3.10)
Repro steps
from agents import Agent, Runner, function_tool
import asyncio
import datetime
@function_tool
async def get_secret_key():
await asyncio.sleep(120)
return "secret_key"
async def main():
agent = Agent(
name="secret_key_agent",
model="gpt-4.1-mini",
tools=[get_secret_key],
)
result = Runner.run_streamed(agent, input="What is the secret key?")
event_iter = aiter(result.stream_events())
while True:
try:
event = await asyncio.wait_for(anext(event_iter), timeout=5)
print(datetime.datetime.now(), event)
except StopAsyncIteration:
break
except asyncio.TimeoutError:
print("Timed out waiting for next event")
break # or continue if you want to keep waiting
if __name__ == "__main__":
asyncio.run(main())Expected behavior
The iterator should respond as expected to asyncio cancellations. The loop above should time out.