pydantic-ai-slim 0.6.2__py3-none-any.whl → 0.7.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.
Potentially problematic release.
This version of pydantic-ai-slim might be problematic. Click here for more details.
- pydantic_ai/_a2a.py +6 -4
- pydantic_ai/_agent_graph.py +37 -37
- pydantic_ai/_cli.py +3 -3
- pydantic_ai/_output.py +8 -0
- pydantic_ai/_tool_manager.py +3 -0
- pydantic_ai/ag_ui.py +25 -14
- pydantic_ai/{agent.py → agent/__init__.py} +209 -1027
- pydantic_ai/agent/abstract.py +942 -0
- pydantic_ai/agent/wrapper.py +227 -0
- pydantic_ai/direct.py +9 -9
- pydantic_ai/durable_exec/__init__.py +0 -0
- pydantic_ai/durable_exec/temporal/__init__.py +83 -0
- pydantic_ai/durable_exec/temporal/_agent.py +699 -0
- pydantic_ai/durable_exec/temporal/_function_toolset.py +92 -0
- pydantic_ai/durable_exec/temporal/_logfire.py +48 -0
- pydantic_ai/durable_exec/temporal/_mcp_server.py +145 -0
- pydantic_ai/durable_exec/temporal/_model.py +168 -0
- pydantic_ai/durable_exec/temporal/_run_context.py +50 -0
- pydantic_ai/durable_exec/temporal/_toolset.py +77 -0
- pydantic_ai/ext/aci.py +10 -9
- pydantic_ai/ext/langchain.py +4 -2
- pydantic_ai/mcp.py +203 -75
- pydantic_ai/messages.py +2 -2
- pydantic_ai/models/__init__.py +93 -9
- pydantic_ai/models/anthropic.py +16 -7
- pydantic_ai/models/bedrock.py +8 -5
- pydantic_ai/models/cohere.py +1 -4
- pydantic_ai/models/fallback.py +10 -3
- pydantic_ai/models/function.py +9 -4
- pydantic_ai/models/gemini.py +15 -9
- pydantic_ai/models/google.py +84 -20
- pydantic_ai/models/groq.py +17 -14
- pydantic_ai/models/huggingface.py +18 -12
- pydantic_ai/models/instrumented.py +3 -1
- pydantic_ai/models/mcp_sampling.py +3 -1
- pydantic_ai/models/mistral.py +12 -18
- pydantic_ai/models/openai.py +57 -30
- pydantic_ai/models/test.py +3 -0
- pydantic_ai/models/wrapper.py +6 -2
- pydantic_ai/profiles/openai.py +1 -1
- pydantic_ai/providers/google.py +7 -7
- pydantic_ai/result.py +21 -55
- pydantic_ai/run.py +357 -0
- pydantic_ai/tools.py +0 -1
- pydantic_ai/toolsets/__init__.py +2 -0
- pydantic_ai/toolsets/_dynamic.py +87 -0
- pydantic_ai/toolsets/abstract.py +23 -3
- pydantic_ai/toolsets/combined.py +19 -4
- pydantic_ai/toolsets/deferred.py +10 -2
- pydantic_ai/toolsets/function.py +23 -8
- pydantic_ai/toolsets/prefixed.py +4 -0
- pydantic_ai/toolsets/wrapper.py +14 -1
- pydantic_ai/usage.py +17 -1
- {pydantic_ai_slim-0.6.2.dist-info → pydantic_ai_slim-0.7.1.dist-info}/METADATA +7 -5
- {pydantic_ai_slim-0.6.2.dist-info → pydantic_ai_slim-0.7.1.dist-info}/RECORD +58 -45
- {pydantic_ai_slim-0.6.2.dist-info → pydantic_ai_slim-0.7.1.dist-info}/WHEEL +0 -0
- {pydantic_ai_slim-0.6.2.dist-info → pydantic_ai_slim-0.7.1.dist-info}/entry_points.txt +0 -0
- {pydantic_ai_slim-0.6.2.dist-info → pydantic_ai_slim-0.7.1.dist-info}/licenses/LICENSE +0 -0
pydantic_ai/toolsets/combined.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
from collections.abc import Sequence
|
|
5
5
|
from contextlib import AsyncExitStack
|
|
6
|
-
from dataclasses import dataclass, field
|
|
6
|
+
from dataclasses import dataclass, field, replace
|
|
7
7
|
from typing import Any, Callable
|
|
8
8
|
|
|
9
9
|
from typing_extensions import Self
|
|
@@ -40,6 +40,14 @@ class CombinedToolset(AbstractToolset[AgentDepsT]):
|
|
|
40
40
|
self._entered_count = 0
|
|
41
41
|
self._exit_stack = None
|
|
42
42
|
|
|
43
|
+
@property
|
|
44
|
+
def id(self) -> str | None:
|
|
45
|
+
return None # pragma: no cover
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def label(self) -> str:
|
|
49
|
+
return f'{self.__class__.__name__}({", ".join(toolset.label for toolset in self.toolsets)})' # pragma: no cover
|
|
50
|
+
|
|
43
51
|
async def __aenter__(self) -> Self:
|
|
44
52
|
async with self._enter_lock:
|
|
45
53
|
if self._entered_count == 0:
|
|
@@ -63,13 +71,15 @@ class CombinedToolset(AbstractToolset[AgentDepsT]):
|
|
|
63
71
|
|
|
64
72
|
for toolset, tools in zip(self.toolsets, toolsets_tools):
|
|
65
73
|
for name, tool in tools.items():
|
|
66
|
-
|
|
74
|
+
tool_toolset = tool.toolset
|
|
75
|
+
if existing_tool := all_tools.get(name):
|
|
76
|
+
capitalized_toolset_label = tool_toolset.label[0].upper() + tool_toolset.label[1:]
|
|
67
77
|
raise UserError(
|
|
68
|
-
f'{
|
|
78
|
+
f'{capitalized_toolset_label} defines a tool whose name conflicts with existing tool from {existing_tool.toolset.label}: {name!r}. {toolset.tool_name_conflict_hint}'
|
|
69
79
|
)
|
|
70
80
|
|
|
71
81
|
all_tools[name] = _CombinedToolsetTool(
|
|
72
|
-
toolset=
|
|
82
|
+
toolset=tool_toolset,
|
|
73
83
|
tool_def=tool.tool_def,
|
|
74
84
|
max_retries=tool.max_retries,
|
|
75
85
|
args_validator=tool.args_validator,
|
|
@@ -87,3 +97,8 @@ class CombinedToolset(AbstractToolset[AgentDepsT]):
|
|
|
87
97
|
def apply(self, visitor: Callable[[AbstractToolset[AgentDepsT]], None]) -> None:
|
|
88
98
|
for toolset in self.toolsets:
|
|
89
99
|
toolset.apply(visitor)
|
|
100
|
+
|
|
101
|
+
def visit_and_replace(
|
|
102
|
+
self, visitor: Callable[[AbstractToolset[AgentDepsT]], AbstractToolset[AgentDepsT]]
|
|
103
|
+
) -> AbstractToolset[AgentDepsT]:
|
|
104
|
+
return replace(self, toolsets=[toolset.visit_and_replace(visitor) for toolset in self.toolsets])
|
pydantic_ai/toolsets/deferred.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import
|
|
3
|
+
from dataclasses import replace
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
6
|
from pydantic_core import SchemaValidator, core_schema
|
|
@@ -12,7 +12,6 @@ from .abstract import AbstractToolset, ToolsetTool
|
|
|
12
12
|
TOOL_SCHEMA_VALIDATOR = SchemaValidator(schema=core_schema.any_schema())
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
@dataclass
|
|
16
15
|
class DeferredToolset(AbstractToolset[AgentDepsT]):
|
|
17
16
|
"""A toolset that holds deferred tools whose results will be produced outside of the Pydantic AI agent run in which they were called.
|
|
18
17
|
|
|
@@ -20,6 +19,15 @@ class DeferredToolset(AbstractToolset[AgentDepsT]):
|
|
|
20
19
|
"""
|
|
21
20
|
|
|
22
21
|
tool_defs: list[ToolDefinition]
|
|
22
|
+
_id: str | None
|
|
23
|
+
|
|
24
|
+
def __init__(self, tool_defs: list[ToolDefinition], *, id: str | None = None):
|
|
25
|
+
self.tool_defs = tool_defs
|
|
26
|
+
self._id = id
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def id(self) -> str | None:
|
|
30
|
+
return self._id
|
|
23
31
|
|
|
24
32
|
async def get_tools(self, ctx: RunContext[AgentDepsT]) -> dict[str, ToolsetTool[AgentDepsT]]:
|
|
25
33
|
return {
|
pydantic_ai/toolsets/function.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Awaitable, Sequence
|
|
4
|
-
from dataclasses import dataclass,
|
|
4
|
+
from dataclasses import dataclass, replace
|
|
5
5
|
from typing import Any, Callable, overload
|
|
6
6
|
|
|
7
7
|
from pydantic.json_schema import GenerateJsonSchema
|
|
@@ -20,30 +20,40 @@ from .abstract import AbstractToolset, ToolsetTool
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
@dataclass
|
|
23
|
-
class
|
|
23
|
+
class FunctionToolsetTool(ToolsetTool[AgentDepsT]):
|
|
24
24
|
"""A tool definition for a function toolset tool that keeps track of the function to call."""
|
|
25
25
|
|
|
26
26
|
call_func: Callable[[dict[str, Any], RunContext[AgentDepsT]], Awaitable[Any]]
|
|
27
|
+
is_async: bool
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
@dataclass(init=False)
|
|
30
30
|
class FunctionToolset(AbstractToolset[AgentDepsT]):
|
|
31
31
|
"""A toolset that lets Python functions be used as tools.
|
|
32
32
|
|
|
33
33
|
See [toolset docs](../toolsets.md#function-toolset) for more information.
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
|
-
max_retries: int
|
|
37
|
-
tools: dict[str, Tool[Any]]
|
|
36
|
+
max_retries: int
|
|
37
|
+
tools: dict[str, Tool[Any]]
|
|
38
|
+
_id: str | None
|
|
38
39
|
|
|
39
|
-
def __init__(
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] = [],
|
|
43
|
+
max_retries: int = 1,
|
|
44
|
+
*,
|
|
45
|
+
id: str | None = None,
|
|
46
|
+
):
|
|
40
47
|
"""Build a new function toolset.
|
|
41
48
|
|
|
42
49
|
Args:
|
|
43
50
|
tools: The tools to add to the toolset.
|
|
44
51
|
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.
|
|
45
53
|
"""
|
|
46
54
|
self.max_retries = max_retries
|
|
55
|
+
self._id = id
|
|
56
|
+
|
|
47
57
|
self.tools = {}
|
|
48
58
|
for tool in tools:
|
|
49
59
|
if isinstance(tool, Tool):
|
|
@@ -51,6 +61,10 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
|
|
|
51
61
|
else:
|
|
52
62
|
self.add_function(tool)
|
|
53
63
|
|
|
64
|
+
@property
|
|
65
|
+
def id(self) -> str | None:
|
|
66
|
+
return self._id
|
|
67
|
+
|
|
54
68
|
@overload
|
|
55
69
|
def tool(self, func: ToolFuncEither[AgentDepsT, ToolParams], /) -> ToolFuncEither[AgentDepsT, ToolParams]: ...
|
|
56
70
|
|
|
@@ -222,17 +236,18 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
|
|
|
222
236
|
else:
|
|
223
237
|
raise UserError(f'Tool name conflicts with previously renamed tool: {new_name!r}.')
|
|
224
238
|
|
|
225
|
-
tools[new_name] =
|
|
239
|
+
tools[new_name] = FunctionToolsetTool(
|
|
226
240
|
toolset=self,
|
|
227
241
|
tool_def=tool_def,
|
|
228
242
|
max_retries=tool.max_retries if tool.max_retries is not None else self.max_retries,
|
|
229
243
|
args_validator=tool.function_schema.validator,
|
|
230
244
|
call_func=tool.function_schema.call,
|
|
245
|
+
is_async=tool.function_schema.is_async,
|
|
231
246
|
)
|
|
232
247
|
return tools
|
|
233
248
|
|
|
234
249
|
async def call_tool(
|
|
235
250
|
self, name: str, tool_args: dict[str, Any], ctx: RunContext[AgentDepsT], tool: ToolsetTool[AgentDepsT]
|
|
236
251
|
) -> Any:
|
|
237
|
-
assert isinstance(tool,
|
|
252
|
+
assert isinstance(tool, FunctionToolsetTool)
|
|
238
253
|
return await tool.call_func(tool_args, ctx)
|
pydantic_ai/toolsets/prefixed.py
CHANGED
|
@@ -17,6 +17,10 @@ class PrefixedToolset(WrapperToolset[AgentDepsT]):
|
|
|
17
17
|
|
|
18
18
|
prefix: str
|
|
19
19
|
|
|
20
|
+
@property
|
|
21
|
+
def tool_name_conflict_hint(self) -> str:
|
|
22
|
+
return 'Change the `prefix` attribute to avoid name conflicts.'
|
|
23
|
+
|
|
20
24
|
async def get_tools(self, ctx: RunContext[AgentDepsT]) -> dict[str, ToolsetTool[AgentDepsT]]:
|
|
21
25
|
return {
|
|
22
26
|
new_name: replace(
|
pydantic_ai/toolsets/wrapper.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, replace
|
|
4
4
|
from typing import Any, Callable
|
|
5
5
|
|
|
6
6
|
from typing_extensions import Self
|
|
@@ -18,6 +18,14 @@ class WrapperToolset(AbstractToolset[AgentDepsT]):
|
|
|
18
18
|
|
|
19
19
|
wrapped: AbstractToolset[AgentDepsT]
|
|
20
20
|
|
|
21
|
+
@property
|
|
22
|
+
def id(self) -> str | None:
|
|
23
|
+
return None # pragma: no cover
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def label(self) -> str:
|
|
27
|
+
return f'{self.__class__.__name__}({self.wrapped.label})'
|
|
28
|
+
|
|
21
29
|
async def __aenter__(self) -> Self:
|
|
22
30
|
await self.wrapped.__aenter__()
|
|
23
31
|
return self
|
|
@@ -35,3 +43,8 @@ class WrapperToolset(AbstractToolset[AgentDepsT]):
|
|
|
35
43
|
|
|
36
44
|
def apply(self, visitor: Callable[[AbstractToolset[AgentDepsT]], None]) -> None:
|
|
37
45
|
self.wrapped.apply(visitor)
|
|
46
|
+
|
|
47
|
+
def visit_and_replace(
|
|
48
|
+
self, visitor: Callable[[AbstractToolset[AgentDepsT]], AbstractToolset[AgentDepsT]]
|
|
49
|
+
) -> AbstractToolset[AgentDepsT]:
|
|
50
|
+
return replace(self, wrapped=self.wrapped.visit_and_replace(visitor))
|
pydantic_ai/usage.py
CHANGED
|
@@ -96,6 +96,10 @@ class UsageLimits:
|
|
|
96
96
|
"""The maximum number of tokens allowed in responses from the model."""
|
|
97
97
|
total_tokens_limit: int | None = None
|
|
98
98
|
"""The maximum number of tokens allowed in requests and responses combined."""
|
|
99
|
+
count_tokens_before_request: bool = False
|
|
100
|
+
"""If True, perform a token counting pass before sending the request to the model,
|
|
101
|
+
to enforce `request_tokens_limit` ahead of time. This may incur additional overhead
|
|
102
|
+
(from calling the model's `count_tokens` API before making the actual request) and is disabled by default."""
|
|
99
103
|
|
|
100
104
|
def has_token_limits(self) -> bool:
|
|
101
105
|
"""Returns `True` if this instance places any limits on token counts.
|
|
@@ -111,11 +115,23 @@ class UsageLimits:
|
|
|
111
115
|
)
|
|
112
116
|
|
|
113
117
|
def check_before_request(self, usage: Usage) -> None:
|
|
114
|
-
"""Raises a `UsageLimitExceeded` exception if the next request would exceed the
|
|
118
|
+
"""Raises a `UsageLimitExceeded` exception if the next request would exceed any of the limits."""
|
|
115
119
|
request_limit = self.request_limit
|
|
116
120
|
if request_limit is not None and usage.requests >= request_limit:
|
|
117
121
|
raise UsageLimitExceeded(f'The next request would exceed the request_limit of {request_limit}')
|
|
118
122
|
|
|
123
|
+
request_tokens = usage.request_tokens or 0
|
|
124
|
+
if self.request_tokens_limit is not None and request_tokens > self.request_tokens_limit:
|
|
125
|
+
raise UsageLimitExceeded(
|
|
126
|
+
f'The next request would exceed the request_tokens_limit of {self.request_tokens_limit} ({request_tokens=})'
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
total_tokens = usage.total_tokens or 0
|
|
130
|
+
if self.total_tokens_limit is not None and total_tokens > self.total_tokens_limit:
|
|
131
|
+
raise UsageLimitExceeded(
|
|
132
|
+
f'The next request would exceed the total_tokens_limit of {self.total_tokens_limit} ({total_tokens=})'
|
|
133
|
+
)
|
|
134
|
+
|
|
119
135
|
def check_tokens(self, usage: Usage) -> None:
|
|
120
136
|
"""Raises a `UsageLimitExceeded` exception if the usage exceeds any of the token limits."""
|
|
121
137
|
request_tokens = usage.request_tokens or 0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai-slim
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs, slim package
|
|
5
5
|
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>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -30,7 +30,7 @@ Requires-Dist: exceptiongroup; python_version < '3.11'
|
|
|
30
30
|
Requires-Dist: griffe>=1.3.2
|
|
31
31
|
Requires-Dist: httpx>=0.27
|
|
32
32
|
Requires-Dist: opentelemetry-api>=1.28.0
|
|
33
|
-
Requires-Dist: pydantic-graph==0.
|
|
33
|
+
Requires-Dist: pydantic-graph==0.7.1
|
|
34
34
|
Requires-Dist: pydantic>=2.10
|
|
35
35
|
Requires-Dist: typing-inspection>=0.4.0
|
|
36
36
|
Provides-Extra: a2a
|
|
@@ -51,7 +51,7 @@ Requires-Dist: cohere>=5.16.0; (platform_system != 'Emscripten') and extra == 'c
|
|
|
51
51
|
Provides-Extra: duckduckgo
|
|
52
52
|
Requires-Dist: ddgs>=9.0.0; extra == 'duckduckgo'
|
|
53
53
|
Provides-Extra: evals
|
|
54
|
-
Requires-Dist: pydantic-evals==0.
|
|
54
|
+
Requires-Dist: pydantic-evals==0.7.1; extra == 'evals'
|
|
55
55
|
Provides-Extra: google
|
|
56
56
|
Requires-Dist: google-genai>=1.28.0; extra == 'google'
|
|
57
57
|
Provides-Extra: groq
|
|
@@ -59,17 +59,19 @@ Requires-Dist: groq>=0.25.0; extra == 'groq'
|
|
|
59
59
|
Provides-Extra: huggingface
|
|
60
60
|
Requires-Dist: huggingface-hub[inference]>=0.33.5; extra == 'huggingface'
|
|
61
61
|
Provides-Extra: logfire
|
|
62
|
-
Requires-Dist: logfire>=3.
|
|
62
|
+
Requires-Dist: logfire>=3.14.1; extra == 'logfire'
|
|
63
63
|
Provides-Extra: mcp
|
|
64
64
|
Requires-Dist: mcp>=1.10.0; (python_version >= '3.10') and extra == 'mcp'
|
|
65
65
|
Provides-Extra: mistral
|
|
66
66
|
Requires-Dist: mistralai>=1.9.2; extra == 'mistral'
|
|
67
67
|
Provides-Extra: openai
|
|
68
|
-
Requires-Dist: openai>=1.
|
|
68
|
+
Requires-Dist: openai>=1.99.9; extra == 'openai'
|
|
69
69
|
Provides-Extra: retries
|
|
70
70
|
Requires-Dist: tenacity>=8.2.3; extra == 'retries'
|
|
71
71
|
Provides-Extra: tavily
|
|
72
72
|
Requires-Dist: tavily-python>=0.5.0; extra == 'tavily'
|
|
73
|
+
Provides-Extra: temporal
|
|
74
|
+
Requires-Dist: temporalio>=1.15.0; extra == 'temporal'
|
|
73
75
|
Provides-Extra: vertexai
|
|
74
76
|
Requires-Dist: google-auth>=2.36.0; extra == 'vertexai'
|
|
75
77
|
Requires-Dist: requests>=2.32.2; extra == 'vertexai'
|
|
@@ -1,55 +1,67 @@
|
|
|
1
1
|
pydantic_ai/__init__.py,sha256=Uy0J4BgX4CXsa0sUUb5K0FC4uUWGIwBici93QHLkNsk,1478
|
|
2
2
|
pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
|
|
3
|
-
pydantic_ai/_a2a.py,sha256=
|
|
4
|
-
pydantic_ai/_agent_graph.py,sha256=
|
|
5
|
-
pydantic_ai/_cli.py,sha256=
|
|
3
|
+
pydantic_ai/_a2a.py,sha256=wux52DmJQceLJwF71qxb0Uqupk3aS61m005-NmuWZIw,12164
|
|
4
|
+
pydantic_ai/_agent_graph.py,sha256=CairpjIY302UegGzzA5C56kDqvXR6l2gcR6vSdai2JI,37714
|
|
5
|
+
pydantic_ai/_cli.py,sha256=nr3hW7Y4vHzk7oXpfOCupwuJ6Z2SmZLz2dYS6ljCpuc,13281
|
|
6
6
|
pydantic_ai/_function_schema.py,sha256=YFHxb6bKfhgeY6rNdbuYXgndGCDanveUx2258xkSNlQ,11233
|
|
7
7
|
pydantic_ai/_griffe.py,sha256=Ugft16ZHw9CN_6-lW0Svn6jESK9zHXO_x4utkGBkbBI,5253
|
|
8
8
|
pydantic_ai/_mcp.py,sha256=PuvwnlLjv7YYOa9AZJCrklevBug99zGMhwJCBGG7BHQ,5626
|
|
9
|
-
pydantic_ai/_output.py,sha256=
|
|
9
|
+
pydantic_ai/_output.py,sha256=6Vxlw8F9nRWCkjy4qvFF8tmDi2xZn7Dq72T6s4C5kAM,37640
|
|
10
10
|
pydantic_ai/_parts_manager.py,sha256=lWXN75zLy_MSDz4Wib65lqIPHk1SY8KDU8_OYaxG3yw,17788
|
|
11
11
|
pydantic_ai/_run_context.py,sha256=pqb_HPXytE1Z9zZRRuBboRYes_tVTC75WGTpZgnb2Ko,1691
|
|
12
12
|
pydantic_ai/_system_prompt.py,sha256=lUSq-gDZjlYTGtd6BUm54yEvTIvgdwBmJ8mLsNZZtYU,1142
|
|
13
13
|
pydantic_ai/_thinking_part.py,sha256=x80-Vkon16GOyq3W6f2qzafTVPC5dCgF7QD3k8ZMmYU,1304
|
|
14
|
-
pydantic_ai/_tool_manager.py,sha256=
|
|
14
|
+
pydantic_ai/_tool_manager.py,sha256=0_4Ed8kUj_Z_AdTpyBdz5rdYbmlCxf1DUh2vrIk7rYE,9031
|
|
15
15
|
pydantic_ai/_utils.py,sha256=Ge9rtu8NJvsfSFjx1MduITPr0-9b_I0emDFSpwJbYes,16372
|
|
16
|
-
pydantic_ai/ag_ui.py,sha256=
|
|
17
|
-
pydantic_ai/agent.py,sha256=inwfTJJMiE3IBjle6aFycqhnN-JJMUEfbsgWyMkRIOo,96346
|
|
16
|
+
pydantic_ai/ag_ui.py,sha256=2cKSSvl1j0pxVNCFQO82l7LVtkJMt0HUaEXGwy3y558,26463
|
|
18
17
|
pydantic_ai/builtin_tools.py,sha256=mwIq-7m0ZSbCZp1zxswjRfQM648QE01IDfifvqDGxUQ,3023
|
|
19
|
-
pydantic_ai/direct.py,sha256=
|
|
18
|
+
pydantic_ai/direct.py,sha256=mduSzkCapSAuzV90da1aARy9n-Jwj6papgbMWGbWIkQ,14943
|
|
20
19
|
pydantic_ai/exceptions.py,sha256=vHRH_b6JpMi5p5EGhz2O4FSeKGJv3WMD291Y1FjHYFc,3528
|
|
21
20
|
pydantic_ai/format_prompt.py,sha256=Or-Ytq55RQb1UJqy2HKIyPpZ-knWXfdDP3Z6tNc6Orw,4244
|
|
22
|
-
pydantic_ai/mcp.py,sha256=
|
|
23
|
-
pydantic_ai/messages.py,sha256=
|
|
21
|
+
pydantic_ai/mcp.py,sha256=n9_ECHmFE-eOZmb1bDh94oy81caefdtSGo1oH2KKWMo,31162
|
|
22
|
+
pydantic_ai/messages.py,sha256=kLw3yBtUEoRQ43zZ43PpasgC6EeVbSQi4Fl0PB1tQwA,45700
|
|
24
23
|
pydantic_ai/output.py,sha256=54Cwd1RruXlA5hucZ1h-SxFrzKHJuLvYvLtH9iyg2GI,11988
|
|
25
24
|
pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
pydantic_ai/result.py,sha256=
|
|
25
|
+
pydantic_ai/result.py,sha256=PgsaEcIFt9rkWs3F3RW2jqI8Qhmf5gEtCHZ7jVr2d34,19765
|
|
27
26
|
pydantic_ai/retries.py,sha256=Xkj-gZAd3wc12CVsIErVYx2EIdIwD5yJOL4Ou6jDQ2s,10498
|
|
27
|
+
pydantic_ai/run.py,sha256=VSZEadgzRc_tytnHt2Gemdv9z05e6aEJTNPQ7DmuUck,15130
|
|
28
28
|
pydantic_ai/settings.py,sha256=yuUZ7-GkdPB-Gbx71kSdh8dSr6gwM9gEwk84qNxPO_I,3552
|
|
29
|
-
pydantic_ai/tools.py,sha256=
|
|
30
|
-
pydantic_ai/usage.py,sha256=
|
|
29
|
+
pydantic_ai/tools.py,sha256=H7pCfLYvtQ9j2I5qQGF_UCzUpufO14vEgLowFE8msNA,14764
|
|
30
|
+
pydantic_ai/usage.py,sha256=UddLBMmytzKBmsLzyGHHbJAnr4VQkMA8-vSjCeifz3w,6801
|
|
31
|
+
pydantic_ai/agent/__init__.py,sha256=GrQ_HqEo8Usw4QGzCOqD6zjn_htDs2zK53ocm1Fr4WM,60033
|
|
32
|
+
pydantic_ai/agent/abstract.py,sha256=m83vk00sV7q3MqIHucExkMsiEF52dANHptGl8TNEkbw,42035
|
|
33
|
+
pydantic_ai/agent/wrapper.py,sha256=cVIpfPWF63oTD1jeWdFY-OS_ty2nwbeSwsI7upd30Kw,9155
|
|
31
34
|
pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
35
|
pydantic_ai/common_tools/duckduckgo.py,sha256=aQsm7zKuoRNgPM8ltbdyj8dPkREEkQenimsf_laF6kc,2245
|
|
33
36
|
pydantic_ai/common_tools/tavily.py,sha256=Q1xxSF5HtXAaZ10Pp-OaDOHXwJf2mco9wScGEQXD7E4,2495
|
|
37
|
+
pydantic_ai/durable_exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
pydantic_ai/durable_exec/temporal/__init__.py,sha256=kzUnYUOmHNIsn6UzAa3-vEZx0VpIDZiY84iaRm6z-Qs,3356
|
|
39
|
+
pydantic_ai/durable_exec/temporal/_agent.py,sha256=hKJW-oCU5W83sofQ-1f40IQe1FS-qrcmq4Dr-KcSy2c,32864
|
|
40
|
+
pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=qKTs7T6YcJ2LBOvrlYBRUHd9zn86TuUaY0Qw5TPGSmE,3848
|
|
41
|
+
pydantic_ai/durable_exec/temporal/_logfire.py,sha256=_dsvVIdpYJEUyoFUIDYQjCO6TjTITqvlJHwNy_Fi2cw,1866
|
|
42
|
+
pydantic_ai/durable_exec/temporal/_mcp_server.py,sha256=J7CC4gRDhM4uQo3_kNKV7e4uiWC0He0AgS7bdq9Pt4o,6005
|
|
43
|
+
pydantic_ai/durable_exec/temporal/_model.py,sha256=3EN9NuTjmWsB57Y9ukvo4hFf3bw-xF90QNSJ18y1iRk,6631
|
|
44
|
+
pydantic_ai/durable_exec/temporal/_run_context.py,sha256=5NTomzWBAlFcXeVw-4mqa76Rmrc8b3G1bB5ElVsAyCY,2310
|
|
45
|
+
pydantic_ai/durable_exec/temporal/_toolset.py,sha256=XlQx7NGSKR9n-mjNWaTn-i3HW9X4z5fZUAM9DwDTBwY,2865
|
|
34
46
|
pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
-
pydantic_ai/ext/aci.py,sha256=
|
|
36
|
-
pydantic_ai/ext/langchain.py,sha256=
|
|
37
|
-
pydantic_ai/models/__init__.py,sha256=
|
|
38
|
-
pydantic_ai/models/anthropic.py,sha256=
|
|
39
|
-
pydantic_ai/models/bedrock.py,sha256=
|
|
40
|
-
pydantic_ai/models/cohere.py,sha256=
|
|
41
|
-
pydantic_ai/models/fallback.py,sha256=
|
|
42
|
-
pydantic_ai/models/function.py,sha256=
|
|
43
|
-
pydantic_ai/models/gemini.py,sha256=
|
|
44
|
-
pydantic_ai/models/google.py,sha256=
|
|
45
|
-
pydantic_ai/models/groq.py,sha256=
|
|
46
|
-
pydantic_ai/models/huggingface.py,sha256=
|
|
47
|
-
pydantic_ai/models/instrumented.py,sha256=
|
|
48
|
-
pydantic_ai/models/mcp_sampling.py,sha256=
|
|
49
|
-
pydantic_ai/models/mistral.py,sha256
|
|
50
|
-
pydantic_ai/models/openai.py,sha256=
|
|
51
|
-
pydantic_ai/models/test.py,sha256=
|
|
52
|
-
pydantic_ai/models/wrapper.py,sha256=
|
|
47
|
+
pydantic_ai/ext/aci.py,sha256=sUllKDNO-LOMurbFgxwRHuzNlBkSa3aVBqXfEm-A_vo,2545
|
|
48
|
+
pydantic_ai/ext/langchain.py,sha256=iLVEZv1kcLkdIHo3us2yfdi0kVqyJ6qTaCt9BoLWm4k,2335
|
|
49
|
+
pydantic_ai/models/__init__.py,sha256=PQcyiPaSj72mt9kjPgg69eboqHqRl0JlBHTS3eCO5uY,34611
|
|
50
|
+
pydantic_ai/models/anthropic.py,sha256=th3jyYMcqa-I_hyOvtH5PKyOCX-IDnriaMT5VPKBVAo,29777
|
|
51
|
+
pydantic_ai/models/bedrock.py,sha256=wlw-9zuRnvMW-T5Nt1_rBTLWrYBllhCbu1GzkaBWddk,30819
|
|
52
|
+
pydantic_ai/models/cohere.py,sha256=ZbRvCPgPjDLItUj-r08VPmR8D8e6ARbUiRd8rsZ-1sY,13094
|
|
53
|
+
pydantic_ai/models/fallback.py,sha256=8d5C2MDbVBQ1NFHIciaIAJd8-DGzpTbMzIPIR1Dj4Xc,5514
|
|
54
|
+
pydantic_ai/models/function.py,sha256=CKSy_xA__n92BnOzfI9BXRsRVy3WjvuRyzibU26I8Js,14299
|
|
55
|
+
pydantic_ai/models/gemini.py,sha256=SWeahyDS_8STbofWJoIDvayBIGv-d4CYUuIBERPZkpI,38676
|
|
56
|
+
pydantic_ai/models/google.py,sha256=xiAbIT0WkfdwwvjGY5WzOgTpkpxXI7-A2cvnyxwmI8s,29636
|
|
57
|
+
pydantic_ai/models/groq.py,sha256=xibIAuIpSbdlF5ONAKLpEcU3qYX3JfAJRBh2K7Fh_U4,20840
|
|
58
|
+
pydantic_ai/models/huggingface.py,sha256=ONsqk_4YiojEpVzJvAjc5z92Bln71PKvk8eK53309bk,19731
|
|
59
|
+
pydantic_ai/models/instrumented.py,sha256=vVHO2sHkZnH7kcFr2iozOOuacfwGQYORhSgUtvDYZEU,16315
|
|
60
|
+
pydantic_ai/models/mcp_sampling.py,sha256=0pAMCTkzmhQuyhik8KG2ZUYGVh4tofjdZBf6WdR78ik,3490
|
|
61
|
+
pydantic_ai/models/mistral.py,sha256=-nB6VoHvNveLZHRCmXQaX9EFUJlFHXXt7nRyFtI2SIE,32251
|
|
62
|
+
pydantic_ai/models/openai.py,sha256=ys4opGwro9SX-JA2-Xul5hV_xydq5LusOR5Ck-D18Uo,61110
|
|
63
|
+
pydantic_ai/models/test.py,sha256=XKfJOwjnaMAuGpQwMT-H99vIicFymdJDpAtr0PU0Zoo,19151
|
|
64
|
+
pydantic_ai/models/wrapper.py,sha256=9MeHW7mXPsEK03IKL0rtjeX6QgXyZROOOzLh72GiX2k,2148
|
|
53
65
|
pydantic_ai/profiles/__init__.py,sha256=Ggk_pbNnRcaGnDWEBppsH3sUk8ajckaaXKfJlkLQWVo,2775
|
|
54
66
|
pydantic_ai/profiles/_json_schema.py,sha256=CthOGmPSjgEZRRglfvg31zyQ9vjHDdacXoFpmba93dE,7206
|
|
55
67
|
pydantic_ai/profiles/amazon.py,sha256=IPa2wydpcbFLLvhDK35-pwwoKo0Pg4vP84823fHx0zc,314
|
|
@@ -62,7 +74,7 @@ pydantic_ai/profiles/groq.py,sha256=5jLNnOuxq3HTrbY-cizJyGa1hIluW7sCPLmDP1C1unc,
|
|
|
62
74
|
pydantic_ai/profiles/meta.py,sha256=JdZcpdRWx8PY1pU9Z2i_TYtA0Cpbg23xyFrV7eXnooY,309
|
|
63
75
|
pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzCMQ,217
|
|
64
76
|
pydantic_ai/profiles/moonshotai.py,sha256=LL5RacKHKn6rdvhoKjpGgZ8aVriv5NMeL6HCWEANAiU,223
|
|
65
|
-
pydantic_ai/profiles/openai.py,sha256=
|
|
77
|
+
pydantic_ai/profiles/openai.py,sha256=YIzZAeJWO8dhmeHcOQk-Kyh6DUd5b0I5EQSTcK0-qy4,7564
|
|
66
78
|
pydantic_ai/profiles/qwen.py,sha256=zU19r2lVBxU0v0fXyA9G-VvG3XzBZMZJVxCpQutU9k0,309
|
|
67
79
|
pydantic_ai/providers/__init__.py,sha256=yxPgiTJKFYZbDW18tmVM6mmD2Znol3WwniwnhtlN0Ak,4141
|
|
68
80
|
pydantic_ai/providers/anthropic.py,sha256=D35UXxCPXv8yIbD0fj9Zg2FvNyoMoJMeDUtVM8Sn78I,3046
|
|
@@ -72,7 +84,7 @@ pydantic_ai/providers/cohere.py,sha256=LT6QaLPJBBlFUgYgXQOfKpbM9SXLzorWFxI7jNfOX
|
|
|
72
84
|
pydantic_ai/providers/deepseek.py,sha256=kUdM8eVp1lse4bS_uy70Gy7wgog94NTZ36GY-vhSB50,3060
|
|
73
85
|
pydantic_ai/providers/fireworks.py,sha256=TPbqOpNgXG59qovBaHWbbV2vsvROwlHwQ3PvqHUBH-s,3626
|
|
74
86
|
pydantic_ai/providers/github.py,sha256=zPu3oVJKjUE4zIqZ0YfgcTFBNdEy5rIBrSOdPCHJEG4,4406
|
|
75
|
-
pydantic_ai/providers/google.py,sha256=
|
|
87
|
+
pydantic_ai/providers/google.py,sha256=iLXcKUl5r7wdLuZtT1IM3obGZi7ecLM_PDyWdQKDncI,6038
|
|
76
88
|
pydantic_ai/providers/google_gla.py,sha256=dLkDxps5gEtxsQiDbs1e88lXLYeX4i2qnJtDiFFJ0Ng,1965
|
|
77
89
|
pydantic_ai/providers/google_vertex.py,sha256=9wJGctzQTEtmTTr3KCFAubDREMQJ4zOXt9k52F8R8Zs,9739
|
|
78
90
|
pydantic_ai/providers/grok.py,sha256=dIkpxuuJlZ4pFtTSgeeJgiM_Z3mJU9qvk4f7jvSzi24,3141
|
|
@@ -85,18 +97,19 @@ pydantic_ai/providers/openai.py,sha256=7iGij0EaFylab7dTZAZDgXr78tr-HsZrn9EI9AkWB
|
|
|
85
97
|
pydantic_ai/providers/openrouter.py,sha256=NXjNdnlXIBrBMMqbzcWQnowXOuZh4NHikXenBn5h3mc,4061
|
|
86
98
|
pydantic_ai/providers/together.py,sha256=zFVSMSm5jXbpkNouvBOTjWrPmlPpCp6sQS5LMSyVjrQ,3482
|
|
87
99
|
pydantic_ai/providers/vercel.py,sha256=wFIfyfD2RCAVRWtveDDMjumOkP8v9AHy94KV1HXF180,4285
|
|
88
|
-
pydantic_ai/toolsets/__init__.py,sha256=
|
|
89
|
-
pydantic_ai/toolsets/
|
|
90
|
-
pydantic_ai/toolsets/
|
|
91
|
-
pydantic_ai/toolsets/
|
|
100
|
+
pydantic_ai/toolsets/__init__.py,sha256=btvEfRHUzW8E6HiWP-AUKc0xBvIEigW6qWqVfnN11Ag,643
|
|
101
|
+
pydantic_ai/toolsets/_dynamic.py,sha256=EdhClHnmxEy3bdGdVrzg4TLGlYrK3m8VIqWxzGdIXew,2957
|
|
102
|
+
pydantic_ai/toolsets/abstract.py,sha256=jYgDcgnuWfMAgcjqripJQOlxWf2O7R-rAfsZUcC1MoI,7061
|
|
103
|
+
pydantic_ai/toolsets/combined.py,sha256=QmzU7jA98hnbddMOqvwuu2vUZoaPspu37-W0-hlQ-lw,4122
|
|
104
|
+
pydantic_ai/toolsets/deferred.py,sha256=Bm2ZthtjpmeZqlH57zFJc9z7n_xYtZgjX5hog36Qm9U,1654
|
|
92
105
|
pydantic_ai/toolsets/filtered.py,sha256=qmPeQDTZoWa_yyk6VXKHcpV9NFgdnLN48sBf7WItjBs,855
|
|
93
|
-
pydantic_ai/toolsets/function.py,sha256=
|
|
94
|
-
pydantic_ai/toolsets/prefixed.py,sha256=
|
|
106
|
+
pydantic_ai/toolsets/function.py,sha256=KKmHMljuV8YdaIDtHEs6xmyiUl-kaqTiQQGYtoWEfEs,10613
|
|
107
|
+
pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fbh5s,1426
|
|
95
108
|
pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
|
|
96
109
|
pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
|
|
97
|
-
pydantic_ai/toolsets/wrapper.py,sha256=
|
|
98
|
-
pydantic_ai_slim-0.
|
|
99
|
-
pydantic_ai_slim-0.
|
|
100
|
-
pydantic_ai_slim-0.
|
|
101
|
-
pydantic_ai_slim-0.
|
|
102
|
-
pydantic_ai_slim-0.
|
|
110
|
+
pydantic_ai/toolsets/wrapper.py,sha256=mMuMPdko9PJUdcsexlRXbwViSwKKJfv6JE58d8HK3ds,1646
|
|
111
|
+
pydantic_ai_slim-0.7.1.dist-info/METADATA,sha256=DMu_iRcI1lhpIap8dm_3UX3vapXTkwtAauYAbDVxskk,4252
|
|
112
|
+
pydantic_ai_slim-0.7.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
113
|
+
pydantic_ai_slim-0.7.1.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
|
|
114
|
+
pydantic_ai_slim-0.7.1.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
|
|
115
|
+
pydantic_ai_slim-0.7.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|