pydantic-ai-slim 1.0.13__py3-none-any.whl → 1.0.15__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/__init__.py +19 -1
- pydantic_ai/_agent_graph.py +118 -97
- pydantic_ai/_cli.py +4 -7
- pydantic_ai/_output.py +236 -192
- pydantic_ai/_parts_manager.py +8 -42
- pydantic_ai/_tool_manager.py +9 -16
- pydantic_ai/agent/abstract.py +169 -1
- pydantic_ai/builtin_tools.py +82 -0
- pydantic_ai/direct.py +7 -0
- pydantic_ai/durable_exec/dbos/_agent.py +106 -3
- pydantic_ai/durable_exec/temporal/_agent.py +123 -6
- pydantic_ai/durable_exec/temporal/_model.py +8 -0
- pydantic_ai/format_prompt.py +4 -3
- pydantic_ai/mcp.py +20 -10
- pydantic_ai/messages.py +149 -3
- pydantic_ai/models/__init__.py +15 -1
- pydantic_ai/models/anthropic.py +7 -3
- pydantic_ai/models/cohere.py +4 -0
- pydantic_ai/models/function.py +7 -4
- pydantic_ai/models/gemini.py +8 -0
- pydantic_ai/models/google.py +56 -23
- pydantic_ai/models/groq.py +11 -5
- pydantic_ai/models/huggingface.py +5 -3
- pydantic_ai/models/mistral.py +6 -8
- pydantic_ai/models/openai.py +197 -58
- pydantic_ai/models/test.py +4 -0
- pydantic_ai/output.py +5 -2
- pydantic_ai/profiles/__init__.py +2 -0
- pydantic_ai/profiles/google.py +5 -2
- pydantic_ai/profiles/openai.py +2 -1
- pydantic_ai/result.py +46 -30
- pydantic_ai/run.py +35 -7
- pydantic_ai/usage.py +5 -4
- {pydantic_ai_slim-1.0.13.dist-info → pydantic_ai_slim-1.0.15.dist-info}/METADATA +3 -3
- {pydantic_ai_slim-1.0.13.dist-info → pydantic_ai_slim-1.0.15.dist-info}/RECORD +38 -38
- {pydantic_ai_slim-1.0.13.dist-info → pydantic_ai_slim-1.0.15.dist-info}/WHEEL +0 -0
- {pydantic_ai_slim-1.0.13.dist-info → pydantic_ai_slim-1.0.15.dist-info}/entry_points.txt +0 -0
- {pydantic_ai_slim-1.0.13.dist-info → pydantic_ai_slim-1.0.15.dist-info}/licenses/LICENSE +0 -0
pydantic_ai/result.py
CHANGED
|
@@ -4,7 +4,7 @@ from collections.abc import AsyncIterator, Awaitable, Callable, Iterable
|
|
|
4
4
|
from copy import deepcopy
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from datetime import datetime
|
|
7
|
-
from typing import Generic, cast, overload
|
|
7
|
+
from typing import TYPE_CHECKING, Generic, cast, overload
|
|
8
8
|
|
|
9
9
|
from pydantic import ValidationError
|
|
10
10
|
from typing_extensions import TypeVar, deprecated
|
|
@@ -15,9 +15,7 @@ from ._output import (
|
|
|
15
15
|
OutputSchema,
|
|
16
16
|
OutputValidator,
|
|
17
17
|
OutputValidatorFunc,
|
|
18
|
-
PlainTextOutputSchema,
|
|
19
18
|
TextOutputSchema,
|
|
20
|
-
ToolOutputSchema,
|
|
21
19
|
)
|
|
22
20
|
from ._run_context import AgentDepsT, RunContext
|
|
23
21
|
from ._tool_manager import ToolManager
|
|
@@ -27,9 +25,11 @@ from .output import (
|
|
|
27
25
|
OutputDataT,
|
|
28
26
|
ToolOutput,
|
|
29
27
|
)
|
|
30
|
-
from .run import AgentRunResult
|
|
31
28
|
from .usage import RunUsage, UsageLimits
|
|
32
29
|
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from .run import AgentRunResult
|
|
32
|
+
|
|
33
33
|
__all__ = (
|
|
34
34
|
'OutputDataT',
|
|
35
35
|
'OutputDataT_inv',
|
|
@@ -95,7 +95,7 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
95
95
|
Debouncing is particularly important for long structured responses to reduce the overhead of
|
|
96
96
|
performing validation as each token is received.
|
|
97
97
|
"""
|
|
98
|
-
if not isinstance(self._output_schema,
|
|
98
|
+
if not isinstance(self._output_schema, TextOutputSchema):
|
|
99
99
|
raise exceptions.UserError('stream_text() can only be used with text responses')
|
|
100
100
|
|
|
101
101
|
if delta:
|
|
@@ -107,10 +107,17 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
107
107
|
text = await validator.validate(text, self._run_ctx) # pragma: no cover
|
|
108
108
|
yield text
|
|
109
109
|
|
|
110
|
+
# TODO (v2): Drop in favor of `response` property
|
|
110
111
|
def get(self) -> _messages.ModelResponse:
|
|
111
112
|
"""Get the current state of the response."""
|
|
112
113
|
return self._raw_stream_response.get()
|
|
113
114
|
|
|
115
|
+
@property
|
|
116
|
+
def response(self) -> _messages.ModelResponse:
|
|
117
|
+
"""Get the current state of the response."""
|
|
118
|
+
return self.get()
|
|
119
|
+
|
|
120
|
+
# TODO (v2): Make this a property
|
|
114
121
|
def usage(self) -> RunUsage:
|
|
115
122
|
"""Return the usage of the whole run.
|
|
116
123
|
|
|
@@ -119,6 +126,7 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
119
126
|
"""
|
|
120
127
|
return self._initial_run_ctx_usage + self._raw_stream_response.usage()
|
|
121
128
|
|
|
129
|
+
# TODO (v2): Make this a property
|
|
122
130
|
def timestamp(self) -> datetime:
|
|
123
131
|
"""Get the timestamp of the response."""
|
|
124
132
|
return self._raw_stream_response.timestamp
|
|
@@ -140,13 +148,9 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
140
148
|
|
|
141
149
|
output_tool_name = final_result_event.tool_name
|
|
142
150
|
|
|
143
|
-
if
|
|
151
|
+
if self._output_schema.toolset and output_tool_name is not None:
|
|
144
152
|
tool_call = next(
|
|
145
|
-
(
|
|
146
|
-
part
|
|
147
|
-
for part in message.parts
|
|
148
|
-
if isinstance(part, _messages.ToolCallPart) and part.tool_name == output_tool_name
|
|
149
|
-
),
|
|
153
|
+
(part for part in message.tool_calls if part.tool_name == output_tool_name),
|
|
150
154
|
None,
|
|
151
155
|
)
|
|
152
156
|
if tool_call is None:
|
|
@@ -156,13 +160,15 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
156
160
|
return await self._tool_manager.handle_call(
|
|
157
161
|
tool_call, allow_partial=allow_partial, wrap_validation_errors=False
|
|
158
162
|
)
|
|
159
|
-
elif deferred_tool_requests := _get_deferred_tool_requests(message.
|
|
163
|
+
elif deferred_tool_requests := _get_deferred_tool_requests(message.tool_calls, self._tool_manager):
|
|
160
164
|
if not self._output_schema.allows_deferred_tools:
|
|
161
165
|
raise exceptions.UserError(
|
|
162
166
|
'A deferred tool call was present, but `DeferredToolRequests` is not among output types. To resolve this, add `DeferredToolRequests` to the list of output types for this agent.'
|
|
163
167
|
)
|
|
164
168
|
return cast(OutputDataT, deferred_tool_requests)
|
|
165
|
-
elif
|
|
169
|
+
elif self._output_schema.allows_image and message.images:
|
|
170
|
+
return cast(OutputDataT, message.images[0])
|
|
171
|
+
elif text_processor := self._output_schema.text_processor:
|
|
166
172
|
text = ''
|
|
167
173
|
for part in message.parts:
|
|
168
174
|
if isinstance(part, _messages.TextPart):
|
|
@@ -172,7 +178,7 @@ class AgentStream(Generic[AgentDepsT, OutputDataT]):
|
|
|
172
178
|
# not part of the final result output, so we reset the accumulated text
|
|
173
179
|
text = ''
|
|
174
180
|
|
|
175
|
-
result_data = await
|
|
181
|
+
result_data = await text_processor.process(
|
|
176
182
|
text, self._run_ctx, allow_partial=allow_partial, wrap_validation_errors=False
|
|
177
183
|
)
|
|
178
184
|
for validator in self._output_validators:
|
|
@@ -398,7 +404,7 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
|
|
|
398
404
|
elif self._stream_response is not None:
|
|
399
405
|
async for output in self._stream_response.stream_output(debounce_by=debounce_by):
|
|
400
406
|
yield output
|
|
401
|
-
await self._marked_completed(self.
|
|
407
|
+
await self._marked_completed(self.response)
|
|
402
408
|
else:
|
|
403
409
|
raise ValueError('No stream response or run result provided') # pragma: no cover
|
|
404
410
|
|
|
@@ -426,7 +432,7 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
|
|
|
426
432
|
elif self._stream_response is not None:
|
|
427
433
|
async for text in self._stream_response.stream_text(delta=delta, debounce_by=debounce_by):
|
|
428
434
|
yield text
|
|
429
|
-
await self._marked_completed(self.
|
|
435
|
+
await self._marked_completed(self.response)
|
|
430
436
|
else:
|
|
431
437
|
raise ValueError('No stream response or run result provided') # pragma: no cover
|
|
432
438
|
|
|
@@ -451,15 +457,14 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
|
|
|
451
457
|
An async iterable of the structured response message and whether that is the last message.
|
|
452
458
|
"""
|
|
453
459
|
if self._run_result is not None:
|
|
454
|
-
|
|
455
|
-
yield model_response, True
|
|
460
|
+
yield self.response, True
|
|
456
461
|
await self._marked_completed()
|
|
457
462
|
elif self._stream_response is not None:
|
|
458
463
|
# if the message currently has any parts with content, yield before streaming
|
|
459
464
|
async for msg in self._stream_response.stream_responses(debounce_by=debounce_by):
|
|
460
465
|
yield msg, False
|
|
461
466
|
|
|
462
|
-
msg = self.
|
|
467
|
+
msg = self.response
|
|
463
468
|
yield msg, True
|
|
464
469
|
|
|
465
470
|
await self._marked_completed(msg)
|
|
@@ -474,11 +479,22 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
|
|
|
474
479
|
return output
|
|
475
480
|
elif self._stream_response is not None:
|
|
476
481
|
output = await self._stream_response.get_output()
|
|
477
|
-
await self._marked_completed(self.
|
|
482
|
+
await self._marked_completed(self.response)
|
|
478
483
|
return output
|
|
479
484
|
else:
|
|
480
485
|
raise ValueError('No stream response or run result provided') # pragma: no cover
|
|
481
486
|
|
|
487
|
+
@property
|
|
488
|
+
def response(self) -> _messages.ModelResponse:
|
|
489
|
+
"""Return the current state of the response."""
|
|
490
|
+
if self._run_result is not None:
|
|
491
|
+
return self._run_result.response
|
|
492
|
+
elif self._stream_response is not None:
|
|
493
|
+
return self._stream_response.get()
|
|
494
|
+
else:
|
|
495
|
+
raise ValueError('No stream response or run result provided') # pragma: no cover
|
|
496
|
+
|
|
497
|
+
# TODO (v2): Make this a property
|
|
482
498
|
def usage(self) -> RunUsage:
|
|
483
499
|
"""Return the usage of the whole run.
|
|
484
500
|
|
|
@@ -492,6 +508,7 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
|
|
|
492
508
|
else:
|
|
493
509
|
raise ValueError('No stream response or run result provided') # pragma: no cover
|
|
494
510
|
|
|
511
|
+
# TODO (v2): Make this a property
|
|
495
512
|
def timestamp(self) -> datetime:
|
|
496
513
|
"""Get the timestamp of the response."""
|
|
497
514
|
if self._run_result is not None:
|
|
@@ -560,20 +577,19 @@ def _get_usage_checking_stream_response(
|
|
|
560
577
|
|
|
561
578
|
|
|
562
579
|
def _get_deferred_tool_requests(
|
|
563
|
-
|
|
580
|
+
tool_calls: Iterable[_messages.ToolCallPart], tool_manager: ToolManager[AgentDepsT]
|
|
564
581
|
) -> DeferredToolRequests | None:
|
|
565
|
-
"""Get the deferred tool requests from the model response
|
|
582
|
+
"""Get the deferred tool requests from the model response tool calls."""
|
|
566
583
|
approvals: list[_messages.ToolCallPart] = []
|
|
567
584
|
calls: list[_messages.ToolCallPart] = []
|
|
568
585
|
|
|
569
|
-
for
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
if tool_def
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
calls.append(part)
|
|
586
|
+
for tool_call in tool_calls:
|
|
587
|
+
tool_def = tool_manager.get_tool_def(tool_call.tool_name)
|
|
588
|
+
if tool_def is not None: # pragma: no branch
|
|
589
|
+
if tool_def.kind == 'unapproved':
|
|
590
|
+
approvals.append(tool_call)
|
|
591
|
+
elif tool_def.kind == 'external':
|
|
592
|
+
calls.append(tool_call)
|
|
577
593
|
|
|
578
594
|
if not calls and not approvals:
|
|
579
595
|
return None
|
pydantic_ai/run.py
CHANGED
|
@@ -10,6 +10,7 @@ from pydantic_graph import End, GraphRun, GraphRunContext
|
|
|
10
10
|
|
|
11
11
|
from . import (
|
|
12
12
|
_agent_graph,
|
|
13
|
+
_utils,
|
|
13
14
|
exceptions,
|
|
14
15
|
messages as _messages,
|
|
15
16
|
usage as _usage,
|
|
@@ -227,6 +228,7 @@ class AgentRun(Generic[AgentDepsT, OutputDataT]):
|
|
|
227
228
|
assert isinstance(next_node, End), f'Unexpected node type: {type(next_node)}'
|
|
228
229
|
return next_node
|
|
229
230
|
|
|
231
|
+
# TODO (v2): Make this a property
|
|
230
232
|
def usage(self) -> _usage.RunUsage:
|
|
231
233
|
"""Get usage statistics for the run so far, including token usage, model requests, and so on."""
|
|
232
234
|
return self._graph_run.state.usage
|
|
@@ -244,10 +246,12 @@ class AgentRunResult(Generic[OutputDataT]):
|
|
|
244
246
|
output: OutputDataT
|
|
245
247
|
"""The output data from the agent run."""
|
|
246
248
|
|
|
247
|
-
_output_tool_name: str | None = dataclasses.field(repr=False)
|
|
248
|
-
_state: _agent_graph.GraphAgentState = dataclasses.field(
|
|
249
|
-
|
|
250
|
-
|
|
249
|
+
_output_tool_name: str | None = dataclasses.field(repr=False, compare=False, default=None)
|
|
250
|
+
_state: _agent_graph.GraphAgentState = dataclasses.field(
|
|
251
|
+
repr=False, compare=False, default_factory=_agent_graph.GraphAgentState
|
|
252
|
+
)
|
|
253
|
+
_new_message_index: int = dataclasses.field(repr=False, compare=False, default=0)
|
|
254
|
+
_traceparent_value: str | None = dataclasses.field(repr=False, compare=False, default=None)
|
|
251
255
|
|
|
252
256
|
@overload
|
|
253
257
|
def _traceparent(self, *, required: Literal[False]) -> str | None: ...
|
|
@@ -344,12 +348,36 @@ class AgentRunResult(Generic[OutputDataT]):
|
|
|
344
348
|
self.new_messages(output_tool_return_content=output_tool_return_content)
|
|
345
349
|
)
|
|
346
350
|
|
|
351
|
+
@property
|
|
352
|
+
def response(self) -> _messages.ModelResponse:
|
|
353
|
+
"""Return the last response from the message history."""
|
|
354
|
+
# The response may not be the very last item if it contained an output tool call. See `CallToolsNode._handle_final_result`.
|
|
355
|
+
for message in reversed(self.all_messages()):
|
|
356
|
+
if isinstance(message, _messages.ModelResponse):
|
|
357
|
+
return message
|
|
358
|
+
raise ValueError('No response found in the message history') # pragma: no cover
|
|
359
|
+
|
|
360
|
+
# TODO (v2): Make this a property
|
|
347
361
|
def usage(self) -> _usage.RunUsage:
|
|
348
362
|
"""Return the usage of the whole run."""
|
|
349
363
|
return self._state.usage
|
|
350
364
|
|
|
365
|
+
# TODO (v2): Make this a property
|
|
351
366
|
def timestamp(self) -> datetime:
|
|
352
367
|
"""Return the timestamp of last response."""
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
368
|
+
return self.response.timestamp
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
@dataclasses.dataclass(repr=False)
|
|
372
|
+
class AgentRunResultEvent(Generic[OutputDataT]):
|
|
373
|
+
"""An event indicating the agent run ended and containing the final result of the agent run."""
|
|
374
|
+
|
|
375
|
+
result: AgentRunResult[OutputDataT]
|
|
376
|
+
"""The result of the run."""
|
|
377
|
+
|
|
378
|
+
_: dataclasses.KW_ONLY
|
|
379
|
+
|
|
380
|
+
event_kind: Literal['agent_run_result'] = 'agent_run_result'
|
|
381
|
+
"""Event type identifier, used as a discriminator."""
|
|
382
|
+
|
|
383
|
+
__repr__ = _utils.dataclasses_no_defaults_repr
|
pydantic_ai/usage.py
CHANGED
|
@@ -340,12 +340,13 @@ class UsageLimits:
|
|
|
340
340
|
if self.total_tokens_limit is not None and total_tokens > self.total_tokens_limit:
|
|
341
341
|
raise UsageLimitExceeded(f'Exceeded the total_tokens_limit of {self.total_tokens_limit} ({total_tokens=})')
|
|
342
342
|
|
|
343
|
-
def check_before_tool_call(self,
|
|
344
|
-
"""Raises a `UsageLimitExceeded` exception if the next tool call would exceed the tool call limit."""
|
|
343
|
+
def check_before_tool_call(self, projected_usage: RunUsage) -> None:
|
|
344
|
+
"""Raises a `UsageLimitExceeded` exception if the next tool call(s) would exceed the tool call limit."""
|
|
345
345
|
tool_calls_limit = self.tool_calls_limit
|
|
346
|
-
|
|
346
|
+
tool_calls = projected_usage.tool_calls
|
|
347
|
+
if tool_calls_limit is not None and tool_calls > tool_calls_limit:
|
|
347
348
|
raise UsageLimitExceeded(
|
|
348
|
-
f'The next tool call would exceed the tool_calls_limit of {tool_calls_limit} (tool_calls=
|
|
349
|
+
f'The next tool call(s) would exceed the tool_calls_limit of {tool_calls_limit} ({tool_calls=}).'
|
|
349
350
|
)
|
|
350
351
|
|
|
351
352
|
__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.
|
|
3
|
+
Version: 1.0.15
|
|
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
|
|
@@ -33,7 +33,7 @@ Requires-Dist: genai-prices>=0.0.28
|
|
|
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.0.15
|
|
37
37
|
Requires-Dist: pydantic>=2.10
|
|
38
38
|
Requires-Dist: typing-inspection>=0.4.0
|
|
39
39
|
Provides-Extra: a2a
|
|
@@ -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.0.15; extra == 'evals'
|
|
61
61
|
Provides-Extra: google
|
|
62
62
|
Requires-Dist: google-genai>=1.31.0; extra == 'google'
|
|
63
63
|
Provides-Extra: groq
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
pydantic_ai/__init__.py,sha256=
|
|
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=
|
|
5
|
-
pydantic_ai/_cli.py,sha256=
|
|
4
|
+
pydantic_ai/_agent_graph.py,sha256=ZzUkx9remZgSdgfMPfBhKtb7ZyRuSfQb-QLESWrHGcU,53965
|
|
5
|
+
pydantic_ai/_cli.py,sha256=HxnWPUkEi_pRJZYZ_s25PkV361uAZY6IpN9ub5yMAzg,13994
|
|
6
6
|
pydantic_ai/_function_schema.py,sha256=UnDGh7Wh5z70pEaRujXF_hKsSibQdN2ywI6lZGz3LUo,11663
|
|
7
7
|
pydantic_ai/_griffe.py,sha256=BphvTL00FHxsSY56GM-bNyCOdwrpL0T3LbDQITWUK_Q,5280
|
|
8
8
|
pydantic_ai/_instrumentation.py,sha256=3XJxRUT0m2K6NfpAb-JKro4Rpw-8weqQ_ydtufeKVrU,2964
|
|
9
9
|
pydantic_ai/_json_schema.py,sha256=Br48srbwCTVIie98a9UEMGcCcTIa3E4zVvCbkxqQRso,7268
|
|
10
10
|
pydantic_ai/_mcp.py,sha256=PuvwnlLjv7YYOa9AZJCrklevBug99zGMhwJCBGG7BHQ,5626
|
|
11
11
|
pydantic_ai/_otel_messages.py,sha256=SsMpbyI1fIISOck_wQcZJPIOei8lOmvwARkdPSCx8y8,1650
|
|
12
|
-
pydantic_ai/_output.py,sha256=
|
|
13
|
-
pydantic_ai/_parts_manager.py,sha256=
|
|
12
|
+
pydantic_ai/_output.py,sha256=gHS1qwM701cH5FGGRUrMxgWlJhY1vNgdM6ylnHRa-Ew,40784
|
|
13
|
+
pydantic_ai/_parts_manager.py,sha256=kXMhigRJAwUcputw7i54pQkc85NuNVS4Zy36lFvnRvk,19800
|
|
14
14
|
pydantic_ai/_run_context.py,sha256=-ah9Ipf3mLTbvuYqmJSqBmBexaCcED7HGA1Llzs0dKU,2324
|
|
15
15
|
pydantic_ai/_system_prompt.py,sha256=WdDW_DTGHujcFFaK-J7J6mA4ZDJZ0IOKpyizJA-1Y5Q,1142
|
|
16
16
|
pydantic_ai/_thinking_part.py,sha256=_0DajGyWPa50WUTPWN1UPfZw0xD8_hHcuSt0T3fgRr0,1295
|
|
17
|
-
pydantic_ai/_tool_manager.py,sha256=
|
|
17
|
+
pydantic_ai/_tool_manager.py,sha256=se5Fikg4HaiTOnxJ4LFrezktZ2Zfv9a2OH0V9PtFE54,10464
|
|
18
18
|
pydantic_ai/_utils.py,sha256=TBzJ03szJPrmDdqRqKTyhRboTsyP6wppnCCprpZFBMw,16620
|
|
19
19
|
pydantic_ai/ag_ui.py,sha256=X3b4P_IraypCE3r-L2ETIo8G951A1MDdP4P5TQ8Fces,32067
|
|
20
|
-
pydantic_ai/builtin_tools.py,sha256=
|
|
21
|
-
pydantic_ai/direct.py,sha256=
|
|
20
|
+
pydantic_ai/builtin_tools.py,sha256=xtRIlEGUJ9UQzxqsKIXs-KD0awHCxBOvXlZ7CLq5oDM,5666
|
|
21
|
+
pydantic_ai/direct.py,sha256=bSYSA5RyxXQMA4gk6CA6meXRbWv2Mn3IeF8vr6viOXI,15061
|
|
22
22
|
pydantic_ai/exceptions.py,sha256=zsXZMKf2BJuVsfuHl1fWTkogLU37bd4yq7D6BKHAzVs,4968
|
|
23
|
-
pydantic_ai/format_prompt.py,sha256=
|
|
24
|
-
pydantic_ai/mcp.py,sha256=
|
|
25
|
-
pydantic_ai/messages.py,sha256=
|
|
26
|
-
pydantic_ai/output.py,sha256=
|
|
23
|
+
pydantic_ai/format_prompt.py,sha256=Enhe3wn-Fo15DcHM0_XgEOLSBWmNpwWYE4M_2vWw_VI,9565
|
|
24
|
+
pydantic_ai/mcp.py,sha256=7Ouwepk-p2rOq_Rkv-MSZYyEGJ6FfrJvR7ySghuSLwc,36693
|
|
25
|
+
pydantic_ai/messages.py,sha256=Riay2z3WPgx4VQN-MuXzTfrxqCW8aBSP1CHPjGPNtdo,63393
|
|
26
|
+
pydantic_ai/output.py,sha256=q91oqvJ-FqV9GbUUil7WVWbii66SVsVZ54AEm_NWSEo,13002
|
|
27
27
|
pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
pydantic_ai/result.py,sha256=
|
|
28
|
+
pydantic_ai/result.py,sha256=vfRe-s01zBtAZ7f_NoibptI3r80XfAq7CBhpJjgHSpo,26790
|
|
29
29
|
pydantic_ai/retries.py,sha256=QM4oDA9DG-Y2qP06fbCp8Dqq8ups40Rr4HYjAOlbNyM,14650
|
|
30
|
-
pydantic_ai/run.py,sha256=
|
|
30
|
+
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
|
-
pydantic_ai/usage.py,sha256=
|
|
33
|
+
pydantic_ai/usage.py,sha256=mTKKkXGTdEdka4HqER4i2hE7ULF4CiunGbisjgr38Z8,14102
|
|
34
34
|
pydantic_ai/agent/__init__.py,sha256=gmLwyTsyvL89sYvZR83Ba62A8lKLqTfRBk_KYbYYNQo,64116
|
|
35
|
-
pydantic_ai/agent/abstract.py,sha256=
|
|
35
|
+
pydantic_ai/agent/abstract.py,sha256=PX6r2g0uzbqQdigb5qeTBdfCEbGy6Djb0haKCCmTLrc,52702
|
|
36
36
|
pydantic_ai/agent/wrapper.py,sha256=xZw0spYA5oZkBc6GMcxV4hoQZSr02LbH9GCKqI3MokI,9734
|
|
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
|
|
39
39
|
pydantic_ai/common_tools/tavily.py,sha256=a7p2X03l9GS9B_0mvZZV3jePlCwf2TLNeej62-sPycs,2505
|
|
40
40
|
pydantic_ai/durable_exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
pydantic_ai/durable_exec/dbos/__init__.py,sha256=H_dT0ERuNCBP0Im8eVGl8F9h7E9Aj87-pvmnLpDelF0,199
|
|
42
|
-
pydantic_ai/durable_exec/dbos/_agent.py,sha256=
|
|
42
|
+
pydantic_ai/durable_exec/dbos/_agent.py,sha256=35PMPRSWwfi98e-p1U-3WRJfz-rXqIBbW_qevbvmdXg,37904
|
|
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
46
|
pydantic_ai/durable_exec/temporal/__init__.py,sha256=XKwy68wfgmjr057nolRwGHTKiadxufpQEGEUprAV09k,5563
|
|
47
|
-
pydantic_ai/durable_exec/temporal/_agent.py,sha256=
|
|
47
|
+
pydantic_ai/durable_exec/temporal/_agent.py,sha256=ayNY1QpoVkgYeyQKSU90bNMoZJgWvJCMI_Ou9Ufq7kU,42557
|
|
48
48
|
pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=3n_A5uHzygsT88LM105kKuYqwxC1sjI4bOzETeUbT4E,5553
|
|
49
49
|
pydantic_ai/durable_exec/temporal/_logfire.py,sha256=ASd7vb0cd61yESI0mgU2w9SCGxsOegz95HtQjKdlQkE,2472
|
|
50
50
|
pydantic_ai/durable_exec/temporal/_mcp_server.py,sha256=vxfWeI7ZtYyXVgX621rPtG-WOZjlKWnqJhcvR9eBgIo,6014
|
|
51
|
-
pydantic_ai/durable_exec/temporal/_model.py,sha256=
|
|
51
|
+
pydantic_ai/durable_exec/temporal/_model.py,sha256=sOrDgMjQmCizSXe041dNpd5EDFAXgE6r0LGZghWkaeg,7546
|
|
52
52
|
pydantic_ai/durable_exec/temporal/_run_context.py,sha256=Y0RTm-P6q8Oziu2gml6hpAjhbVBeJuktEme84qwXE8A,2449
|
|
53
53
|
pydantic_ai/durable_exec/temporal/_toolset.py,sha256=IlPQrumm2MpZrb518ru15s0jIl8-cGwvE6ZNWIZrFuE,2879
|
|
54
54
|
pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
55
|
pydantic_ai/ext/aci.py,sha256=YWYLXzTQJ6hS7qfgNycA8cRl69gogGgThqEU6II7eMA,2527
|
|
56
56
|
pydantic_ai/ext/langchain.py,sha256=kmbbV3Cx2BiNYEJCZMHVYQquUQD-zG2L_bwDangy0Ww,2317
|
|
57
|
-
pydantic_ai/models/__init__.py,sha256=
|
|
58
|
-
pydantic_ai/models/anthropic.py,sha256=
|
|
57
|
+
pydantic_ai/models/__init__.py,sha256=bZXZRrvQa5xEbv6GLvwmcI39vCZG-y6AxUGres1UtBk,35700
|
|
58
|
+
pydantic_ai/models/anthropic.py,sha256=OYFmejUY6W2DOVyLEaslmUBTznuH96PoZ2mOWNZLJ1Y,38220
|
|
59
59
|
pydantic_ai/models/bedrock.py,sha256=fha8zVZgDFYgDqO5nvBkZ2CEv4GV92yq_YnK4qmD73E,33639
|
|
60
|
-
pydantic_ai/models/cohere.py,sha256=
|
|
60
|
+
pydantic_ai/models/cohere.py,sha256=_ccK7XBts1OwD-RP8puU3z425SZ4PeJGts1WFhPjikg,14051
|
|
61
61
|
pydantic_ai/models/fallback.py,sha256=fjQz7qRuxEwC6aFYkglBv-2Z39-6kZ931vs6o7PIti8,5016
|
|
62
|
-
pydantic_ai/models/function.py,sha256=
|
|
63
|
-
pydantic_ai/models/gemini.py,sha256=
|
|
64
|
-
pydantic_ai/models/google.py,sha256=
|
|
65
|
-
pydantic_ai/models/groq.py,sha256=
|
|
66
|
-
pydantic_ai/models/huggingface.py,sha256=
|
|
62
|
+
pydantic_ai/models/function.py,sha256=7-ej1m4f7c1TbvgB8sF02qlFD7Kf-EX-k_xN4RkbIEw,15880
|
|
63
|
+
pydantic_ai/models/gemini.py,sha256=Ik7e1SnDCvFyjmYHcM-6vilXyl6pHY_GKaM3pHJGNG4,40016
|
|
64
|
+
pydantic_ai/models/google.py,sha256=vWBkQtieMH6fJ93uNMescz7Deo13ddibv-pfcfMSEes,41534
|
|
65
|
+
pydantic_ai/models/groq.py,sha256=pVLl-4Z5CtiYU7bLgRlFTQhfh4LkMi6-aSkvgDuddrk,29633
|
|
66
|
+
pydantic_ai/models/huggingface.py,sha256=711C0ysjLYKriGfSxPiaF6lqjGcNmIaJaCvAXoucTes,21488
|
|
67
67
|
pydantic_ai/models/instrumented.py,sha256=J8eVTutr3UP1r_wd5sM5c0BIdzkRqT-EGgd2NiF0ssQ,22319
|
|
68
68
|
pydantic_ai/models/mcp_sampling.py,sha256=qY4y4nXbRpNp2QbkfjzWLvF_8KLZGXypz4cc0lYRHXU,3553
|
|
69
|
-
pydantic_ai/models/mistral.py,sha256=
|
|
70
|
-
pydantic_ai/models/openai.py,sha256=
|
|
71
|
-
pydantic_ai/models/test.py,sha256=
|
|
69
|
+
pydantic_ai/models/mistral.py,sha256=fi57hADjYxZw8wEpAcNI6mqY32VG9hHK9GGRQ-9vlZg,33905
|
|
70
|
+
pydantic_ai/models/openai.py,sha256=t-H7Na6Ak7FPApcwn86-Rg_IBCvgBrPwBN-gKSnN_Wg,99216
|
|
71
|
+
pydantic_ai/models/test.py,sha256=5ER66nwZG7Iwm-KkzPo4vwNd3rulzgkpgysu4YcT1W4,20568
|
|
72
72
|
pydantic_ai/models/wrapper.py,sha256=nwh8Gea59blbr1JDKlUnkYICuI9TUubC4qP7iZRRW28,2440
|
|
73
|
-
pydantic_ai/profiles/__init__.py,sha256=
|
|
73
|
+
pydantic_ai/profiles/__init__.py,sha256=UHknN-CYsQexUaxfsgz_J_uSZ9QwistLSuAErQkvbcM,3385
|
|
74
74
|
pydantic_ai/profiles/amazon.py,sha256=IPa2wydpcbFLLvhDK35-pwwoKo0Pg4vP84823fHx0zc,314
|
|
75
75
|
pydantic_ai/profiles/anthropic.py,sha256=J9N46G8eOjHdQ5CwZSLiwGdPb0eeIMdsMjwosDpvNhI,275
|
|
76
76
|
pydantic_ai/profiles/cohere.py,sha256=lcL34Ht1jZopwuqoU6OV9l8vN4zwF-jiPjlsEABbSRo,215
|
|
77
77
|
pydantic_ai/profiles/deepseek.py,sha256=JDwfkr-0YovlB3jEKk7dNFvepxNf_YuLgLkGCtyXHSk,282
|
|
78
|
-
pydantic_ai/profiles/google.py,sha256=
|
|
78
|
+
pydantic_ai/profiles/google.py,sha256=9-fXikwK0gnVQZ7mPWSfF63NgELUjVfkDsaPJDfXiwM,5017
|
|
79
79
|
pydantic_ai/profiles/grok.py,sha256=nBOxOCYCK9aiLmz2Q-esqYhotNbbBC1boAoOYIk1tVw,211
|
|
80
80
|
pydantic_ai/profiles/groq.py,sha256=jD_vG6M5q_uwLmJgkPavWWhGCqo3HvT_4UYfwzC1BMU,682
|
|
81
81
|
pydantic_ai/profiles/harmony.py,sha256=HKOQ1QUBd9jLLabO9jMCq97d3pgAzd3Y7c_jiwPFS2s,555
|
|
82
82
|
pydantic_ai/profiles/meta.py,sha256=JdZcpdRWx8PY1pU9Z2i_TYtA0Cpbg23xyFrV7eXnooY,309
|
|
83
83
|
pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzCMQ,217
|
|
84
84
|
pydantic_ai/profiles/moonshotai.py,sha256=e1RJnbEvazE6aJAqfmYLYGNtwNwg52XQDRDkcLrv3fU,272
|
|
85
|
-
pydantic_ai/profiles/openai.py,sha256=
|
|
85
|
+
pydantic_ai/profiles/openai.py,sha256=MXOsktUqfcF2pBgYJMyFWMZafPJ7tejwyoFM2mjKzaY,9689
|
|
86
86
|
pydantic_ai/profiles/qwen.py,sha256=9SnTpMKndxNQMFyumyaOczJa5JGWbYQdpVKKW4OzKjk,749
|
|
87
87
|
pydantic_ai/providers/__init__.py,sha256=nqKuq778BrKuZCV8S5evmTKCHkFrakMDAnsHVifdvYI,4613
|
|
88
88
|
pydantic_ai/providers/anthropic.py,sha256=vwNjO2JJ0Ux_3PXI9_XvzNZ24PKessm8z2ja1uzbBwM,3327
|
|
@@ -121,8 +121,8 @@ pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fb
|
|
|
121
121
|
pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
|
|
122
122
|
pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
|
|
123
123
|
pydantic_ai/toolsets/wrapper.py,sha256=KRzF1p8dncHbva8CE6Ud-IC5E_aygIHlwH5atXK55k4,1673
|
|
124
|
-
pydantic_ai_slim-1.0.
|
|
125
|
-
pydantic_ai_slim-1.0.
|
|
126
|
-
pydantic_ai_slim-1.0.
|
|
127
|
-
pydantic_ai_slim-1.0.
|
|
128
|
-
pydantic_ai_slim-1.0.
|
|
124
|
+
pydantic_ai_slim-1.0.15.dist-info/METADATA,sha256=f2l2aq6lWglum9DIPNIXWcaeHlEl6VSjWe9zl_xiZso,4631
|
|
125
|
+
pydantic_ai_slim-1.0.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
126
|
+
pydantic_ai_slim-1.0.15.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
|
|
127
|
+
pydantic_ai_slim-1.0.15.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
|
|
128
|
+
pydantic_ai_slim-1.0.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|