pydantic-ai-slim 1.0.0b1__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
+ from asyncio import Lock
4
5
  from collections.abc import Callable, Sequence
5
6
  from contextlib import AsyncExitStack
6
7
  from dataclasses import dataclass, field, replace
7
8
  from typing import Any
8
9
 
9
- import anyio
10
10
  from typing_extensions import Self
11
11
 
12
12
  from .._run_context import AgentDepsT, RunContext
@@ -31,7 +31,7 @@ class CombinedToolset(AbstractToolset[AgentDepsT]):
31
31
 
32
32
  toolsets: Sequence[AbstractToolset[AgentDepsT]]
33
33
 
34
- _enter_lock: anyio.Lock = field(compare=False, init=False, default_factory=anyio.Lock)
34
+ _enter_lock: Lock = field(compare=False, init=False, default_factory=Lock)
35
35
  _entered_count: int = field(init=False, default=0)
36
36
  _exit_stack: AsyncExitStack | None = field(init=False, default=None)
37
37
 
@@ -33,9 +33,12 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
33
33
  See [toolset docs](../toolsets.md#function-toolset) for more information.
34
34
  """
35
35
 
36
- max_retries: int
37
36
  tools: dict[str, Tool[Any]]
37
+ max_retries: int
38
38
  _id: str | None
39
+ docstring_format: DocstringFormat
40
+ require_parameter_descriptions: bool
41
+ schema_generator: type[GenerateJsonSchema]
39
42
 
40
43
  def __init__(
41
44
  self,
@@ -43,16 +46,30 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
43
46
  *,
44
47
  max_retries: int = 1,
45
48
  id: str | None = None,
49
+ docstring_format: DocstringFormat = 'auto',
50
+ require_parameter_descriptions: bool = False,
51
+ schema_generator: type[GenerateJsonSchema] = GenerateToolJsonSchema,
46
52
  ):
47
53
  """Build a new function toolset.
48
54
 
49
55
  Args:
50
56
  tools: The tools to add to the toolset.
51
57
  max_retries: The maximum number of retries for each tool during a run.
52
- id: An optional unique ID for the toolset. A toolset needs to have an ID in order to be used in a durable execution environment like Temporal, in which case the ID will be used to identify the toolset's activities within the workflow.
58
+ id: An optional unique ID for the toolset. A toolset needs to have an ID in order to be used in a durable execution environment like Temporal,
59
+ in which case the ID will be used to identify the toolset's activities within the workflow.
60
+ docstring_format: Format of tool docstring, see [`DocstringFormat`][pydantic_ai.tools.DocstringFormat].
61
+ Defaults to `'auto'`, such that the format is inferred from the structure of the docstring.
62
+ Applies to all tools, unless overridden when adding a tool.
63
+ require_parameter_descriptions: If True, raise an error if a parameter description is missing. Defaults to False.
64
+ Applies to all tools, unless overridden when adding a tool.
65
+ schema_generator: The JSON schema generator class to use for this tool. Defaults to `GenerateToolJsonSchema`.
66
+ Applies to all tools, unless overridden when adding a tool.
53
67
  """
54
68
  self.max_retries = max_retries
55
69
  self._id = id
70
+ self.docstring_format = docstring_format
71
+ self.require_parameter_descriptions = require_parameter_descriptions
72
+ self.schema_generator = schema_generator
56
73
 
57
74
  self.tools = {}
58
75
  for tool in tools:
@@ -76,9 +93,9 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
76
93
  name: str | None = None,
77
94
  retries: int | None = None,
78
95
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
79
- docstring_format: DocstringFormat = 'auto',
80
- require_parameter_descriptions: bool = False,
81
- schema_generator: type[GenerateJsonSchema] = GenerateToolJsonSchema,
96
+ docstring_format: DocstringFormat | None = None,
97
+ require_parameter_descriptions: bool | None = None,
98
+ schema_generator: type[GenerateJsonSchema] | None = None,
82
99
  strict: bool | None = None,
83
100
  requires_approval: bool = False,
84
101
  ) -> Callable[[ToolFuncEither[AgentDepsT, ToolParams]], ToolFuncEither[AgentDepsT, ToolParams]]: ...
@@ -91,9 +108,9 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
91
108
  name: str | None = None,
92
109
  retries: int | None = None,
93
110
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
94
- docstring_format: DocstringFormat = 'auto',
95
- require_parameter_descriptions: bool = False,
96
- schema_generator: type[GenerateJsonSchema] = GenerateToolJsonSchema,
111
+ docstring_format: DocstringFormat | None = None,
112
+ require_parameter_descriptions: bool | None = None,
113
+ schema_generator: type[GenerateJsonSchema] | None = None,
97
114
  strict: bool | None = None,
98
115
  requires_approval: bool = False,
99
116
  ) -> Any:
@@ -137,13 +154,15 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
137
154
  tool from a given step. This is useful if you want to customise a tool at call time,
138
155
  or omit it completely from a step. See [`ToolPrepareFunc`][pydantic_ai.tools.ToolPrepareFunc].
139
156
  docstring_format: The format of the docstring, see [`DocstringFormat`][pydantic_ai.tools.DocstringFormat].
140
- Defaults to `'auto'`, such that the format is inferred from the structure of the docstring.
141
- require_parameter_descriptions: If True, raise an error if a parameter description is missing. Defaults to False.
142
- schema_generator: The JSON schema generator class to use for this tool. Defaults to `GenerateToolJsonSchema`.
157
+ If `None`, the default value is determined by the toolset.
158
+ require_parameter_descriptions: If True, raise an error if a parameter description is missing.
159
+ If `None`, the default value is determined by the toolset.
160
+ schema_generator: The JSON schema generator class to use for this tool.
161
+ If `None`, the default value is determined by the toolset.
143
162
  strict: Whether to enforce JSON schema compliance (only affects OpenAI).
144
163
  See [`ToolDefinition`][pydantic_ai.tools.ToolDefinition] for more info.
145
164
  requires_approval: Whether this tool requires human-in-the-loop approval. Defaults to False.
146
- See the [tools documentation](../tools.md#human-in-the-loop-tool-approval) for more info.
165
+ See the [tools documentation](../deferred-tools.md#human-in-the-loop-tool-approval) for more info.
147
166
  """
148
167
 
149
168
  def tool_decorator(
@@ -173,9 +192,9 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
173
192
  name: str | None = None,
174
193
  retries: int | None = None,
175
194
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
176
- docstring_format: DocstringFormat = 'auto',
177
- require_parameter_descriptions: bool = False,
178
- schema_generator: type[GenerateJsonSchema] = GenerateToolJsonSchema,
195
+ docstring_format: DocstringFormat | None = None,
196
+ require_parameter_descriptions: bool | None = None,
197
+ schema_generator: type[GenerateJsonSchema] | None = None,
179
198
  strict: bool | None = None,
180
199
  requires_approval: bool = False,
181
200
  ) -> None:
@@ -196,14 +215,23 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
196
215
  tool from a given step. This is useful if you want to customise a tool at call time,
197
216
  or omit it completely from a step. See [`ToolPrepareFunc`][pydantic_ai.tools.ToolPrepareFunc].
198
217
  docstring_format: The format of the docstring, see [`DocstringFormat`][pydantic_ai.tools.DocstringFormat].
199
- Defaults to `'auto'`, such that the format is inferred from the structure of the docstring.
200
- require_parameter_descriptions: If True, raise an error if a parameter description is missing. Defaults to False.
201
- schema_generator: The JSON schema generator class to use for this tool. Defaults to `GenerateToolJsonSchema`.
218
+ If `None`, the default value is determined by the toolset.
219
+ require_parameter_descriptions: If True, raise an error if a parameter description is missing.
220
+ If `None`, the default value is determined by the toolset.
221
+ schema_generator: The JSON schema generator class to use for this tool.
222
+ If `None`, the default value is determined by the toolset.
202
223
  strict: Whether to enforce JSON schema compliance (only affects OpenAI).
203
224
  See [`ToolDefinition`][pydantic_ai.tools.ToolDefinition] for more info.
204
225
  requires_approval: Whether this tool requires human-in-the-loop approval. Defaults to False.
205
- See the [tools documentation](../tools.md#human-in-the-loop-tool-approval) for more info.
226
+ See the [tools documentation](../deferred-tools.md#human-in-the-loop-tool-approval) for more info.
206
227
  """
228
+ if docstring_format is None:
229
+ docstring_format = self.docstring_format
230
+ if require_parameter_descriptions is None:
231
+ require_parameter_descriptions = self.require_parameter_descriptions
232
+ if schema_generator is None:
233
+ schema_generator = self.schema_generator
234
+
207
235
  tool = Tool[AgentDepsT](
208
236
  func,
209
237
  takes_ctx=takes_ctx,
pydantic_ai/usage.py CHANGED
@@ -3,7 +3,9 @@ from __future__ import annotations as _annotations
3
3
  import dataclasses
4
4
  from copy import copy
5
5
  from dataclasses import dataclass, fields
6
+ from typing import Annotated
6
7
 
8
+ from pydantic import AliasChoices, BeforeValidator, Field
7
9
  from typing_extensions import deprecated, overload
8
10
 
9
11
  from . import _utils
@@ -14,7 +16,11 @@ __all__ = 'RequestUsage', 'RunUsage', 'Usage', 'UsageLimits'
14
16
 
15
17
  @dataclass(repr=False, kw_only=True)
16
18
  class UsageBase:
17
- input_tokens: int = 0
19
+ input_tokens: Annotated[
20
+ int,
21
+ # `request_tokens` is deprecated, but we still want to support deserializing model responses stored in a DB before the name was changed
22
+ Field(validation_alias=AliasChoices('input_tokens', 'request_tokens')),
23
+ ] = 0
18
24
  """Number of input/prompt tokens."""
19
25
 
20
26
  cache_write_tokens: int = 0
@@ -22,7 +28,11 @@ class UsageBase:
22
28
  cache_read_tokens: int = 0
23
29
  """Number of tokens read from the cache."""
24
30
 
25
- output_tokens: int = 0
31
+ output_tokens: Annotated[
32
+ int,
33
+ # `response_tokens` is deprecated, but we still want to support deserializing model responses stored in a DB before the name was changed
34
+ Field(validation_alias=AliasChoices('output_tokens', 'response_tokens')),
35
+ ] = 0
26
36
  """Number of output/completion tokens."""
27
37
 
28
38
  input_audio_tokens: int = 0
@@ -32,7 +42,11 @@ class UsageBase:
32
42
  output_audio_tokens: int = 0
33
43
  """Number of audio output tokens."""
34
44
 
35
- details: dict[str, int] = dataclasses.field(default_factory=dict)
45
+ details: Annotated[
46
+ dict[str, int],
47
+ # `details` can not be `None` any longer, but we still want to support deserializing model responses stored in a DB before this was changed
48
+ BeforeValidator(lambda d: d or {}),
49
+ ] = dataclasses.field(default_factory=dict)
36
50
  """Any extra details returned by the model."""
37
51
 
38
52
  @property
@@ -117,6 +131,9 @@ class RunUsage(UsageBase):
117
131
  requests: int = 0
118
132
  """Number of requests made to the LLM API."""
119
133
 
134
+ tool_calls: int = 0
135
+ """Number of successful tool calls executed during the run."""
136
+
120
137
  input_tokens: int = 0
121
138
  """Total number of text input/prompt tokens."""
122
139
 
@@ -146,6 +163,7 @@ class RunUsage(UsageBase):
146
163
  """
147
164
  if isinstance(incr_usage, RunUsage):
148
165
  self.requests += incr_usage.requests
166
+ self.tool_calls += incr_usage.tool_calls
149
167
  return _incr_usage_tokens(self, incr_usage)
150
168
 
151
169
  def __add__(self, other: RunUsage | RequestUsage) -> RunUsage:
@@ -194,6 +212,8 @@ class UsageLimits:
194
212
 
195
213
  request_limit: int | None = 50
196
214
  """The maximum number of requests allowed to the model."""
215
+ tool_calls_limit: int | None = None
216
+ """The maximum number of successful tool calls allowed to be executed."""
197
217
  input_tokens_limit: int | None = None
198
218
  """The maximum number of input/prompt tokens allowed."""
199
219
  output_tokens_limit: int | None = None
@@ -220,12 +240,14 @@ class UsageLimits:
220
240
  self,
221
241
  *,
222
242
  request_limit: int | None = 50,
243
+ tool_calls_limit: int | None = None,
223
244
  input_tokens_limit: int | None = None,
224
245
  output_tokens_limit: int | None = None,
225
246
  total_tokens_limit: int | None = None,
226
247
  count_tokens_before_request: bool = False,
227
248
  ) -> None:
228
249
  self.request_limit = request_limit
250
+ self.tool_calls_limit = tool_calls_limit
229
251
  self.input_tokens_limit = input_tokens_limit
230
252
  self.output_tokens_limit = output_tokens_limit
231
253
  self.total_tokens_limit = total_tokens_limit
@@ -239,12 +261,14 @@ class UsageLimits:
239
261
  self,
240
262
  *,
241
263
  request_limit: int | None = 50,
264
+ tool_calls_limit: int | None = None,
242
265
  request_tokens_limit: int | None = None,
243
266
  response_tokens_limit: int | None = None,
244
267
  total_tokens_limit: int | None = None,
245
268
  count_tokens_before_request: bool = False,
246
269
  ) -> None:
247
270
  self.request_limit = request_limit
271
+ self.tool_calls_limit = tool_calls_limit
248
272
  self.input_tokens_limit = request_tokens_limit
249
273
  self.output_tokens_limit = response_tokens_limit
250
274
  self.total_tokens_limit = total_tokens_limit
@@ -254,6 +278,7 @@ class UsageLimits:
254
278
  self,
255
279
  *,
256
280
  request_limit: int | None = 50,
281
+ tool_calls_limit: int | None = None,
257
282
  input_tokens_limit: int | None = None,
258
283
  output_tokens_limit: int | None = None,
259
284
  total_tokens_limit: int | None = None,
@@ -263,6 +288,7 @@ class UsageLimits:
263
288
  response_tokens_limit: int | None = None,
264
289
  ):
265
290
  self.request_limit = request_limit
291
+ self.tool_calls_limit = tool_calls_limit
266
292
  self.input_tokens_limit = input_tokens_limit or request_tokens_limit
267
293
  self.output_tokens_limit = output_tokens_limit or response_tokens_limit
268
294
  self.total_tokens_limit = total_tokens_limit
@@ -314,4 +340,12 @@ class UsageLimits:
314
340
  if self.total_tokens_limit is not None and total_tokens > self.total_tokens_limit:
315
341
  raise UsageLimitExceeded(f'Exceeded the total_tokens_limit of {self.total_tokens_limit} ({total_tokens=})')
316
342
 
343
+ def check_before_tool_call(self, usage: RunUsage) -> None:
344
+ """Raises a `UsageLimitExceeded` exception if the next tool call would exceed the tool call limit."""
345
+ tool_calls_limit = self.tool_calls_limit
346
+ if tool_calls_limit is not None and usage.tool_calls >= tool_calls_limit:
347
+ raise UsageLimitExceeded(
348
+ f'The next tool call would exceed the tool_calls_limit of {tool_calls_limit} (tool_calls={usage.tool_calls})'
349
+ )
350
+
317
351
  __repr__ = _utils.dataclasses_no_defaults_repr
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 1.0.0b1
3
+ Version: 1.0.1
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs, slim package
5
5
  Project-URL: Homepage, https://github.com/pydantic/pydantic-ai/tree/main/pydantic_ai_slim
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai/tree/main/pydantic_ai_slim
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/pydantic/pydantic-ai/releases
9
9
  Author-email: Samuel Colvin <samuel@pydantic.dev>, Marcelo Trylesinski <marcelotryle@gmail.com>, David Montague <david@pydantic.dev>, Alex Hall <alex@pydantic.dev>, Douwe Maan <douwe@pydantic.dev>
10
10
  License-Expression: MIT
11
11
  License-File: LICENSE
12
- Classifier: Development Status :: 4 - Beta
12
+ Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Environment :: Console
14
14
  Classifier: Environment :: MacOS X
15
15
  Classifier: Intended Audience :: Developers
@@ -28,13 +28,12 @@ Classifier: Programming Language :: Python :: 3.13
28
28
  Classifier: Topic :: Internet
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Requires-Python: >=3.10
31
- Requires-Dist: eval-type-backport>=0.2.0
32
31
  Requires-Dist: exceptiongroup; python_version < '3.11'
33
32
  Requires-Dist: genai-prices>=0.0.22
34
33
  Requires-Dist: griffe>=1.3.2
35
34
  Requires-Dist: httpx>=0.27
36
35
  Requires-Dist: opentelemetry-api>=1.28.0
37
- Requires-Dist: pydantic-graph==1.0.0b1
36
+ Requires-Dist: pydantic-graph==1.0.1
38
37
  Requires-Dist: pydantic>=2.10
39
38
  Requires-Dist: typing-inspection>=0.4.0
40
39
  Provides-Extra: a2a
@@ -56,7 +55,7 @@ Requires-Dist: cohere>=5.16.0; (platform_system != 'Emscripten') and extra == 'c
56
55
  Provides-Extra: duckduckgo
57
56
  Requires-Dist: ddgs>=9.0.0; extra == 'duckduckgo'
58
57
  Provides-Extra: evals
59
- Requires-Dist: pydantic-evals==1.0.0b1; extra == 'evals'
58
+ Requires-Dist: pydantic-evals==1.0.1; extra == 'evals'
60
59
  Provides-Extra: google
61
60
  Requires-Dist: google-genai>=1.31.0; extra == 'google'
62
61
  Provides-Extra: groq
@@ -66,7 +65,7 @@ Requires-Dist: huggingface-hub[inference]>=0.33.5; extra == 'huggingface'
66
65
  Provides-Extra: logfire
67
66
  Requires-Dist: logfire[httpx]>=3.14.1; extra == 'logfire'
68
67
  Provides-Extra: mcp
69
- Requires-Dist: mcp>=1.12.3; (python_version >= '3.10') and extra == 'mcp'
68
+ Requires-Dist: mcp>=1.12.3; extra == 'mcp'
70
69
  Provides-Extra: mistral
71
70
  Requires-Dist: mistralai>=1.9.2; extra == 'mistral'
72
71
  Provides-Extra: openai
@@ -76,7 +75,7 @@ Requires-Dist: tenacity>=8.2.3; extra == 'retries'
76
75
  Provides-Extra: tavily
77
76
  Requires-Dist: tavily-python>=0.5.0; extra == 'tavily'
78
77
  Provides-Extra: temporal
79
- Requires-Dist: temporalio==1.16.0; extra == 'temporal'
78
+ Requires-Dist: temporalio==1.17.0; extra == 'temporal'
80
79
  Provides-Extra: vertexai
81
80
  Requires-Dist: google-auth>=2.36.0; extra == 'vertexai'
82
81
  Requires-Dist: requests>=2.32.2; extra == 'vertexai'
@@ -1,35 +1,35 @@
1
1
  pydantic_ai/__init__.py,sha256=CfqGPSjKlDl5iw1L48HbELsDuzxIzBFnFnovI_GcFWA,2083
2
2
  pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
3
- pydantic_ai/_a2a.py,sha256=wux52DmJQceLJwF71qxb0Uqupk3aS61m005-NmuWZIw,12164
4
- pydantic_ai/_agent_graph.py,sha256=88yPQWAfWt0gLWbnN82KU6-qBSPvuaebYeUopyetnQ8,46708
3
+ pydantic_ai/_a2a.py,sha256=2Hopcyl6o6U91eVkd7iAbEPYA5f0hJb8A5_fwMC0UfM,12168
4
+ pydantic_ai/_agent_graph.py,sha256=lgifW_LwNATj0usC4wfU32Z4PEsPNHcEbbHtzIj6Y_0,46620
5
5
  pydantic_ai/_cli.py,sha256=C-Uvbdx9wWnNqZKHN_r8d4mGte_aIPikOkKrTPvdrN8,14057
6
6
  pydantic_ai/_function_schema.py,sha256=olbmUMQoQV5qKV4j0-cOnhcTINz4uYyeDqMyusrFRtY,11234
7
7
  pydantic_ai/_griffe.py,sha256=BphvTL00FHxsSY56GM-bNyCOdwrpL0T3LbDQITWUK_Q,5280
8
8
  pydantic_ai/_mcp.py,sha256=PuvwnlLjv7YYOa9AZJCrklevBug99zGMhwJCBGG7BHQ,5626
9
9
  pydantic_ai/_otel_messages.py,sha256=qLu81aBDEAsUTW6efBzWRXNDMICTrUUBpcGbCEyXr4o,1480
10
10
  pydantic_ai/_output.py,sha256=0Oq-FFvxXdR0Ia_8LrJ1CanGOWkI5C98HfdkY8TZhik,37442
11
- pydantic_ai/_parts_manager.py,sha256=93iz8qEiAeiaWSIKhw5R1IgM_TT7U0aCCmya_UYQnzE,17965
11
+ pydantic_ai/_parts_manager.py,sha256=SZi2_G9Z5Z9BLuInfgcki9p5yUhVjR38WcxfuOoECLA,18057
12
12
  pydantic_ai/_run_context.py,sha256=AFSTtOBbUAnPpM-V5_b5fLMVAFbEBX4oOdYsGR9ayt4,1824
13
13
  pydantic_ai/_system_prompt.py,sha256=WdDW_DTGHujcFFaK-J7J6mA4ZDJZ0IOKpyizJA-1Y5Q,1142
14
14
  pydantic_ai/_thinking_part.py,sha256=x80-Vkon16GOyq3W6f2qzafTVPC5dCgF7QD3k8ZMmYU,1304
15
- pydantic_ai/_tool_manager.py,sha256=WOpyKN6NNWGqLLxyNg0K_YEDde8b6-0rGSddfyULTFw,8826
15
+ pydantic_ai/_tool_manager.py,sha256=YUTA9uJneug_vkxCGrTc34Qxyzz2dAuDNt5n4x2k0zA,9513
16
16
  pydantic_ai/_utils.py,sha256=xa2PoAcTN-oXhfXOONOighmue-jtSv668o9Fu_IdO0A,16062
17
- pydantic_ai/ag_ui.py,sha256=6gPKLi2I1cE9IyFnT-0oQPkKo9W5OCxEpmrQS9yf7Pg,26492
17
+ pydantic_ai/ag_ui.py,sha256=L21cc_LN532psY70GNgJNaj-PtBpLgqARJBF1zb2ZX4,28127
18
18
  pydantic_ai/builtin_tools.py,sha256=t0wa6KsgDCRoZMKJKRzRDyxaz1X4mDWMHlGjQmqFLdg,3222
19
19
  pydantic_ai/direct.py,sha256=zMsz6poVgEq7t7L_8FWM6hmKdqTzjyQYL5xzQt_59Us,14951
20
- pydantic_ai/exceptions.py,sha256=TiTMjarqk0NO9RfxB60rtvHTbsqV1kaa7UQjy3so8eQ,4950
20
+ pydantic_ai/exceptions.py,sha256=zsXZMKf2BJuVsfuHl1fWTkogLU37bd4yq7D6BKHAzVs,4968
21
21
  pydantic_ai/format_prompt.py,sha256=37imBG2Fgpn-_RfAFalOX8Xc_XpGH2gY9tnhJDvxfk8,4243
22
- pydantic_ai/mcp.py,sha256=R1FnePn3bjvu5atZBGwSZTzFXbbm4ScFw7uX8-QpyQ4,30655
23
- pydantic_ai/messages.py,sha256=ODP2bBlTleWvx-arLfbr6TF_dpzb0_OG_CD5j0lZ3a4,51836
22
+ pydantic_ai/mcp.py,sha256=1sKEgd8Eue5vWaUyU-s3TWlOaH6rfXetsuz_sHYorXE,30384
23
+ pydantic_ai/messages.py,sha256=5SeqvRf0dMe3BTEtvTHTmcm3MMz7PIq5zIS6RRAhtIg,54544
24
24
  pydantic_ai/output.py,sha256=wzNgVKJgxyXtSH-uNbRxIaUNLidxlQcwWYT2o1gY2hE,12037
25
25
  pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  pydantic_ai/result.py,sha256=FrJbd0nwaRVIxGH_EhV-ITQvrrd-JaDya9EDsE5-Pps,25389
27
- pydantic_ai/retries.py,sha256=yHpeDvNX0t3daHgXlDCk7qY5DmJmkNmtJbNtgM00kpU,13463
27
+ pydantic_ai/retries.py,sha256=QM4oDA9DG-Y2qP06fbCp8Dqq8ups40Rr4HYjAOlbNyM,14650
28
28
  pydantic_ai/run.py,sha256=qpTu2Q2O3lvcQAZREuIpyL0vQN13AvW99SwD7Oe9hKc,15175
29
29
  pydantic_ai/settings.py,sha256=yuUZ7-GkdPB-Gbx71kSdh8dSr6gwM9gEwk84qNxPO_I,3552
30
- pydantic_ai/tools.py,sha256=O7Xv6V3LPpgerQwVAnut3oaIVE99_E9MunWosfehhUw,19106
31
- pydantic_ai/usage.py,sha256=l2X6JDIpuRvEj9gMdy5MSxRlJJxstqfU07o5T-15EJ8,12234
32
- pydantic_ai/agent/__init__.py,sha256=vdeKUuAqBNmz0t-CHV4rwmnPWPWP_X4ddFeJLw7y0KE,62331
30
+ pydantic_ai/tools.py,sha256=SFiLSHc4TwlhZ73nPpjd4etVovsSyPcYEQ9520Gz8xI,19169
31
+ pydantic_ai/usage.py,sha256=UoSOwhH-NTAeXl7Tq8GWXcW82m8zQLQvThvQehEx08g,14070
32
+ pydantic_ai/agent/__init__.py,sha256=FLlpv4-j0-94xEMA5GV4HGz7K3Y1zrMb_cVvlp-XDNs,62321
33
33
  pydantic_ai/agent/abstract.py,sha256=nKDP_T0hRhi1RGVNIcAQbmQkTrwGWbTxt_Lzwfa7cPs,44291
34
34
  pydantic_ai/agent/wrapper.py,sha256=--IJo8Yb-2uzcCBSIB9oB_9FQ1R7yZYkWnLSq0iUExs,9464
35
35
  pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -37,7 +37,7 @@ pydantic_ai/common_tools/duckduckgo.py,sha256=cJd-BUg-i50E0QjKveRCndGlU5GdvLq9Ug
37
37
  pydantic_ai/common_tools/tavily.py,sha256=Q1xxSF5HtXAaZ10Pp-OaDOHXwJf2mco9wScGEQXD7E4,2495
38
38
  pydantic_ai/durable_exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  pydantic_ai/durable_exec/temporal/__init__.py,sha256=XKwy68wfgmjr057nolRwGHTKiadxufpQEGEUprAV09k,5563
40
- pydantic_ai/durable_exec/temporal/_agent.py,sha256=ikmnIbmam9jgwVtIBHJhwnHV1xRsMTYq6LOy3ENNH2w,34269
40
+ pydantic_ai/durable_exec/temporal/_agent.py,sha256=9-yANaXqbOELkvTu_zeJI5tROKUY2t9-WYUIksSmzD8,36901
41
41
  pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=Hnfz3ukOqgq8j3h9u97S-fMfq4un1HZA4kxN2irWD_0,5562
42
42
  pydantic_ai/durable_exec/temporal/_logfire.py,sha256=5bSiOt-jihQATJsg-jrGmEqP3RWW_Sz6c2aicjt03lI,2009
43
43
  pydantic_ai/durable_exec/temporal/_mcp_server.py,sha256=VFvHPVhvYz-ITGaXXNyuWwB8tsdF3Hg9rs7gss8TKWY,6032
@@ -47,20 +47,20 @@ pydantic_ai/durable_exec/temporal/_toolset.py,sha256=HxmQ5vut7Zd5eyrC27eNNn5_CHA
47
47
  pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  pydantic_ai/ext/aci.py,sha256=sUllKDNO-LOMurbFgxwRHuzNlBkSa3aVBqXfEm-A_vo,2545
49
49
  pydantic_ai/ext/langchain.py,sha256=iLVEZv1kcLkdIHo3us2yfdi0kVqyJ6qTaCt9BoLWm4k,2335
50
- pydantic_ai/models/__init__.py,sha256=6a0aV10GtVMDDAWx9m-yNx6d5412RiB3UYpY9peHEmc,35673
51
- pydantic_ai/models/anthropic.py,sha256=FopzBRBuOOaLdO-eKSsG_GMlkawquxmXVvlyWyeZNGU,30447
52
- pydantic_ai/models/bedrock.py,sha256=Q-Hwi98cNbRaA_-y_1B1fG0_ROm5Hby0dCfMk6Nps1E,31242
50
+ pydantic_ai/models/__init__.py,sha256=BmZ4kyiGIjsapj7cmKc6uF4EEOnuN6iiDumuOeGfxOk,35692
51
+ pydantic_ai/models/anthropic.py,sha256=IsHBwJ55IYor27sewq039rc923fqi3AUWXAS_vbA978,30286
52
+ pydantic_ai/models/bedrock.py,sha256=Eeq-rqZWaVu2tbH8eSNoxp5dq5RH8esnsOp-ge_XGu4,30786
53
53
  pydantic_ai/models/cohere.py,sha256=aKgpcYfIKwMfEroWxfLyzYu8ELuddF4TXv7s0LU3Pcc,13052
54
54
  pydantic_ai/models/fallback.py,sha256=XJ74wRxVT4dF0uewHH3is9I-zcLBK8KFIhpK3BB6mRw,5526
55
55
  pydantic_ai/models/function.py,sha256=uWGdw4sFhhmczjU44rwe6i2XFafOXAalIigWGCSivYg,14231
56
- pydantic_ai/models/gemini.py,sha256=3juGw-1A4IP5IO7q1fIcTqPc-diLmYIDU_HFJth7GBY,39298
57
- pydantic_ai/models/google.py,sha256=URRct-s9hhLppJyKsA7oF2AgzqNYH6napkD_BYEsm-g,31395
58
- pydantic_ai/models/groq.py,sha256=1JsBwH4agvto3MKF5IiOUkoCUM2ho_FQWfbqxkOPSQI,21196
56
+ pydantic_ai/models/gemini.py,sha256=DYEaOnwGmo9FUGVkRRrydGuQwYhnO-Cq5grTurLWgb4,39376
57
+ pydantic_ai/models/google.py,sha256=cqU6eBMmSZvkeeaEPlJVhkRxN7L5vi4EfyWabZkgP5g,32102
58
+ pydantic_ai/models/groq.py,sha256=am-Qpp6RLFqwRnouIdACWd5nxOBB92Bn0hRs-VdrD38,25561
59
59
  pydantic_ai/models/huggingface.py,sha256=sWjHTVfqOtdlOENdERkPxtGjQ8quUNepPjqlXSR7aGk,20417
60
- pydantic_ai/models/instrumented.py,sha256=sGzQlWTxMkGHMt1G63f0XRMkURFzV_xsmpTRhLlqNRw,20509
60
+ pydantic_ai/models/instrumented.py,sha256=t9ESv5XMqJ4OWkTp3JoIcaCzlnW7pktelQVmX5fpySM,20763
61
61
  pydantic_ai/models/mcp_sampling.py,sha256=qnLCO3CB5bNQ86SpWRA-CSSOVcCCLPwjHtcNFvW9wHs,3461
62
62
  pydantic_ai/models/mistral.py,sha256=yS5pBYtFUkICwkvGN23iBbBfaBASN1DARsB6QQbBjOc,32344
63
- pydantic_ai/models/openai.py,sha256=5DI1LdoPHkU0XHvqywavJswHiJd1k9B-JPfadiSJhGQ,64674
63
+ pydantic_ai/models/openai.py,sha256=vyePy3s_pI0gnkizas1Vfbiy8PI2_5skNcsnG03Fzas,64818
64
64
  pydantic_ai/models/test.py,sha256=1kBwi7pSUt9_K1U-hokOilplxJWPQ3KRKH_s8bYmt_s,19969
65
65
  pydantic_ai/models/wrapper.py,sha256=9MeHW7mXPsEK03IKL0rtjeX6QgXyZROOOzLh72GiX2k,2148
66
66
  pydantic_ai/profiles/__init__.py,sha256=V6uGAVJuIaYRuZOQjkdIyFfDKD5py18RC98njnHOFug,3293
@@ -78,7 +78,7 @@ pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzC
78
78
  pydantic_ai/profiles/moonshotai.py,sha256=e1RJnbEvazE6aJAqfmYLYGNtwNwg52XQDRDkcLrv3fU,272
79
79
  pydantic_ai/profiles/openai.py,sha256=4w-xzTfn6PKQwmT-Cc13Wit9UcYGapo6eD1q8LgUHRU,9038
80
80
  pydantic_ai/profiles/qwen.py,sha256=9SnTpMKndxNQMFyumyaOczJa5JGWbYQdpVKKW4OzKjk,749
81
- pydantic_ai/providers/__init__.py,sha256=vjXQTkGoZh1z_fsbP-K_VMKASnkL6Z4W93r4c6yD6f0,4369
81
+ pydantic_ai/providers/__init__.py,sha256=QlFpPM_kGnF_YAzwB9Dgmxx4Emp33x0bh831H_xKDXE,4478
82
82
  pydantic_ai/providers/anthropic.py,sha256=bDFNAE4WB66Dn7YDnI3dv6yBbMmM9Kzt2kalM4Fq8WQ,3158
83
83
  pydantic_ai/providers/azure.py,sha256=msYyeQoHATxCJkiF1N05lPSJivh-SWKK1463WF6xTK4,5823
84
84
  pydantic_ai/providers/bedrock.py,sha256=nN5CQ0XOQHp8FSlS7KCjn-p1hYcx0zVeLcMu_tAbvz8,5825
@@ -89,11 +89,12 @@ pydantic_ai/providers/fireworks.py,sha256=-jMRxbt353nENdpxuDpC4zJZ9wlJBcWa4wdcUk
89
89
  pydantic_ai/providers/github.py,sha256=Mp6-piXuRe5R0Iu4p0N06aIZgX7rJe5KRzCjt9E4OK4,4378
90
90
  pydantic_ai/providers/google.py,sha256=iLXcKUl5r7wdLuZtT1IM3obGZi7ecLM_PDyWdQKDncI,6038
91
91
  pydantic_ai/providers/google_gla.py,sha256=dLkDxps5gEtxsQiDbs1e88lXLYeX4i2qnJtDiFFJ0Ng,1965
92
- pydantic_ai/providers/google_vertex.py,sha256=9wJGctzQTEtmTTr3KCFAubDREMQJ4zOXt9k52F8R8Zs,9739
92
+ pydantic_ai/providers/google_vertex.py,sha256=tAR3L1DZPDvGOJsKyGkIRPeXL7wjly4CvqTWMK1ozVQ,9752
93
93
  pydantic_ai/providers/grok.py,sha256=s9Y_iYkYCBc7UbP2ppGOUdAP_04xrkmPBHq3q3Qr9eE,3109
94
- pydantic_ai/providers/groq.py,sha256=y3D76uOrT6V2yrZAt9STNjV2QJgXYDE5kZiNrSuJcPk,4027
94
+ pydantic_ai/providers/groq.py,sha256=3XuYqvugToJhTf7kQCdtdaTpFsiqAu_pwnIQnHm04uo,4913
95
95
  pydantic_ai/providers/heroku.py,sha256=wA36vh0ldpdaj33FPtfo4roY_MhaCqErjLyGtcbC6Xs,2958
96
96
  pydantic_ai/providers/huggingface.py,sha256=MLAv-Z99Kii5Faolq97_0Ir1LUKH9CwRmJFaI5RvwW4,4914
97
+ pydantic_ai/providers/litellm.py,sha256=3hTCjHWRG_1c4S9JSNm0BDBDi4q6BVVZ3OLSXhTndNM,5079
97
98
  pydantic_ai/providers/mistral.py,sha256=ZxfOQNB2RADtHeGLQrhxHwq6cXpBi3LMgIUa_9wXoug,3088
98
99
  pydantic_ai/providers/moonshotai.py,sha256=LwasmxCZCPkq1pb1uDtZTEb_nE55bAtX3QXgLmuNlHE,3260
99
100
  pydantic_ai/providers/ollama.py,sha256=_bxons0p8g0RSPNV8iq3AScVS1ym27QTW4zhDqSakgY,4633
@@ -105,16 +106,16 @@ pydantic_ai/toolsets/__init__.py,sha256=lYwnxjSqxY6rIYYDTDctyWPckDwnRX_9orvqY2Ap
105
106
  pydantic_ai/toolsets/_dynamic.py,sha256=ETAtKW2A_aFjSIPO3pRIZNKH54qNfHQB7WtmEjWqHzc,2939
106
107
  pydantic_ai/toolsets/abstract.py,sha256=CXsDF37JkBWcy9hwrgdBe4gqgocNcPKOFEIvQ7t9Ysk,7751
107
108
  pydantic_ai/toolsets/approval_required.py,sha256=zyYGEx2VqprLed16OXg1QWr81rnAB0CmAzTeyQJ9A4o,1100
108
- pydantic_ai/toolsets/combined.py,sha256=rDV_BZA_nA-KavKQRNVr8UeyBgl722Ler4DgJ071eus,4026
109
+ pydantic_ai/toolsets/combined.py,sha256=LQzm_g6gskiHRUMFDvm88SSrz8OGxbdxyHiKzQrMBNU,4026
109
110
  pydantic_ai/toolsets/external.py,sha256=J9mWQm1HLbRCOJwpLBIvUZZGR_ywSB7pz8MrXkRNBoU,1736
110
111
  pydantic_ai/toolsets/filtered.py,sha256=PSQG9EbBYJpHUEBb_4TGzhjAcQPo5aPKvTuReeoWYtQ,864
111
- pydantic_ai/toolsets/function.py,sha256=UaOKde9oSgsAD9deKmsXAgFUjP0NLtszwB7dWBR4vP8,11256
112
+ pydantic_ai/toolsets/function.py,sha256=D_NllIGtC4P4Q8QAxH82743ykbUaSTtQp-HpOSFaRgk,12907
112
113
  pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fbh5s,1426
113
114
  pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
114
115
  pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
115
116
  pydantic_ai/toolsets/wrapper.py,sha256=KRzF1p8dncHbva8CE6Ud-IC5E_aygIHlwH5atXK55k4,1673
116
- pydantic_ai_slim-1.0.0b1.dist-info/METADATA,sha256=GiZKoqdpAp_yp27ubFmzx_Xy_2ofztmGk-zblcwLVm8,4625
117
- pydantic_ai_slim-1.0.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
118
- pydantic_ai_slim-1.0.0b1.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
119
- pydantic_ai_slim-1.0.0b1.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
120
- pydantic_ai_slim-1.0.0b1.dist-info/RECORD,,
117
+ pydantic_ai_slim-1.0.1.dist-info/METADATA,sha256=beC4C6p-tWvSREm7AswqtdcoZW9s8ua-cEK6r76SG_8,4560
118
+ pydantic_ai_slim-1.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
119
+ pydantic_ai_slim-1.0.1.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
120
+ pydantic_ai_slim-1.0.1.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
121
+ pydantic_ai_slim-1.0.1.dist-info/RECORD,,