pydantic-ai-slim 1.0.18__py3-none-any.whl → 1.2.0__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.

Potentially problematic release.


This version of pydantic-ai-slim might be problematic. Click here for more details.

@@ -600,7 +600,7 @@ class OpenAIChatModel(Model):
600
600
 
601
601
  return ModelResponse(
602
602
  parts=items,
603
- usage=_map_usage(response),
603
+ usage=_map_usage(response, self._provider.name, self._provider.base_url, self._model_name),
604
604
  model_name=response.model,
605
605
  timestamp=timestamp,
606
606
  provider_details=vendor_details or None,
@@ -631,6 +631,7 @@ class OpenAIChatModel(Model):
631
631
  _response=peekable_response,
632
632
  _timestamp=number_to_datetime(first_chunk.created),
633
633
  _provider_name=self._provider.name,
634
+ _provider_url=self._provider.base_url,
634
635
  )
635
636
 
636
637
  def _get_tools(self, model_request_parameters: ModelRequestParameters) -> list[chat.ChatCompletionToolParam]:
@@ -1061,7 +1062,7 @@ class OpenAIResponsesModel(Model):
1061
1062
 
1062
1063
  return ModelResponse(
1063
1064
  parts=items,
1064
- usage=_map_usage(response),
1065
+ usage=_map_usage(response, self._provider.name, self._provider.base_url, self._model_name),
1065
1066
  model_name=response.model,
1066
1067
  provider_response_id=response.id,
1067
1068
  timestamp=timestamp,
@@ -1088,6 +1089,7 @@ class OpenAIResponsesModel(Model):
1088
1089
  _response=peekable_response,
1089
1090
  _timestamp=number_to_datetime(first_chunk.response.created_at),
1090
1091
  _provider_name=self._provider.name,
1092
+ _provider_url=self._provider.base_url,
1091
1093
  )
1092
1094
 
1093
1095
  @overload
@@ -1589,10 +1591,11 @@ class OpenAIStreamedResponse(StreamedResponse):
1589
1591
  _response: AsyncIterable[ChatCompletionChunk]
1590
1592
  _timestamp: datetime
1591
1593
  _provider_name: str
1594
+ _provider_url: str
1592
1595
 
1593
1596
  async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
1594
1597
  async for chunk in self._response:
1595
- self._usage += _map_usage(chunk)
1598
+ self._usage += _map_usage(chunk, self._provider_name, self._provider_url, self._model_name)
1596
1599
 
1597
1600
  if chunk.id: # pragma: no branch
1598
1601
  self.provider_response_id = chunk.id
@@ -1683,12 +1686,13 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1683
1686
  _response: AsyncIterable[responses.ResponseStreamEvent]
1684
1687
  _timestamp: datetime
1685
1688
  _provider_name: str
1689
+ _provider_url: str
1686
1690
 
1687
1691
  async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]: # noqa: C901
1688
1692
  async for chunk in self._response:
1689
1693
  # NOTE: You can inspect the builtin tools used checking the `ResponseCompletedEvent`.
1690
1694
  if isinstance(chunk, responses.ResponseCompletedEvent):
1691
- self._usage += _map_usage(chunk.response)
1695
+ self._usage += self._map_usage(chunk.response)
1692
1696
 
1693
1697
  raw_finish_reason = (
1694
1698
  details.reason if (details := chunk.response.incomplete_details) else chunk.response.status
@@ -1708,7 +1712,7 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1708
1712
  self.provider_response_id = chunk.response.id
1709
1713
 
1710
1714
  elif isinstance(chunk, responses.ResponseFailedEvent): # pragma: no cover
1711
- self._usage += _map_usage(chunk.response)
1715
+ self._usage += self._map_usage(chunk.response)
1712
1716
 
1713
1717
  elif isinstance(chunk, responses.ResponseFunctionCallArgumentsDeltaEvent):
1714
1718
  maybe_event = self._parts_manager.handle_tool_call_delta(
@@ -1722,10 +1726,10 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1722
1726
  pass # there's nothing we need to do here
1723
1727
 
1724
1728
  elif isinstance(chunk, responses.ResponseIncompleteEvent): # pragma: no cover
1725
- self._usage += _map_usage(chunk.response)
1729
+ self._usage += self._map_usage(chunk.response)
1726
1730
 
1727
1731
  elif isinstance(chunk, responses.ResponseInProgressEvent):
1728
- self._usage += _map_usage(chunk.response)
1732
+ self._usage += self._map_usage(chunk.response)
1729
1733
 
1730
1734
  elif isinstance(chunk, responses.ResponseOutputItemAddedEvent):
1731
1735
  if isinstance(chunk.item, responses.ResponseFunctionToolCall):
@@ -1906,6 +1910,9 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1906
1910
  UserWarning,
1907
1911
  )
1908
1912
 
1913
+ def _map_usage(self, response: responses.Response):
1914
+ return _map_usage(response, self._provider_name, self._provider_url, self._model_name)
1915
+
1909
1916
  @property
1910
1917
  def model_name(self) -> OpenAIModelName:
1911
1918
  """Get the model name of the response."""
@@ -1922,55 +1929,45 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1922
1929
  return self._timestamp
1923
1930
 
1924
1931
 
1925
- def _map_usage(response: chat.ChatCompletion | ChatCompletionChunk | responses.Response) -> usage.RequestUsage:
1932
+ def _map_usage(
1933
+ response: chat.ChatCompletion | ChatCompletionChunk | responses.Response,
1934
+ provider: str,
1935
+ provider_url: str,
1936
+ model: str,
1937
+ ) -> usage.RequestUsage:
1926
1938
  response_usage = response.usage
1927
1939
  if response_usage is None:
1928
1940
  return usage.RequestUsage()
1929
- elif isinstance(response_usage, responses.ResponseUsage):
1930
- details: dict[str, int] = {
1931
- key: value
1932
- for key, value in response_usage.model_dump(
1933
- exclude={'input_tokens', 'output_tokens', 'total_tokens'}
1934
- ).items()
1935
- if isinstance(value, int)
1936
- }
1937
- # Handle vLLM compatibility - some providers don't include token details
1938
- if getattr(response_usage, 'input_tokens_details', None) is not None:
1939
- cache_read_tokens = response_usage.input_tokens_details.cached_tokens
1940
- else:
1941
- cache_read_tokens = 0
1941
+
1942
+ usage_data = response_usage.model_dump(exclude_none=True)
1943
+ details = {
1944
+ k: v
1945
+ for k, v in usage_data.items()
1946
+ if k not in {'prompt_tokens', 'completion_tokens', 'input_tokens', 'output_tokens', 'total_tokens'}
1947
+ if isinstance(v, int)
1948
+ }
1949
+ response_data = dict(model=model, usage=usage_data)
1950
+ if isinstance(response_usage, responses.ResponseUsage):
1951
+ api_flavor = 'responses'
1942
1952
 
1943
1953
  if getattr(response_usage, 'output_tokens_details', None) is not None:
1944
1954
  details['reasoning_tokens'] = response_usage.output_tokens_details.reasoning_tokens
1945
1955
  else:
1946
1956
  details['reasoning_tokens'] = 0
1947
-
1948
- return usage.RequestUsage(
1949
- input_tokens=response_usage.input_tokens,
1950
- output_tokens=response_usage.output_tokens,
1951
- cache_read_tokens=cache_read_tokens,
1952
- details=details,
1953
- )
1954
1957
  else:
1955
- details = {
1956
- key: value
1957
- for key, value in response_usage.model_dump(
1958
- exclude_none=True, exclude={'prompt_tokens', 'completion_tokens', 'total_tokens'}
1959
- ).items()
1960
- if isinstance(value, int)
1961
- }
1962
- u = usage.RequestUsage(
1963
- input_tokens=response_usage.prompt_tokens,
1964
- output_tokens=response_usage.completion_tokens,
1965
- details=details,
1966
- )
1958
+ api_flavor = 'chat'
1959
+
1967
1960
  if response_usage.completion_tokens_details is not None:
1968
1961
  details.update(response_usage.completion_tokens_details.model_dump(exclude_none=True))
1969
- u.output_audio_tokens = response_usage.completion_tokens_details.audio_tokens or 0
1970
- if response_usage.prompt_tokens_details is not None:
1971
- u.input_audio_tokens = response_usage.prompt_tokens_details.audio_tokens or 0
1972
- u.cache_read_tokens = response_usage.prompt_tokens_details.cached_tokens or 0
1973
- return u
1962
+
1963
+ return usage.RequestUsage.extract(
1964
+ response_data,
1965
+ provider=provider,
1966
+ provider_url=provider_url,
1967
+ provider_fallback='openai',
1968
+ api_flavor=api_flavor,
1969
+ details=details,
1970
+ )
1974
1971
 
1975
1972
 
1976
1973
  def _split_combined_tool_call_id(combined_id: str) -> tuple[str, str | None]:
@@ -4,7 +4,6 @@ from __future__ import annotations as _annotations
4
4
 
5
5
  import os
6
6
  from typing import TYPE_CHECKING, Any, Literal, overload
7
- from urllib.parse import urljoin
8
7
 
9
8
  import httpx
10
9
 
@@ -84,22 +83,22 @@ def gateway_provider(
84
83
  ' to use the Pydantic AI Gateway provider.'
85
84
  )
86
85
 
87
- base_url = base_url or os.getenv('PYDANTIC_AI_GATEWAY_BASE_URL', 'http://localhost:8787')
86
+ base_url = base_url or os.getenv('PYDANTIC_AI_GATEWAY_BASE_URL', 'https://gateway.pydantic.dev/proxy')
88
87
  http_client = http_client or cached_async_http_client(provider=f'gateway-{upstream_provider}')
89
88
  http_client.event_hooks = {'request': [_request_hook]}
90
89
 
91
90
  if upstream_provider in ('openai', 'openai-chat'):
92
91
  from .openai import OpenAIProvider
93
92
 
94
- return OpenAIProvider(api_key=api_key, base_url=urljoin(base_url, 'openai'), http_client=http_client)
93
+ return OpenAIProvider(api_key=api_key, base_url=_merge_url_path(base_url, 'openai'), http_client=http_client)
95
94
  elif upstream_provider == 'openai-responses':
96
95
  from .openai import OpenAIProvider
97
96
 
98
- return OpenAIProvider(api_key=api_key, base_url=urljoin(base_url, 'openai'), http_client=http_client)
97
+ return OpenAIProvider(api_key=api_key, base_url=_merge_url_path(base_url, 'openai'), http_client=http_client)
99
98
  elif upstream_provider == 'groq':
100
99
  from .groq import GroqProvider
101
100
 
102
- return GroqProvider(api_key=api_key, base_url=urljoin(base_url, 'groq'), http_client=http_client)
101
+ return GroqProvider(api_key=api_key, base_url=_merge_url_path(base_url, 'groq'), http_client=http_client)
103
102
  elif upstream_provider == 'anthropic':
104
103
  from anthropic import AsyncAnthropic
105
104
 
@@ -108,7 +107,7 @@ def gateway_provider(
108
107
  return AnthropicProvider(
109
108
  anthropic_client=AsyncAnthropic(
110
109
  auth_token=api_key,
111
- base_url=urljoin(base_url, 'anthropic'),
110
+ base_url=_merge_url_path(base_url, 'anthropic'),
112
111
  http_client=http_client,
113
112
  )
114
113
  )
@@ -122,7 +121,7 @@ def gateway_provider(
122
121
  vertexai=True,
123
122
  api_key='unset',
124
123
  http_options={
125
- 'base_url': f'{base_url}/google-vertex',
124
+ 'base_url': _merge_url_path(base_url, 'google-vertex'),
126
125
  'headers': {'User-Agent': get_user_agent(), 'Authorization': api_key},
127
126
  # TODO(Marcelo): Until https://github.com/googleapis/python-genai/issues/1357 is solved.
128
127
  'async_client_args': {
@@ -185,3 +184,13 @@ async def _request_hook(request: httpx.Request) -> httpx.Request:
185
184
  request.headers.update(headers)
186
185
 
187
186
  return request
187
+
188
+
189
+ def _merge_url_path(base_url: str, path: str) -> str:
190
+ """Merge a base URL and a path.
191
+
192
+ Args:
193
+ base_url: The base URL to merge.
194
+ path: The path to merge.
195
+ """
196
+ return base_url.rstrip('/') + '/' + path.lstrip('/')
@@ -109,6 +109,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
109
109
  /,
110
110
  *,
111
111
  name: str | None = None,
112
+ description: str | None = None,
112
113
  retries: int | None = None,
113
114
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
114
115
  docstring_format: DocstringFormat | None = None,
@@ -126,6 +127,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
126
127
  /,
127
128
  *,
128
129
  name: str | None = None,
130
+ description: str | None = None,
129
131
  retries: int | None = None,
130
132
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
131
133
  docstring_format: DocstringFormat | None = None,
@@ -169,6 +171,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
169
171
  Args:
170
172
  func: The tool function to register.
171
173
  name: The name of the tool, defaults to the function name.
174
+ description: The description of the tool,defaults to the function docstring.
172
175
  retries: The number of retries to allow for this tool, defaults to the agent's default retries,
173
176
  which defaults to 1.
174
177
  prepare: custom method to prepare the tool definition for each step, return `None` to omit this
@@ -197,18 +200,19 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
197
200
  ) -> ToolFuncEither[AgentDepsT, ToolParams]:
198
201
  # noinspection PyTypeChecker
199
202
  self.add_function(
200
- func_,
201
- None,
202
- name,
203
- retries,
204
- prepare,
205
- docstring_format,
206
- require_parameter_descriptions,
207
- schema_generator,
208
- strict,
209
- sequential,
210
- requires_approval,
211
- metadata,
203
+ func=func_,
204
+ takes_ctx=None,
205
+ name=name,
206
+ description=description,
207
+ retries=retries,
208
+ prepare=prepare,
209
+ docstring_format=docstring_format,
210
+ require_parameter_descriptions=require_parameter_descriptions,
211
+ schema_generator=schema_generator,
212
+ strict=strict,
213
+ sequential=sequential,
214
+ requires_approval=requires_approval,
215
+ metadata=metadata,
212
216
  )
213
217
  return func_
214
218
 
@@ -219,6 +223,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
219
223
  func: ToolFuncEither[AgentDepsT, ToolParams],
220
224
  takes_ctx: bool | None = None,
221
225
  name: str | None = None,
226
+ description: str | None = None,
222
227
  retries: int | None = None,
223
228
  prepare: ToolPrepareFunc[AgentDepsT] | None = None,
224
229
  docstring_format: DocstringFormat | None = None,
@@ -240,6 +245,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
240
245
  func: The tool function to register.
241
246
  takes_ctx: Whether the function takes a [`RunContext`][pydantic_ai.tools.RunContext] as its first argument. If `None`, this is inferred from the function signature.
242
247
  name: The name of the tool, defaults to the function name.
248
+ description: The description of the tool, defaults to the function docstring.
243
249
  retries: The number of retries to allow for this tool, defaults to the agent's default retries,
244
250
  which defaults to 1.
245
251
  prepare: custom method to prepare the tool definition for each step, return `None` to omit this
@@ -279,6 +285,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
279
285
  func,
280
286
  takes_ctx=takes_ctx,
281
287
  name=name,
288
+ description=description,
282
289
  max_retries=retries,
283
290
  prepare=prepare,
284
291
  docstring_format=docstring_format,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 1.0.18
3
+ Version: 1.2.0
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
@@ -29,11 +29,11 @@ Classifier: Topic :: Internet
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Requires-Python: >=3.10
31
31
  Requires-Dist: exceptiongroup; python_version < '3.11'
32
- Requires-Dist: genai-prices>=0.0.30
32
+ Requires-Dist: genai-prices>=0.0.31
33
33
  Requires-Dist: griffe>=1.3.2
34
34
  Requires-Dist: httpx>=0.27
35
35
  Requires-Dist: opentelemetry-api>=1.28.0
36
- Requires-Dist: pydantic-graph==1.0.18
36
+ Requires-Dist: pydantic-graph==1.2.0
37
37
  Requires-Dist: pydantic>=2.10
38
38
  Requires-Dist: typing-inspection>=0.4.0
39
39
  Provides-Extra: a2a
@@ -42,7 +42,7 @@ Provides-Extra: ag-ui
42
42
  Requires-Dist: ag-ui-protocol>=0.1.8; extra == 'ag-ui'
43
43
  Requires-Dist: starlette>=0.45.3; extra == 'ag-ui'
44
44
  Provides-Extra: anthropic
45
- Requires-Dist: anthropic>=0.69.0; extra == 'anthropic'
45
+ Requires-Dist: anthropic>=0.70.0; extra == 'anthropic'
46
46
  Provides-Extra: bedrock
47
47
  Requires-Dist: boto3>=1.39.0; extra == 'bedrock'
48
48
  Provides-Extra: cli
@@ -57,7 +57,7 @@ Requires-Dist: dbos>=1.14.0; extra == 'dbos'
57
57
  Provides-Extra: duckduckgo
58
58
  Requires-Dist: ddgs>=9.0.0; extra == 'duckduckgo'
59
59
  Provides-Extra: evals
60
- Requires-Dist: pydantic-evals==1.0.18; extra == 'evals'
60
+ Requires-Dist: pydantic-evals==1.2.0; extra == 'evals'
61
61
  Provides-Extra: google
62
62
  Requires-Dist: google-genai>=1.31.0; extra == 'google'
63
63
  Provides-Extra: groq
@@ -72,6 +72,8 @@ Provides-Extra: mistral
72
72
  Requires-Dist: mistralai>=1.9.10; extra == 'mistral'
73
73
  Provides-Extra: openai
74
74
  Requires-Dist: openai>=1.107.2; extra == 'openai'
75
+ Provides-Extra: prefect
76
+ Requires-Dist: prefect>=3.4.21; extra == 'prefect'
75
77
  Provides-Extra: retries
76
78
  Requires-Dist: tenacity>=8.2.3; extra == 'retries'
77
79
  Provides-Extra: tavily
@@ -1,7 +1,7 @@
1
1
  pydantic_ai/__init__.py,sha256=IgLTfgpGwbYsT_d_2wSucOfFyIMl1GH6v-yfkNs_zrM,5149
2
2
  pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
3
3
  pydantic_ai/_a2a.py,sha256=3_pl7JW2yHdu31qLgCrdcTZTqXaJNjAwUV6zavah_w8,12159
4
- pydantic_ai/_agent_graph.py,sha256=D_Oo_LbPqGwkVAaEAcFFERwrg9pVkxeZ45vtTMhES8M,54230
4
+ pydantic_ai/_agent_graph.py,sha256=beDv9Ixg3Q3LGgNK6BWyvsjjqA27gq3zHvceT1rXuBE,54688
5
5
  pydantic_ai/_cli.py,sha256=iZTCFrpJy3aUZ49nJQ5nw2INFw6gPVQd8EhB0rahVcI,14005
6
6
  pydantic_ai/_function_schema.py,sha256=UnDGh7Wh5z70pEaRujXF_hKsSibQdN2ywI6lZGz3LUo,11663
7
7
  pydantic_ai/_griffe.py,sha256=BphvTL00FHxsSY56GM-bNyCOdwrpL0T3LbDQITWUK_Q,5280
@@ -31,8 +31,8 @@ pydantic_ai/run.py,sha256=dV3zIztC-lfOCKecXg_Mcx2CyOfUbxQC0JbZuPvQhTI,16227
31
31
  pydantic_ai/settings.py,sha256=0mr6KudxKKjTG8e3nsv_8vDLxNhu_1-WvefCOzCGSYM,3565
32
32
  pydantic_ai/tools.py,sha256=dCecmJtRkF1ioqFYbfT00XGGqzGB4PPO9n6IrHCQtnc,20343
33
33
  pydantic_ai/usage.py,sha256=_xXoPIfpENghWcjBvMj0URXQV6YwHWxxZYma4WZ4vUg,15710
34
- pydantic_ai/agent/__init__.py,sha256=nScl8k_IK20lcajj4ym9u214bb7sqw5Yu00FxP4HgyI,65395
35
- pydantic_ai/agent/abstract.py,sha256=69kTaR-ZMEmLJ4tD3oGQS5VuomXtNL8t5mxmPz8Ao50,54587
34
+ pydantic_ai/agent/__init__.py,sha256=VigDqMYLKQHsNYWYy6qPkqN0yfdffqxBYEA5YyxkIBM,67111
35
+ pydantic_ai/agent/abstract.py,sha256=Akq1NvfzXbIEJwwvo_t-FQ6MobW_cPWSeUXffdUN7Og,55651
36
36
  pydantic_ai/agent/wrapper.py,sha256=ygwfMq24mGe3pGIK-TtPAy3cV7M8VZJW3ulEHvwNTck,10293
37
37
  pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  pydantic_ai/common_tools/duckduckgo.py,sha256=1ae_o3zqMGrC6KFqAmuqPwJqQgNBTisuvU2jX9KU8PI,2273
@@ -43,6 +43,14 @@ pydantic_ai/durable_exec/dbos/_agent.py,sha256=5yKDlsMVNKzX3Tth-HC-TAwtEhCUbhL4T
43
43
  pydantic_ai/durable_exec/dbos/_mcp_server.py,sha256=cLMCKmXQHqhqnn_E3Nf4IsNFIbqk-V7gnIvpmYeDCSA,2989
44
44
  pydantic_ai/durable_exec/dbos/_model.py,sha256=_Cxh0zYFF3cungXiSXpGHmjyBQF7KnksfurV7hMKp-E,5106
45
45
  pydantic_ai/durable_exec/dbos/_utils.py,sha256=_aNceFvTcNeqb78sTDYM2TdYph85tbdeLueyXY1lbTA,242
46
+ pydantic_ai/durable_exec/prefect/__init__.py,sha256=Ear0mrffOkmSG8itNo7U-LnLoU5-eyWK_9AcfPwJjZ0,422
47
+ pydantic_ai/durable_exec/prefect/_agent.py,sha256=tJZj21nV_IEXMnOR2Mx7p4nnjlY0r_rPvuHAczc8wlQ,39606
48
+ pydantic_ai/durable_exec/prefect/_cache_policies.py,sha256=Sc6_xeDQ3NzuksoSa7KLXa64LhnLErt1UnPOXWFQArU,3399
49
+ pydantic_ai/durable_exec/prefect/_function_toolset.py,sha256=TEytP8WAVIgz897mWy_dKmFOOXq3gHq6CIDWOUYjKL0,2052
50
+ pydantic_ai/durable_exec/prefect/_mcp_server.py,sha256=5uHe2BNJyZUVeNPNo2HI0jtQkSyxAdOJGBTAwP1St04,1861
51
+ pydantic_ai/durable_exec/prefect/_model.py,sha256=-lJeI1LLc_v2R6yWpxmRuT_wjS-dgU_4HKtiXoRJPxI,5794
52
+ pydantic_ai/durable_exec/prefect/_toolset.py,sha256=dBgIMsQikjJgGr7_QAs3UG7nycBBH61eioMwN8mPqoA,2050
53
+ pydantic_ai/durable_exec/prefect/_types.py,sha256=cTtXnKokPSCDMBQJrLlEho0mJLvDIGNCZF-q6infkkU,1270
46
54
  pydantic_ai/durable_exec/temporal/__init__.py,sha256=H8y0jMv5Q2aFvHZ4rm48cYn07nc1nWEQbYpcO9P6zpA,5624
47
55
  pydantic_ai/durable_exec/temporal/_agent.py,sha256=BKbKKo6FM2zx-5ohc9voDyMYONH_8sZwUNypjonWDlA,44458
48
56
  pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=3n_A5uHzygsT88LM105kKuYqwxC1sjI4bOzETeUbT4E,5553
@@ -54,20 +62,20 @@ pydantic_ai/durable_exec/temporal/_toolset.py,sha256=IlPQrumm2MpZrb518ru15s0jIl8
54
62
  pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
63
  pydantic_ai/ext/aci.py,sha256=YWYLXzTQJ6hS7qfgNycA8cRl69gogGgThqEU6II7eMA,2527
56
64
  pydantic_ai/ext/langchain.py,sha256=kmbbV3Cx2BiNYEJCZMHVYQquUQD-zG2L_bwDangy0Ww,2317
57
- pydantic_ai/models/__init__.py,sha256=VlVcZZJsrZNTKbvq09khQlzGay5PZqWHsFmg9O9p0_I,35718
65
+ pydantic_ai/models/__init__.py,sha256=_47Vu42NfhDkm5TeRU3s0ibVBOGZr44uyhMLzA8Gg0I,35821
58
66
  pydantic_ai/models/anthropic.py,sha256=-vW7aoPrELKnJzbooCEhMu8__jY6iqvWdFJbIKeQPa8,38087
59
67
  pydantic_ai/models/bedrock.py,sha256=fha8zVZgDFYgDqO5nvBkZ2CEv4GV92yq_YnK4qmD73E,33639
60
68
  pydantic_ai/models/cohere.py,sha256=_ccK7XBts1OwD-RP8puU3z425SZ4PeJGts1WFhPjikg,14051
61
69
  pydantic_ai/models/fallback.py,sha256=fjQz7qRuxEwC6aFYkglBv-2Z39-6kZ931vs6o7PIti8,5016
62
70
  pydantic_ai/models/function.py,sha256=7-ej1m4f7c1TbvgB8sF02qlFD7Kf-EX-k_xN4RkbIEw,15880
63
71
  pydantic_ai/models/gemini.py,sha256=Ik7e1SnDCvFyjmYHcM-6vilXyl6pHY_GKaM3pHJGNG4,40016
64
- pydantic_ai/models/google.py,sha256=vWBkQtieMH6fJ93uNMescz7Deo13ddibv-pfcfMSEes,41534
72
+ pydantic_ai/models/google.py,sha256=0NsCdFIxcgEkG9xItqxxgAfxt8FwJ2zws3L0wv-PyMQ,41739
65
73
  pydantic_ai/models/groq.py,sha256=pVLl-4Z5CtiYU7bLgRlFTQhfh4LkMi6-aSkvgDuddrk,29633
66
74
  pydantic_ai/models/huggingface.py,sha256=711C0ysjLYKriGfSxPiaF6lqjGcNmIaJaCvAXoucTes,21488
67
75
  pydantic_ai/models/instrumented.py,sha256=J8eVTutr3UP1r_wd5sM5c0BIdzkRqT-EGgd2NiF0ssQ,22319
68
76
  pydantic_ai/models/mcp_sampling.py,sha256=qY4y4nXbRpNp2QbkfjzWLvF_8KLZGXypz4cc0lYRHXU,3553
69
77
  pydantic_ai/models/mistral.py,sha256=fi57hADjYxZw8wEpAcNI6mqY32VG9hHK9GGRQ-9vlZg,33905
70
- pydantic_ai/models/openai.py,sha256=nCqFy2sRihygbBbTYSbMy_W9LiXwNoRzIUNHSJk5ctc,99861
78
+ pydantic_ai/models/openai.py,sha256=1DRmsFx2beuxH5RAy2o_PRMAtxAmF2Gba-EmqyK_9BM,99457
71
79
  pydantic_ai/models/test.py,sha256=5ER66nwZG7Iwm-KkzPo4vwNd3rulzgkpgysu4YcT1W4,20568
72
80
  pydantic_ai/models/wrapper.py,sha256=nwh8Gea59blbr1JDKlUnkYICuI9TUubC4qP7iZRRW28,2440
73
81
  pydantic_ai/profiles/__init__.py,sha256=UHknN-CYsQexUaxfsgz_J_uSZ9QwistLSuAErQkvbcM,3385
@@ -92,7 +100,7 @@ pydantic_ai/providers/cerebras.py,sha256=3rIu092TYYuI5S4mlRjWxay5uomPbEDyHWIBMfr
92
100
  pydantic_ai/providers/cohere.py,sha256=L3wgvcbxRRPrIKoZka_DQl1Uvi1VxBPMJikrzJ85iHE,2839
93
101
  pydantic_ai/providers/deepseek.py,sha256=zop0sb1XzdzSuI2dCNXrinfMdxoqB8H_rp2zw6ItbKc,3023
94
102
  pydantic_ai/providers/fireworks.py,sha256=t4PznbxnD9GnzZ3wYqSn6xdxRRJlYzNKf_EZzX0UWl8,3585
95
- pydantic_ai/providers/gateway.py,sha256=2O7nepvn8s3IbMSAdRZ8V_ag0VmjDKjvc9gGCb99AEE,6675
103
+ pydantic_ai/providers/gateway.py,sha256=QEpTLOgUCoDiL8ZOm5JZtGMm7t7Jfluk_nTd6a8LfbA,6944
96
104
  pydantic_ai/providers/github.py,sha256=yi7c16_Ao1E1QmehVfdsO9NrjDGK1moaHTK-P5cIrsI,4369
97
105
  pydantic_ai/providers/google.py,sha256=scCHek7whNEbi742hnRlKItboYOoxtYosgNN7wDjvpM,6019
98
106
  pydantic_ai/providers/google_gla.py,sha256=PnmnzgCOPJB1kMVnNVqZu2Cdzk7K9jx2z0MpbJ6EkII,1951
@@ -117,13 +125,13 @@ pydantic_ai/toolsets/approval_required.py,sha256=zyYGEx2VqprLed16OXg1QWr81rnAB0C
117
125
  pydantic_ai/toolsets/combined.py,sha256=LQzm_g6gskiHRUMFDvm88SSrz8OGxbdxyHiKzQrMBNU,4026
118
126
  pydantic_ai/toolsets/external.py,sha256=J9mWQm1HLbRCOJwpLBIvUZZGR_ywSB7pz8MrXkRNBoU,1736
119
127
  pydantic_ai/toolsets/filtered.py,sha256=PSQG9EbBYJpHUEBb_4TGzhjAcQPo5aPKvTuReeoWYtQ,864
120
- pydantic_ai/toolsets/function.py,sha256=q29aOG4HeoukVCiJgjw8_F19CPcNmGX8dWAza-LA1VU,16296
128
+ pydantic_ai/toolsets/function.py,sha256=7QNKUddsSehwtM1kC13fVPkswzh2qa63p5wqIgrUFKk,16819
121
129
  pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fbh5s,1426
122
130
  pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
123
131
  pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
124
132
  pydantic_ai/toolsets/wrapper.py,sha256=KRzF1p8dncHbva8CE6Ud-IC5E_aygIHlwH5atXK55k4,1673
125
- pydantic_ai_slim-1.0.18.dist-info/METADATA,sha256=XpATENr_fKE6BLbNaZACxFcVn8VHEb2sllDF8z5vhKc,4631
126
- pydantic_ai_slim-1.0.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
127
- pydantic_ai_slim-1.0.18.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
128
- pydantic_ai_slim-1.0.18.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
129
- pydantic_ai_slim-1.0.18.dist-info/RECORD,,
133
+ pydantic_ai_slim-1.2.0.dist-info/METADATA,sha256=Bh965F4WWNtdeh9ILyd5w_tPPKXBFaXLtiX1JzniCXM,4703
134
+ pydantic_ai_slim-1.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
135
+ pydantic_ai_slim-1.2.0.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
136
+ pydantic_ai_slim-1.2.0.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
137
+ pydantic_ai_slim-1.2.0.dist-info/RECORD,,