Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit01c550c

Browse files
authored
chore: Fix inconsistent docs example output and fix variable name (#2248)
1 parent431ec33 commit01c550c

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

‎docs/toolsets.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,7 @@ It is is a no-op by default, but enables some useful abilities:
341341
You can subclass`WrapperToolset` to change the wrapped toolset's tool execution behavior by overriding the[`call_tool()`][pydantic_ai.toolsets.AbstractToolset.call_tool] method.
342342

343343
```python {title="logging_toolset.py" requires="function_toolset.py,combined_toolset.py,renamed_toolset.py,prepared_toolset.py"}
344+
import asyncio
344345
from typing_extensionsimport Any
345346

346347
from prepared_toolsetimport prepared_toolset
@@ -356,6 +357,8 @@ class LoggingToolset(WrapperToolset):
356357
asyncdefcall_tool(self,name:str,tool_args: dict[str, Any],ctx: RunContext,tool: ToolsetTool) -> Any:
357358
LOG.append(f'Calling tool{name!r} with args:{tool_args!r}')
358359
try:
360+
await asyncio.sleep(0.1*len(LOG))# (1)!
361+
359362
result=awaitsuper().call_tool(name, tool_args, ctx, tool)
360363
LOG.append(f'Finished calling tool{name!r} with result:{result!r}')
361364
exceptExceptionas e:
@@ -367,7 +370,7 @@ class LoggingToolset(WrapperToolset):
367370

368371
logging_toolset= LoggingToolset(prepared_toolset)
369372

370-
agent= Agent(TestModel(),toolsets=[logging_toolset])# (1)!
373+
agent= Agent(TestModel(),toolsets=[logging_toolset])# (2)!
371374
result= agent.run_sync('Call all the tools')
372375
print(LOG)
373376
"""
@@ -384,7 +387,8 @@ print(LOG)
384387
"""
385388
```
386389

387-
1. We use[`TestModel`][pydantic_ai.models.test.TestModel] here as it will automatically call each tool.
390+
1. All docs examples are tested in CI and their their output is verified, so we need`LOG` to always have the same order whenever this code is run. Since the tools could finish in any order, we sleep an increasing amount of time based on which number tool call we are to ensure that they finish (and log) in the same order they were called in.
391+
2. We use[`TestModel`][pydantic_ai.models.test.TestModel] here as it will automatically call each tool.
388392

389393
_(This example is complete, it can be run "as is")_
390394

‎pydantic_ai_slim/pydantic_ai/result.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
4949
_output_validators:list[OutputValidator[AgentDepsT,OutputDataT]]
5050
_run_ctx:RunContext[AgentDepsT]
5151
_usage_limits:UsageLimits|None
52-
_toolset:ToolManager[AgentDepsT]
52+
_tool_manager:ToolManager[AgentDepsT]
5353

5454
_agent_stream_iterator:AsyncIterator[AgentStreamEvent]|None=field(default=None,init=False)
5555
_final_result_event:FinalResultEvent|None=field(default=None,init=False)
@@ -111,8 +111,8 @@ async def _validate_response(
111111
raiseexceptions.UnexpectedModelBehavior(# pragma: no cover
112112
f'Invalid response, unable to find tool call for{output_tool_name!r}'
113113
)
114-
returnawaitself._toolset.handle_call(tool_call,allow_partial=allow_partial)
115-
elifdeferred_tool_calls:=self._toolset.get_deferred_tool_calls(message.parts):
114+
returnawaitself._tool_manager.handle_call(tool_call,allow_partial=allow_partial)
115+
elifdeferred_tool_calls:=self._tool_manager.get_deferred_tool_calls(message.parts):
116116
ifnotself._output_schema.allows_deferred_tool_calls:
117117
raiseexceptions.UserError(# pragma: no cover
118118
'A deferred tool call was present, but `DeferredToolCalls` is not among output types. To resolve this, add `DeferredToolCalls` to the list of output types for this agent.'
@@ -154,7 +154,7 @@ def _get_final_result_event(e: _messages.ModelResponseStreamEvent) -> _messages.
154154
):# pragma: no branch
155155
return_messages.FinalResultEvent(tool_name=None,tool_call_id=None)
156156
elifisinstance(new_part,_messages.ToolCallPart)and (
157-
tool_def:=self._toolset.get_tool_def(new_part.tool_name)
157+
tool_def:=self._tool_manager.get_tool_def(new_part.tool_name)
158158
):
159159
iftool_def.kind=='output':
160160
return_messages.FinalResultEvent(
@@ -196,7 +196,7 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
196196
_output_validators:list[OutputValidator[AgentDepsT,OutputDataT]]
197197
_output_tool_name:str|None
198198
_on_complete:Callable[[],Awaitable[None]]
199-
_toolset:ToolManager[AgentDepsT]
199+
_tool_manager:ToolManager[AgentDepsT]
200200

201201
_initial_run_ctx_usage:Usage=field(init=False)
202202
is_complete:bool=field(default=False,init=False)
@@ -443,8 +443,8 @@ async def validate_structured_output(
443443
raiseexceptions.UnexpectedModelBehavior(# pragma: no cover
444444
f'Invalid response, unable to find tool call for{self._output_tool_name!r}'
445445
)
446-
returnawaitself._toolset.handle_call(tool_call,allow_partial=allow_partial)
447-
elifdeferred_tool_calls:=self._toolset.get_deferred_tool_calls(message.parts):
446+
returnawaitself._tool_manager.handle_call(tool_call,allow_partial=allow_partial)
447+
elifdeferred_tool_calls:=self._tool_manager.get_deferred_tool_calls(message.parts):
448448
ifnotself._output_schema.allows_deferred_tool_calls:
449449
raiseexceptions.UserError(
450450
'A deferred tool call was present, but `DeferredToolCalls` is not among output types. To resolve this, add `DeferredToolCalls` to the list of output types for this agent.'

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp