18
18
from ._run_context import AgentDepsT
19
19
from .agent import AbstractAgent , Agent
20
20
from .exceptions import UserError
21
- from .messages import ModelMessage , ModelResponse
21
+ from .messages import FunctionToolCallEvent , FunctionToolResultEvent , ModelMessage , ModelResponse
22
22
from .models import KnownModelName , infer_model
23
23
from .output import OutputDataT
24
24
@@ -229,6 +229,7 @@ async def run_chat(
229
229
config_dir : Path | None = None ,
230
230
deps : AgentDepsT = None ,
231
231
message_history : list [ModelMessage ] | None = None ,
232
+ show_tool_calls : bool = False ,
232
233
) -> int :
233
234
prompt_history_path = (config_dir or PYDANTIC_AI_HOME ) / PROMPT_HISTORY_FILENAME
234
235
prompt_history_path .parent .mkdir (parents = True , exist_ok = True )
@@ -255,7 +256,7 @@ async def run_chat(
255
256
return exit_value
256
257
else :
257
258
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 )
259
260
except CancelledError : # pragma: no cover
260
261
console .print ('[dim]Interrupted[/dim]' )
261
262
except Exception as e : # pragma: no cover
@@ -273,6 +274,7 @@ async def ask_agent(
273
274
code_theme : str ,
274
275
deps : AgentDepsT = None ,
275
276
messages : list [ModelMessage ] | None = None ,
277
+ show_tool_calls : bool = False ,
276
278
) -> list [ModelMessage ]:
277
279
status = Status ('[dim]Working on it…[/dim]' , console = console )
278
280
@@ -294,6 +296,17 @@ async def ask_agent(
294
296
295
297
async for content in handle_stream .stream_output (debounce_by = None ):
296
298
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
+ )
297
310
298
311
assert agent_run .result is not None
299
312
return agent_run .result .all_messages ()
0 commit comments