1818from ._run_context import AgentDepsT
1919from .agent import AbstractAgent , Agent
2020from .exceptions import UserError
21- from .messages import ModelMessage , ModelResponse
21+ from .messages import FunctionToolCallEvent , FunctionToolResultEvent , ModelMessage , ModelResponse
2222from .models import KnownModelName , infer_model
2323from .output import OutputDataT
2424
@@ -229,6 +229,7 @@ async def run_chat(
229229 config_dir : Path | None = None ,
230230 deps : AgentDepsT = None ,
231231 message_history : list [ModelMessage ] | None = None ,
232+ show_tool_calls : bool = False ,
232233) -> int :
233234 prompt_history_path = (config_dir or PYDANTIC_AI_HOME ) / PROMPT_HISTORY_FILENAME
234235 prompt_history_path .parent .mkdir (parents = True , exist_ok = True )
@@ -255,7 +256,7 @@ async def run_chat(
255256 return exit_value
256257 else :
257258 try :
258- messages = await ask_agent (agent , text , stream , console , code_theme , deps , messages )
259+ messages = await ask_agent (agent , text , stream , console , code_theme , deps , messages , show_tool_calls )
259260 except CancelledError : # pragma: no cover
260261 console .print ('[dim]Interrupted[/dim]' )
261262 except Exception as e : # pragma: no cover
@@ -273,6 +274,7 @@ async def ask_agent(
273274 code_theme : str ,
274275 deps : AgentDepsT = None ,
275276 messages : list [ModelMessage ] | None = None ,
277+ show_tool_calls : bool = False ,
276278) -> list [ModelMessage ]:
277279 status = Status ('[dim]Working on it…[/dim]' , console = console )
278280
@@ -294,6 +296,17 @@ async def ask_agent(
294296
295297 async for content in handle_stream .stream_output (debounce_by = None ):
296298 live .update (Markdown (str (content ), code_theme = code_theme ))
299+ elif show_tool_calls and Agent .is_call_tools_node (node ):
300+ async with node .stream (agent_run .ctx ) as handle_stream :
301+ async for event in handle_stream :
302+ if isinstance (event , FunctionToolCallEvent ):
303+ console .print (
304+ Markdown (f'[Tool] { event .part .tool_name !r} called with args={ event .part .args } ' )
305+ )
306+ elif isinstance (event , FunctionToolResultEvent ):
307+ console .print (
308+ Markdown (f'[Tool] { event .result .tool_name !r} returned => { event .result .content } ' )
309+ )
297310
298311 assert agent_run .result is not None
299312 return agent_run .result .all_messages ()
0 commit comments