async def stream_response(message: str):
"""Stream a response and handle events properly."""
full_text = ""
async for event in agency.get_response_stream(message):
# Handle streaming events with data
if hasattr(event, "data"):
data = event.data
# Only capture actual response text, not tool call arguments
if hasattr(data, "delta") and hasattr(data, "type"):
if data.type == "response.output_text.delta":
# Stream the actual response text in real-time
delta_text = data.delta
if delta_text:
print(delta_text, end="", flush=True)
full_text += delta_text
# Skip tool call deltas (we don't want to show those to users)
elif data.type == "response.function_call_arguments.delta":
continue
# Handle validation errors
elif isinstance(event, dict):
event_type = event.get("event", event.get("type"))
if event_type == "error":
print(f"\n❌ Error: {event.get('content', event.get('data', 'Unknown error'))}")
break
print("\n✅ Stream complete")
return full_text
# Usage
await stream_response("I want you to build me a website")