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.
- pydantic_ai/_agent_graph.py +13 -0
- pydantic_ai/agent/__init__.py +43 -12
- pydantic_ai/agent/abstract.py +12 -0
- pydantic_ai/durable_exec/prefect/__init__.py +15 -0
- pydantic_ai/durable_exec/prefect/_agent.py +833 -0
- pydantic_ai/durable_exec/prefect/_cache_policies.py +102 -0
- pydantic_ai/durable_exec/prefect/_function_toolset.py +58 -0
- pydantic_ai/durable_exec/prefect/_mcp_server.py +60 -0
- pydantic_ai/durable_exec/prefect/_model.py +152 -0
- pydantic_ai/durable_exec/prefect/_toolset.py +67 -0
- pydantic_ai/durable_exec/prefect/_types.py +44 -0
- pydantic_ai/models/__init__.py +3 -0
- pydantic_ai/models/google.py +6 -0
- pydantic_ai/models/openai.py +42 -45
- pydantic_ai/providers/gateway.py +16 -7
- pydantic_ai/toolsets/function.py +19 -12
- {pydantic_ai_slim-1.0.18.dist-info → pydantic_ai_slim-1.2.0.dist-info}/METADATA +7 -5
- {pydantic_ai_slim-1.0.18.dist-info → pydantic_ai_slim-1.2.0.dist-info}/RECORD +21 -13
- {pydantic_ai_slim-1.0.18.dist-info → pydantic_ai_slim-1.2.0.dist-info}/WHEEL +0 -0
- {pydantic_ai_slim-1.0.18.dist-info → pydantic_ai_slim-1.2.0.dist-info}/entry_points.txt +0 -0
- {pydantic_ai_slim-1.0.18.dist-info → pydantic_ai_slim-1.2.0.dist-info}/licenses/LICENSE +0 -0
pydantic_ai/models/openai.py
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
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
|
-
|
|
1956
|
-
|
|
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
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
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]:
|
pydantic_ai/providers/gateway.py
CHANGED
|
@@ -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', '
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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':
|
|
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('/')
|
pydantic_ai/toolsets/function.py
CHANGED
|
@@ -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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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=
|
|
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=
|
|
35
|
-
pydantic_ai/agent/abstract.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
126
|
-
pydantic_ai_slim-1.0.
|
|
127
|
-
pydantic_ai_slim-1.0.
|
|
128
|
-
pydantic_ai_slim-1.0.
|
|
129
|
-
pydantic_ai_slim-1.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|