|
|
from __future__ import annotations |
|
|
|
|
|
from dataclasses import dataclass |
|
|
from typing import Any, Literal, Union |
|
|
|
|
|
from typing_extensions import TypeAlias |
|
|
|
|
|
from .agent import Agent |
|
|
from .items import RunItem, TResponseStreamEvent |
|
|
|
|
|
|
|
|
@dataclass |
|
|
class RawResponsesStreamEvent: |
|
|
"""Streaming event from the LLM. These are 'raw' events, i.e. they are directly passed through |
|
|
from the LLM. |
|
|
""" |
|
|
|
|
|
data: TResponseStreamEvent |
|
|
"""The raw responses streaming event from the LLM.""" |
|
|
|
|
|
type: Literal["raw_response_event"] = "raw_response_event" |
|
|
"""The type of the event.""" |
|
|
|
|
|
|
|
|
@dataclass |
|
|
class RunItemStreamEvent: |
|
|
"""Streaming events that wrap a `RunItem`. As the agent processes the LLM response, it will |
|
|
generate these events for new messages, tool calls, tool outputs, handoffs, etc. |
|
|
""" |
|
|
|
|
|
name: Literal[ |
|
|
"message_output_created", |
|
|
"handoff_requested", |
|
|
|
|
|
"handoff_occured", |
|
|
"tool_called", |
|
|
"tool_output", |
|
|
"reasoning_item_created", |
|
|
"mcp_approval_requested", |
|
|
"mcp_list_tools", |
|
|
] |
|
|
"""The name of the event.""" |
|
|
|
|
|
item: RunItem |
|
|
"""The item that was created.""" |
|
|
|
|
|
type: Literal["run_item_stream_event"] = "run_item_stream_event" |
|
|
|
|
|
|
|
|
@dataclass |
|
|
class AgentUpdatedStreamEvent: |
|
|
"""Event that notifies that there is a new agent running.""" |
|
|
|
|
|
new_agent: Agent[Any] |
|
|
"""The new agent.""" |
|
|
|
|
|
type: Literal["agent_updated_stream_event"] = "agent_updated_stream_event" |
|
|
|
|
|
|
|
|
StreamEvent: TypeAlias = Union[RawResponsesStreamEvent, RunItemStreamEvent, AgentUpdatedStreamEvent] |
|
|
"""A streaming event from an agent.""" |
|
|
|