| from typing import Any, Generic, Optional | |
| from typing_extensions import TypeVar | |
| from .agent import Agent, AgentBase | |
| from .items import ModelResponse, TResponseInputItem | |
| from .run_context import RunContextWrapper, TContext | |
| from .tool import Tool | |
| TAgent = TypeVar("TAgent", bound=AgentBase, default=AgentBase) | |
| class RunHooksBase(Generic[TContext, TAgent]): | |
| """A class that receives callbacks on various lifecycle events in an agent run. Subclass and | |
| override the methods you need. | |
| """ | |
| async def on_llm_start( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: Agent[TContext], | |
| system_prompt: Optional[str], | |
| input_items: list[TResponseInputItem], | |
| ) -> None: | |
| """Called just before invoking the LLM for this agent.""" | |
| pass | |
| async def on_llm_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: Agent[TContext], | |
| response: ModelResponse, | |
| ) -> None: | |
| """Called immediately after the LLM call returns for this agent.""" | |
| pass | |
| async def on_agent_start(self, context: RunContextWrapper[TContext], agent: TAgent) -> None: | |
| """Called before the agent is invoked. Called each time the current agent changes.""" | |
| pass | |
| async def on_agent_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| output: Any, | |
| ) -> None: | |
| """Called when the agent produces a final output.""" | |
| pass | |
| async def on_handoff( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| from_agent: TAgent, | |
| to_agent: TAgent, | |
| ) -> None: | |
| """Called when a handoff occurs.""" | |
| pass | |
| async def on_tool_start( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| tool: Tool, | |
| ) -> None: | |
| """Called concurrently with tool invocation.""" | |
| pass | |
| async def on_tool_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| tool: Tool, | |
| result: str, | |
| ) -> None: | |
| """Called after a tool is invoked.""" | |
| pass | |
| class AgentHooksBase(Generic[TContext, TAgent]): | |
| """A class that receives callbacks on various lifecycle events for a specific agent. You can | |
| set this on `agent.hooks` to receive events for that specific agent. | |
| Subclass and override the methods you need. | |
| """ | |
| async def on_start(self, context: RunContextWrapper[TContext], agent: TAgent) -> None: | |
| """Called before the agent is invoked. Called each time the running agent is changed to this | |
| agent.""" | |
| pass | |
| async def on_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| output: Any, | |
| ) -> None: | |
| """Called when the agent produces a final output.""" | |
| pass | |
| async def on_handoff( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| source: TAgent, | |
| ) -> None: | |
| """Called when the agent is being handed off to. The `source` is the agent that is handing | |
| off to this agent.""" | |
| pass | |
| async def on_tool_start( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| tool: Tool, | |
| ) -> None: | |
| """Called concurrently with tool invocation.""" | |
| pass | |
| async def on_tool_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: TAgent, | |
| tool: Tool, | |
| result: str, | |
| ) -> None: | |
| """Called after a tool is invoked.""" | |
| pass | |
| async def on_llm_start( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: Agent[TContext], | |
| system_prompt: Optional[str], | |
| input_items: list[TResponseInputItem], | |
| ) -> None: | |
| """Called immediately before the agent issues an LLM call.""" | |
| pass | |
| async def on_llm_end( | |
| self, | |
| context: RunContextWrapper[TContext], | |
| agent: Agent[TContext], | |
| response: ModelResponse, | |
| ) -> None: | |
| """Called immediately after the agent receives the LLM response.""" | |
| pass | |
| RunHooks = RunHooksBase[TContext, Agent] | |
| """Run hooks when using `Agent`.""" | |
| AgentHooks = AgentHooksBase[TContext, Agent] | |
| """Agent hooks for `Agent`s.""" | |