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

@@ -24,6 +24,7 @@ from ..messages import (
24
24
  BuiltinToolCallPart,
25
25
  BuiltinToolReturnPart,
26
26
  DocumentUrl,
27
+ FinishReason,
27
28
  ImageUrl,
28
29
  ModelMessage,
29
30
  ModelRequest,
@@ -72,6 +73,7 @@ try:
72
73
  )
73
74
  from openai.types.responses import ComputerToolParam, FileSearchToolParam, WebSearchToolParam
74
75
  from openai.types.responses.response_input_param import FunctionCallOutput, Message
76
+ from openai.types.responses.response_status import ResponseStatus
75
77
  from openai.types.shared import ReasoningEffort
76
78
  from openai.types.shared_params import Reasoning
77
79
  except ImportError as _import_error:
@@ -103,6 +105,25 @@ allows this model to be used more easily with other model types (ie, Ollama, Dee
103
105
  """
104
106
 
105
107
 
108
+ _CHAT_FINISH_REASON_MAP: dict[
109
+ Literal['stop', 'length', 'tool_calls', 'content_filter', 'function_call'], FinishReason
110
+ ] = {
111
+ 'stop': 'stop',
112
+ 'length': 'length',
113
+ 'tool_calls': 'tool_call',
114
+ 'content_filter': 'content_filter',
115
+ 'function_call': 'tool_call',
116
+ }
117
+
118
+ _RESPONSES_FINISH_REASON_MAP: dict[Literal['max_output_tokens', 'content_filter'] | ResponseStatus, FinishReason] = {
119
+ 'max_output_tokens': 'length',
120
+ 'content_filter': 'content_filter',
121
+ 'completed': 'stop',
122
+ 'cancelled': 'error',
123
+ 'failed': 'error',
124
+ }
125
+
126
+
106
127
  class OpenAIChatModelSettings(ModelSettings, total=False):
107
128
  """Settings used for an OpenAI model request."""
108
129
 
@@ -474,24 +495,22 @@ class OpenAIChatModel(Model):
474
495
  if reasoning_content := getattr(choice.message, 'reasoning_content', None):
475
496
  items.append(ThinkingPart(content=reasoning_content))
476
497
 
477
- vendor_details: dict[str, Any] | None = None
498
+ vendor_details: dict[str, Any] = {}
478
499
 
479
500
  # Add logprobs to vendor_details if available
480
501
  if choice.logprobs is not None and choice.logprobs.content:
481
502
  # Convert logprobs to a serializable format
482
- vendor_details = {
483
- 'logprobs': [
484
- {
485
- 'token': lp.token,
486
- 'bytes': lp.bytes,
487
- 'logprob': lp.logprob,
488
- 'top_logprobs': [
489
- {'token': tlp.token, 'bytes': tlp.bytes, 'logprob': tlp.logprob} for tlp in lp.top_logprobs
490
- ],
491
- }
492
- for lp in choice.logprobs.content
493
- ],
494
- }
503
+ vendor_details['logprobs'] = [
504
+ {
505
+ 'token': lp.token,
506
+ 'bytes': lp.bytes,
507
+ 'logprob': lp.logprob,
508
+ 'top_logprobs': [
509
+ {'token': tlp.token, 'bytes': tlp.bytes, 'logprob': tlp.logprob} for tlp in lp.top_logprobs
510
+ ],
511
+ }
512
+ for lp in choice.logprobs.content
513
+ ]
495
514
 
496
515
  if choice.message.content is not None:
497
516
  items.extend(split_content_into_text_and_thinking(choice.message.content, self.profile.thinking_tags))
@@ -507,14 +526,21 @@ class OpenAIChatModel(Model):
507
526
  assert_never(c)
508
527
  part.tool_call_id = _guard_tool_call_id(part)
509
528
  items.append(part)
529
+
530
+ finish_reason: FinishReason | None = None
531
+ if raw_finish_reason := choice.finish_reason: # pragma: no branch
532
+ vendor_details['finish_reason'] = raw_finish_reason
533
+ finish_reason = _CHAT_FINISH_REASON_MAP.get(raw_finish_reason)
534
+
510
535
  return ModelResponse(
511
536
  parts=items,
512
537
  usage=_map_usage(response),
513
538
  model_name=response.model,
514
539
  timestamp=timestamp,
515
- provider_details=vendor_details,
540
+ provider_details=vendor_details or None,
516
541
  provider_response_id=response.id,
517
542
  provider_name=self._provider.name,
543
+ finish_reason=finish_reason,
518
544
  )
519
545
 
520
546
  async def _process_streamed_response(
@@ -823,6 +849,14 @@ class OpenAIResponsesModel(Model):
823
849
  items.append(TextPart(content.text))
824
850
  elif item.type == 'function_call':
825
851
  items.append(ToolCallPart(item.name, item.arguments, tool_call_id=item.call_id))
852
+
853
+ finish_reason: FinishReason | None = None
854
+ provider_details: dict[str, Any] | None = None
855
+ raw_finish_reason = details.reason if (details := response.incomplete_details) else response.status
856
+ if raw_finish_reason:
857
+ provider_details = {'finish_reason': raw_finish_reason}
858
+ finish_reason = _RESPONSES_FINISH_REASON_MAP.get(raw_finish_reason)
859
+
826
860
  return ModelResponse(
827
861
  parts=items,
828
862
  usage=_map_usage(response),
@@ -830,6 +864,8 @@ class OpenAIResponsesModel(Model):
830
864
  provider_response_id=response.id,
831
865
  timestamp=timestamp,
832
866
  provider_name=self._provider.name,
867
+ finish_reason=finish_reason,
868
+ provider_details=provider_details,
833
869
  )
834
870
 
835
871
  async def _process_streamed_response(
@@ -1169,6 +1205,9 @@ class OpenAIStreamedResponse(StreamedResponse):
1169
1205
  async for chunk in self._response:
1170
1206
  self._usage += _map_usage(chunk)
1171
1207
 
1208
+ if chunk.id and self.provider_response_id is None:
1209
+ self.provider_response_id = chunk.id
1210
+
1172
1211
  try:
1173
1212
  choice = chunk.choices[0]
1174
1213
  except IndexError:
@@ -1178,6 +1217,10 @@ class OpenAIStreamedResponse(StreamedResponse):
1178
1217
  if choice.delta is None: # pyright: ignore[reportUnnecessaryComparison]
1179
1218
  continue
1180
1219
 
1220
+ if raw_finish_reason := choice.finish_reason:
1221
+ self.provider_details = {'finish_reason': raw_finish_reason}
1222
+ self.finish_reason = _CHAT_FINISH_REASON_MAP.get(raw_finish_reason)
1223
+
1181
1224
  # Handle the text part of the response
1182
1225
  content = choice.delta.content
1183
1226
  if content is not None:
@@ -1237,6 +1280,13 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1237
1280
  if isinstance(chunk, responses.ResponseCompletedEvent):
1238
1281
  self._usage += _map_usage(chunk.response)
1239
1282
 
1283
+ raw_finish_reason = (
1284
+ details.reason if (details := chunk.response.incomplete_details) else chunk.response.status
1285
+ )
1286
+ if raw_finish_reason: # pragma: no branch
1287
+ self.provider_details = {'finish_reason': raw_finish_reason}
1288
+ self.finish_reason = _RESPONSES_FINISH_REASON_MAP.get(raw_finish_reason)
1289
+
1240
1290
  elif isinstance(chunk, responses.ResponseContentPartAddedEvent):
1241
1291
  pass # there's nothing we need to do here
1242
1292
 
@@ -1244,7 +1294,8 @@ class OpenAIResponsesStreamedResponse(StreamedResponse):
1244
1294
  pass # there's nothing we need to do here
1245
1295
 
1246
1296
  elif isinstance(chunk, responses.ResponseCreatedEvent):
1247
- pass # there's nothing we need to do here
1297
+ if chunk.response.id: # pragma: no branch
1298
+ self.provider_response_id = chunk.response.id
1248
1299
 
1249
1300
  elif isinstance(chunk, responses.ResponseFailedEvent): # pragma: no cover
1250
1301
  self._usage += _map_usage(chunk.response)
@@ -35,11 +35,19 @@ class BedrockModelProfile(ModelProfile):
35
35
  ALL FIELDS MUST BE `bedrock_` PREFIXED SO YOU CAN MERGE THEM WITH OTHER MODELS.
36
36
  """
37
37
 
38
- bedrock_supports_tool_choice: bool = True
38
+ bedrock_supports_tool_choice: bool = False
39
39
  bedrock_tool_result_format: Literal['text', 'json'] = 'text'
40
40
  bedrock_send_back_thinking_parts: bool = False
41
41
 
42
42
 
43
+ def bedrock_amazon_model_profile(model_name: str) -> ModelProfile | None:
44
+ """Get the model profile for an Amazon model used via Bedrock."""
45
+ profile = amazon_model_profile(model_name)
46
+ if 'nova' in model_name:
47
+ return BedrockModelProfile(bedrock_supports_tool_choice=True).update(profile)
48
+ return profile
49
+
50
+
43
51
  class BedrockProvider(Provider[BaseClient]):
44
52
  """Provider for AWS Bedrock."""
45
53
 
@@ -58,13 +66,13 @@ class BedrockProvider(Provider[BaseClient]):
58
66
  def model_profile(self, model_name: str) -> ModelProfile | None:
59
67
  provider_to_profile: dict[str, Callable[[str], ModelProfile | None]] = {
60
68
  'anthropic': lambda model_name: BedrockModelProfile(
61
- bedrock_supports_tool_choice=False, bedrock_send_back_thinking_parts=True
69
+ bedrock_supports_tool_choice=True, bedrock_send_back_thinking_parts=True
62
70
  ).update(anthropic_model_profile(model_name)),
63
71
  'mistral': lambda model_name: BedrockModelProfile(bedrock_tool_result_format='json').update(
64
72
  mistral_model_profile(model_name)
65
73
  ),
66
74
  'cohere': cohere_model_profile,
67
- 'amazon': amazon_model_profile,
75
+ 'amazon': bedrock_amazon_model_profile,
68
76
  'meta': meta_model_profile,
69
77
  'deepseek': deepseek_model_profile,
70
78
  }
pydantic_ai/tools.py CHANGED
@@ -253,6 +253,7 @@ class Tool(Generic[AgentDepsT]):
253
253
  docstring_format: DocstringFormat
254
254
  require_parameter_descriptions: bool
255
255
  strict: bool | None
256
+ sequential: bool
256
257
  requires_approval: bool
257
258
  function_schema: _function_schema.FunctionSchema
258
259
  """
@@ -274,6 +275,7 @@ class Tool(Generic[AgentDepsT]):
274
275
  require_parameter_descriptions: bool = False,
275
276
  schema_generator: type[GenerateJsonSchema] = GenerateToolJsonSchema,
276
277
  strict: bool | None = None,
278
+ sequential: bool = False,
277
279
  requires_approval: bool = False,
278
280
  function_schema: _function_schema.FunctionSchema | None = None,
279
281
  ):
@@ -327,6 +329,7 @@ class Tool(Generic[AgentDepsT]):
327
329
  schema_generator: The JSON schema generator class to use. Defaults to `GenerateToolJsonSchema`.
328
330
  strict: Whether to enforce JSON schema compliance (only affects OpenAI).
329
331
  See [`ToolDefinition`][pydantic_ai.tools.ToolDefinition] for more info.
332
+ sequential: Whether the function requires a sequential/serial execution environment. Defaults to False.
330
333
  requires_approval: Whether this tool requires human-in-the-loop approval. Defaults to False.
331
334
  See the [tools documentation](../deferred-tools.md#human-in-the-loop-tool-approval) for more info.
332
335
  function_schema: The function schema to use for the tool. If not provided, it will be generated.
@@ -347,6 +350,7 @@ class Tool(Generic[AgentDepsT]):
347
350
  self.docstring_format = docstring_format
348
351
  self.require_parameter_descriptions = require_parameter_descriptions
349
352
  self.strict = strict
353
+ self.sequential = sequential
350
354
  self.requires_approval = requires_approval
351
355
 
352
356
  @classmethod
@@ -357,6 +361,7 @@ class Tool(Generic[AgentDepsT]):
357
361
  description: str | None,
358
362
  json_schema: JsonSchemaValue,
359
363
  takes_ctx: bool = False,
364
+ sequential: bool = False,
360
365
  ) -> Self:
361
366
  """Creates a Pydantic tool from a function and a JSON schema.
362
367
 
@@ -370,6 +375,7 @@ class Tool(Generic[AgentDepsT]):
370
375
  json_schema: The schema for the function arguments
371
376
  takes_ctx: An optional boolean parameter indicating whether the function
372
377
  accepts the context object as an argument.
378
+ sequential: Whether the function requires a sequential/serial execution environment. Defaults to False.
373
379
 
374
380
  Returns:
375
381
  A Pydantic tool that calls the function
@@ -389,6 +395,7 @@ class Tool(Generic[AgentDepsT]):
389
395
  name=name,
390
396
  description=description,
391
397
  function_schema=function_schema,
398
+ sequential=sequential,
392
399
  )
393
400
 
394
401
  @property
@@ -398,6 +405,7 @@ class Tool(Generic[AgentDepsT]):
398
405
  description=self.description,
399
406
  parameters_json_schema=self.function_schema.json_schema,
400
407
  strict=self.strict,
408
+ sequential=self.sequential,
401
409
  )
402
410
 
403
411
  async def prepare_tool_def(self, ctx: RunContext[AgentDepsT]) -> ToolDefinition | None:
@@ -466,6 +474,9 @@ class ToolDefinition:
466
474
  Note: this is currently only supported by OpenAI models.
467
475
  """
468
476
 
477
+ sequential: bool = False
478
+ """Whether this tool requires a sequential/serial execution environment."""
479
+
469
480
  kind: ToolKind = field(default='function')
470
481
  """The kind of tool:
471
482
 
@@ -97,6 +97,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
97
97
  require_parameter_descriptions: bool | None = None,
98
98
  schema_generator: type[GenerateJsonSchema] | None = None,
99
99
  strict: bool | None = None,
100
+ sequential: bool = False,
100
101
  requires_approval: bool = False,
101
102
  ) -> Callable[[ToolFuncEither[AgentDepsT, ToolParams]], ToolFuncEither[AgentDepsT, ToolParams]]: ...
102
103
 
@@ -112,6 +113,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
112
113
  require_parameter_descriptions: bool | None = None,
113
114
  schema_generator: type[GenerateJsonSchema] | None = None,
114
115
  strict: bool | None = None,
116
+ sequential: bool = False,
115
117
  requires_approval: bool = False,
116
118
  ) -> Any:
117
119
  """Decorator to register a tool function which takes [`RunContext`][pydantic_ai.tools.RunContext] as its first argument.
@@ -161,6 +163,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
161
163
  If `None`, the default value is determined by the toolset.
162
164
  strict: Whether to enforce JSON schema compliance (only affects OpenAI).
163
165
  See [`ToolDefinition`][pydantic_ai.tools.ToolDefinition] for more info.
166
+ sequential: Whether the function requires a sequential/serial execution environment. Defaults to False.
164
167
  requires_approval: Whether this tool requires human-in-the-loop approval. Defaults to False.
165
168
  See the [tools documentation](../deferred-tools.md#human-in-the-loop-tool-approval) for more info.
166
169
  """
@@ -179,6 +182,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
179
182
  require_parameter_descriptions,
180
183
  schema_generator,
181
184
  strict,
185
+ sequential,
182
186
  requires_approval,
183
187
  )
184
188
  return func_
@@ -196,6 +200,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
196
200
  require_parameter_descriptions: bool | None = None,
197
201
  schema_generator: type[GenerateJsonSchema] | None = None,
198
202
  strict: bool | None = None,
203
+ sequential: bool = False,
199
204
  requires_approval: bool = False,
200
205
  ) -> None:
201
206
  """Add a function as a tool to the toolset.
@@ -222,6 +227,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
222
227
  If `None`, the default value is determined by the toolset.
223
228
  strict: Whether to enforce JSON schema compliance (only affects OpenAI).
224
229
  See [`ToolDefinition`][pydantic_ai.tools.ToolDefinition] for more info.
230
+ sequential: Whether the function requires a sequential/serial execution environment. Defaults to False.
225
231
  requires_approval: Whether this tool requires human-in-the-loop approval. Defaults to False.
226
232
  See the [tools documentation](../deferred-tools.md#human-in-the-loop-tool-approval) for more info.
227
233
  """
@@ -242,6 +248,7 @@ class FunctionToolset(AbstractToolset[AgentDepsT]):
242
248
  require_parameter_descriptions=require_parameter_descriptions,
243
249
  schema_generator=schema_generator,
244
250
  strict=strict,
251
+ sequential=sequential,
245
252
  requires_approval=requires_approval,
246
253
  )
247
254
  self.add_tool(tool)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 1.0.1
3
+ Version: 1.0.2
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.22
32
+ Requires-Dist: genai-prices>=0.0.23
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.1
36
+ Requires-Dist: pydantic-graph==1.0.2
37
37
  Requires-Dist: pydantic>=2.10
38
38
  Requires-Dist: typing-inspection>=0.4.0
39
39
  Provides-Extra: a2a
@@ -52,10 +52,12 @@ Requires-Dist: pyperclip>=1.9.0; extra == 'cli'
52
52
  Requires-Dist: rich>=13; extra == 'cli'
53
53
  Provides-Extra: cohere
54
54
  Requires-Dist: cohere>=5.16.0; (platform_system != 'Emscripten') and extra == 'cohere'
55
+ Provides-Extra: dbos
56
+ Requires-Dist: dbos>=1.13.0; extra == 'dbos'
55
57
  Provides-Extra: duckduckgo
56
58
  Requires-Dist: ddgs>=9.0.0; extra == 'duckduckgo'
57
59
  Provides-Extra: evals
58
- Requires-Dist: pydantic-evals==1.0.1; extra == 'evals'
60
+ Requires-Dist: pydantic-evals==1.0.2; extra == 'evals'
59
61
  Provides-Extra: google
60
62
  Requires-Dist: google-genai>=1.31.0; extra == 'google'
61
63
  Provides-Extra: groq
@@ -1,7 +1,7 @@
1
1
  pydantic_ai/__init__.py,sha256=CfqGPSjKlDl5iw1L48HbELsDuzxIzBFnFnovI_GcFWA,2083
2
2
  pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
3
3
  pydantic_ai/_a2a.py,sha256=2Hopcyl6o6U91eVkd7iAbEPYA5f0hJb8A5_fwMC0UfM,12168
4
- pydantic_ai/_agent_graph.py,sha256=lgifW_LwNATj0usC4wfU32Z4PEsPNHcEbbHtzIj6Y_0,46620
4
+ pydantic_ai/_agent_graph.py,sha256=dO2RClUNQwLeKIpwB3JsbNYy6KNx2eXCrf4BIJ7p0qo,47622
5
5
  pydantic_ai/_cli.py,sha256=C-Uvbdx9wWnNqZKHN_r8d4mGte_aIPikOkKrTPvdrN8,14057
6
6
  pydantic_ai/_function_schema.py,sha256=olbmUMQoQV5qKV4j0-cOnhcTINz4uYyeDqMyusrFRtY,11234
7
7
  pydantic_ai/_griffe.py,sha256=BphvTL00FHxsSY56GM-bNyCOdwrpL0T3LbDQITWUK_Q,5280
@@ -12,30 +12,35 @@ pydantic_ai/_parts_manager.py,sha256=SZi2_G9Z5Z9BLuInfgcki9p5yUhVjR38WcxfuOoECLA
12
12
  pydantic_ai/_run_context.py,sha256=AFSTtOBbUAnPpM-V5_b5fLMVAFbEBX4oOdYsGR9ayt4,1824
13
13
  pydantic_ai/_system_prompt.py,sha256=WdDW_DTGHujcFFaK-J7J6mA4ZDJZ0IOKpyizJA-1Y5Q,1142
14
14
  pydantic_ai/_thinking_part.py,sha256=x80-Vkon16GOyq3W6f2qzafTVPC5dCgF7QD3k8ZMmYU,1304
15
- pydantic_ai/_tool_manager.py,sha256=YUTA9uJneug_vkxCGrTc34Qxyzz2dAuDNt5n4x2k0zA,9513
15
+ pydantic_ai/_tool_manager.py,sha256=1lPPIrEc9sLR9c3GEv2GE2STZ88ipTHRqUYNzqrAKzo,9779
16
16
  pydantic_ai/_utils.py,sha256=xa2PoAcTN-oXhfXOONOighmue-jtSv668o9Fu_IdO0A,16062
17
17
  pydantic_ai/ag_ui.py,sha256=L21cc_LN532psY70GNgJNaj-PtBpLgqARJBF1zb2ZX4,28127
18
18
  pydantic_ai/builtin_tools.py,sha256=t0wa6KsgDCRoZMKJKRzRDyxaz1X4mDWMHlGjQmqFLdg,3222
19
19
  pydantic_ai/direct.py,sha256=zMsz6poVgEq7t7L_8FWM6hmKdqTzjyQYL5xzQt_59Us,14951
20
20
  pydantic_ai/exceptions.py,sha256=zsXZMKf2BJuVsfuHl1fWTkogLU37bd4yq7D6BKHAzVs,4968
21
21
  pydantic_ai/format_prompt.py,sha256=37imBG2Fgpn-_RfAFalOX8Xc_XpGH2gY9tnhJDvxfk8,4243
22
- pydantic_ai/mcp.py,sha256=1sKEgd8Eue5vWaUyU-s3TWlOaH6rfXetsuz_sHYorXE,30384
23
- pydantic_ai/messages.py,sha256=5SeqvRf0dMe3BTEtvTHTmcm3MMz7PIq5zIS6RRAhtIg,54544
22
+ pydantic_ai/mcp.py,sha256=cmgi3Nq_qe1cTqs-R92WMfZw6bwjSqy2R6NiR7isPcQ,30364
23
+ pydantic_ai/messages.py,sha256=PrewulR99D-WHBLIUjZDPiDSOHaTfo6-_AGDl14KdTA,54897
24
24
  pydantic_ai/output.py,sha256=wzNgVKJgxyXtSH-uNbRxIaUNLidxlQcwWYT2o1gY2hE,12037
25
25
  pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  pydantic_ai/result.py,sha256=FrJbd0nwaRVIxGH_EhV-ITQvrrd-JaDya9EDsE5-Pps,25389
27
27
  pydantic_ai/retries.py,sha256=QM4oDA9DG-Y2qP06fbCp8Dqq8ups40Rr4HYjAOlbNyM,14650
28
28
  pydantic_ai/run.py,sha256=qpTu2Q2O3lvcQAZREuIpyL0vQN13AvW99SwD7Oe9hKc,15175
29
29
  pydantic_ai/settings.py,sha256=yuUZ7-GkdPB-Gbx71kSdh8dSr6gwM9gEwk84qNxPO_I,3552
30
- pydantic_ai/tools.py,sha256=SFiLSHc4TwlhZ73nPpjd4etVovsSyPcYEQ9520Gz8xI,19169
30
+ pydantic_ai/tools.py,sha256=McOPcViIGCjJzoyoipUTrttPPRMsIkbbm9ike8PaS8c,19712
31
31
  pydantic_ai/usage.py,sha256=UoSOwhH-NTAeXl7Tq8GWXcW82m8zQLQvThvQehEx08g,14070
32
- pydantic_ai/agent/__init__.py,sha256=FLlpv4-j0-94xEMA5GV4HGz7K3Y1zrMb_cVvlp-XDNs,62321
32
+ pydantic_ai/agent/__init__.py,sha256=WES-ZG7s7QQOOBIMN8fE9nXRTt_zD_M0WFsgwuz1O7c,62499
33
33
  pydantic_ai/agent/abstract.py,sha256=nKDP_T0hRhi1RGVNIcAQbmQkTrwGWbTxt_Lzwfa7cPs,44291
34
34
  pydantic_ai/agent/wrapper.py,sha256=--IJo8Yb-2uzcCBSIB9oB_9FQ1R7yZYkWnLSq0iUExs,9464
35
35
  pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  pydantic_ai/common_tools/duckduckgo.py,sha256=cJd-BUg-i50E0QjKveRCndGlU5GdvLq9UgNNJ18VQIQ,2263
37
37
  pydantic_ai/common_tools/tavily.py,sha256=Q1xxSF5HtXAaZ10Pp-OaDOHXwJf2mco9wScGEQXD7E4,2495
38
38
  pydantic_ai/durable_exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ pydantic_ai/durable_exec/dbos/__init__.py,sha256=H_dT0ERuNCBP0Im8eVGl8F9h7E9Aj87-pvmnLpDelF0,199
40
+ pydantic_ai/durable_exec/dbos/_agent.py,sha256=TS_4RjBawsD7ykdtG_gCQyXIh9clfJF1Ig7_vimxWvo,32464
41
+ pydantic_ai/durable_exec/dbos/_mcp_server.py,sha256=XeDeBnyNwonPMZaSd2IMDf3ye0CTgYO9b9Vh8ZoeT6A,3009
42
+ pydantic_ai/durable_exec/dbos/_model.py,sha256=XNGLKJ5a9znUWnMSIA0SzxvQmUJREWzcVDrnfdjMoac,5115
43
+ pydantic_ai/durable_exec/dbos/_utils.py,sha256=_aNceFvTcNeqb78sTDYM2TdYph85tbdeLueyXY1lbTA,242
39
44
  pydantic_ai/durable_exec/temporal/__init__.py,sha256=XKwy68wfgmjr057nolRwGHTKiadxufpQEGEUprAV09k,5563
40
45
  pydantic_ai/durable_exec/temporal/_agent.py,sha256=9-yANaXqbOELkvTu_zeJI5tROKUY2t9-WYUIksSmzD8,36901
41
46
  pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=Hnfz3ukOqgq8j3h9u97S-fMfq4un1HZA4kxN2irWD_0,5562
@@ -47,20 +52,20 @@ pydantic_ai/durable_exec/temporal/_toolset.py,sha256=HxmQ5vut7Zd5eyrC27eNNn5_CHA
47
52
  pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
53
  pydantic_ai/ext/aci.py,sha256=sUllKDNO-LOMurbFgxwRHuzNlBkSa3aVBqXfEm-A_vo,2545
49
54
  pydantic_ai/ext/langchain.py,sha256=iLVEZv1kcLkdIHo3us2yfdi0kVqyJ6qTaCt9BoLWm4k,2335
50
- pydantic_ai/models/__init__.py,sha256=BmZ4kyiGIjsapj7cmKc6uF4EEOnuN6iiDumuOeGfxOk,35692
51
- pydantic_ai/models/anthropic.py,sha256=IsHBwJ55IYor27sewq039rc923fqi3AUWXAS_vbA978,30286
55
+ pydantic_ai/models/__init__.py,sha256=30HXKHE_iGcAMdGfanYY_UEmyyM16bKg-PPf0jZPcbo,36091
56
+ pydantic_ai/models/anthropic.py,sha256=0qbN9cRF_ho6Nm2jWnHsFs-Yss9KA-Rrp7g_Xp8beac,31278
52
57
  pydantic_ai/models/bedrock.py,sha256=Eeq-rqZWaVu2tbH8eSNoxp5dq5RH8esnsOp-ge_XGu4,30786
53
58
  pydantic_ai/models/cohere.py,sha256=aKgpcYfIKwMfEroWxfLyzYu8ELuddF4TXv7s0LU3Pcc,13052
54
59
  pydantic_ai/models/fallback.py,sha256=XJ74wRxVT4dF0uewHH3is9I-zcLBK8KFIhpK3BB6mRw,5526
55
60
  pydantic_ai/models/function.py,sha256=uWGdw4sFhhmczjU44rwe6i2XFafOXAalIigWGCSivYg,14231
56
61
  pydantic_ai/models/gemini.py,sha256=DYEaOnwGmo9FUGVkRRrydGuQwYhnO-Cq5grTurLWgb4,39376
57
- pydantic_ai/models/google.py,sha256=cqU6eBMmSZvkeeaEPlJVhkRxN7L5vi4EfyWabZkgP5g,32102
62
+ pydantic_ai/models/google.py,sha256=npkTLwS8w-SfvsU9iB3_yOZfCfreJhKEmuuu_I9RQfk,33701
58
63
  pydantic_ai/models/groq.py,sha256=am-Qpp6RLFqwRnouIdACWd5nxOBB92Bn0hRs-VdrD38,25561
59
64
  pydantic_ai/models/huggingface.py,sha256=sWjHTVfqOtdlOENdERkPxtGjQ8quUNepPjqlXSR7aGk,20417
60
- pydantic_ai/models/instrumented.py,sha256=t9ESv5XMqJ4OWkTp3JoIcaCzlnW7pktelQVmX5fpySM,20763
65
+ pydantic_ai/models/instrumented.py,sha256=DCnyG7HXgV-W2EWac8oZb2A8PL8yarXeU7Rt97l4w_s,21421
61
66
  pydantic_ai/models/mcp_sampling.py,sha256=qnLCO3CB5bNQ86SpWRA-CSSOVcCCLPwjHtcNFvW9wHs,3461
62
67
  pydantic_ai/models/mistral.py,sha256=yS5pBYtFUkICwkvGN23iBbBfaBASN1DARsB6QQbBjOc,32344
63
- pydantic_ai/models/openai.py,sha256=vyePy3s_pI0gnkizas1Vfbiy8PI2_5skNcsnG03Fzas,64818
68
+ pydantic_ai/models/openai.py,sha256=WwbEHpSR_ZOBt0-oQ_sUbDxUFDuS0hcd5H4dEboG4ew,66978
64
69
  pydantic_ai/models/test.py,sha256=1kBwi7pSUt9_K1U-hokOilplxJWPQ3KRKH_s8bYmt_s,19969
65
70
  pydantic_ai/models/wrapper.py,sha256=9MeHW7mXPsEK03IKL0rtjeX6QgXyZROOOzLh72GiX2k,2148
66
71
  pydantic_ai/profiles/__init__.py,sha256=V6uGAVJuIaYRuZOQjkdIyFfDKD5py18RC98njnHOFug,3293
@@ -81,7 +86,7 @@ pydantic_ai/profiles/qwen.py,sha256=9SnTpMKndxNQMFyumyaOczJa5JGWbYQdpVKKW4OzKjk,
81
86
  pydantic_ai/providers/__init__.py,sha256=QlFpPM_kGnF_YAzwB9Dgmxx4Emp33x0bh831H_xKDXE,4478
82
87
  pydantic_ai/providers/anthropic.py,sha256=bDFNAE4WB66Dn7YDnI3dv6yBbMmM9Kzt2kalM4Fq8WQ,3158
83
88
  pydantic_ai/providers/azure.py,sha256=msYyeQoHATxCJkiF1N05lPSJivh-SWKK1463WF6xTK4,5823
84
- pydantic_ai/providers/bedrock.py,sha256=nN5CQ0XOQHp8FSlS7KCjn-p1hYcx0zVeLcMu_tAbvz8,5825
89
+ pydantic_ai/providers/bedrock.py,sha256=eq9KflG4pT1Ny2mlaSHkXYdwn8L6S36qTJijrp98Cd4,6160
85
90
  pydantic_ai/providers/cerebras.py,sha256=2zgsNxup_7OEPOXnbJHMYnVRDnB9UYTQnOO4wv7xnYA,3436
86
91
  pydantic_ai/providers/cohere.py,sha256=-F0prLuI2aDtHNZakd1GlyvgFLio-fo5n6fRbyPMvro,2858
87
92
  pydantic_ai/providers/deepseek.py,sha256=JSc7dQbB-l7_Phf61ZLb4_c1oym9fHea_h2Yq88uoL8,3032
@@ -109,13 +114,13 @@ pydantic_ai/toolsets/approval_required.py,sha256=zyYGEx2VqprLed16OXg1QWr81rnAB0C
109
114
  pydantic_ai/toolsets/combined.py,sha256=LQzm_g6gskiHRUMFDvm88SSrz8OGxbdxyHiKzQrMBNU,4026
110
115
  pydantic_ai/toolsets/external.py,sha256=J9mWQm1HLbRCOJwpLBIvUZZGR_ywSB7pz8MrXkRNBoU,1736
111
116
  pydantic_ai/toolsets/filtered.py,sha256=PSQG9EbBYJpHUEBb_4TGzhjAcQPo5aPKvTuReeoWYtQ,864
112
- pydantic_ai/toolsets/function.py,sha256=D_NllIGtC4P4Q8QAxH82743ykbUaSTtQp-HpOSFaRgk,12907
117
+ pydantic_ai/toolsets/function.py,sha256=v7KDeTaJhpeF58Wyvgtwji5m5_ejFb1e538T8w-0Qfo,13304
113
118
  pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fbh5s,1426
114
119
  pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
115
120
  pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
116
121
  pydantic_ai/toolsets/wrapper.py,sha256=KRzF1p8dncHbva8CE6Ud-IC5E_aygIHlwH5atXK55k4,1673
117
- pydantic_ai_slim-1.0.1.dist-info/METADATA,sha256=beC4C6p-tWvSREm7AswqtdcoZW9s8ua-cEK6r76SG_8,4560
118
- pydantic_ai_slim-1.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
119
- pydantic_ai_slim-1.0.1.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
120
- pydantic_ai_slim-1.0.1.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
121
- pydantic_ai_slim-1.0.1.dist-info/RECORD,,
122
+ pydantic_ai_slim-1.0.2.dist-info/METADATA,sha256=JnuivQtWEN9B9SRrwIx0ncpu_gL8667W6F1kCRGTxgw,4626
123
+ pydantic_ai_slim-1.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
124
+ pydantic_ai_slim-1.0.2.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
125
+ pydantic_ai_slim-1.0.2.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
126
+ pydantic_ai_slim-1.0.2.dist-info/RECORD,,