pydantic-ai-slim 0.3.7__py3-none-any.whl → 0.4.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.
@@ -35,7 +35,7 @@ class FunctionSchema:
35
35
  """Internal information about a function schema."""
36
36
 
37
37
  function: Callable[..., Any]
38
- description: str
38
+ description: str | None
39
39
  validator: SchemaValidator
40
40
  json_schema: ObjectJsonSchema
41
41
  # if not None, the function takes a single by that name (besides potentially `info`)
pydantic_ai/_griffe.py CHANGED
@@ -19,7 +19,7 @@ def doc_descriptions(
19
19
  sig: Signature,
20
20
  *,
21
21
  docstring_format: DocstringFormat,
22
- ) -> tuple[str, dict[str, str]]:
22
+ ) -> tuple[str | None, dict[str, str]]:
23
23
  """Extract the function description and parameter descriptions from a function's docstring.
24
24
 
25
25
  The function parses the docstring using the specified format (or infers it if 'auto')
@@ -35,7 +35,7 @@ def doc_descriptions(
35
35
  """
36
36
  doc = func.__doc__
37
37
  if doc is None:
38
- return '', {}
38
+ return None, {}
39
39
 
40
40
  # see https://github.com/mkdocstrings/griffe/issues/293
41
41
  parent = cast(GriffeObject, sig)
pydantic_ai/_utils.py CHANGED
@@ -315,8 +315,11 @@ def dataclasses_no_defaults_repr(self: Any) -> str:
315
315
  return f'{self.__class__.__qualname__}({", ".join(kv_pairs)})'
316
316
 
317
317
 
318
+ _datetime_ta = TypeAdapter(datetime)
319
+
320
+
318
321
  def number_to_datetime(x: int | float) -> datetime:
319
- return TypeAdapter(datetime).validate_python(x)
322
+ return _datetime_ta.validate_python(x)
320
323
 
321
324
 
322
325
  AwaitableCallable = Callable[..., Awaitable[T]]
pydantic_ai/mcp.py CHANGED
@@ -98,7 +98,7 @@ class MCPServer(ABC):
98
98
  return [
99
99
  tools.ToolDefinition(
100
100
  name=self.get_prefixed_tool_name(tool.name),
101
- description=tool.description or '',
101
+ description=tool.description,
102
102
  parameters_json_schema=tool.inputSchema,
103
103
  )
104
104
  for tool in mcp_tools.tools
pydantic_ai/messages.py CHANGED
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
25
25
  from .models.instrumented import InstrumentationSettings
26
26
 
27
27
 
28
- AudioMediaType: TypeAlias = Literal['audio/wav', 'audio/mpeg']
28
+ AudioMediaType: TypeAlias = Literal['audio/wav', 'audio/mpeg', 'audio/ogg', 'audio/flac', 'audio/aiff', 'audio/aac']
29
29
  ImageMediaType: TypeAlias = Literal['image/jpeg', 'image/png', 'image/gif', 'image/webp']
30
30
  DocumentMediaType: TypeAlias = Literal[
31
31
  'application/pdf',
@@ -48,7 +48,7 @@ VideoMediaType: TypeAlias = Literal[
48
48
  'video/3gpp',
49
49
  ]
50
50
 
51
- AudioFormat: TypeAlias = Literal['wav', 'mp3']
51
+ AudioFormat: TypeAlias = Literal['wav', 'mp3', 'oga', 'flac', 'aiff', 'aac']
52
52
  ImageFormat: TypeAlias = Literal['jpeg', 'png', 'gif', 'webp']
53
53
  DocumentFormat: TypeAlias = Literal['csv', 'doc', 'docx', 'html', 'md', 'pdf', 'txt', 'xls', 'xlsx']
54
54
  VideoFormat: TypeAlias = Literal['mkv', 'mov', 'mp4', 'webm', 'flv', 'mpeg', 'mpg', 'wmv', 'three_gp']
@@ -182,13 +182,25 @@ class AudioUrl(FileUrl):
182
182
 
183
183
  @property
184
184
  def media_type(self) -> AudioMediaType:
185
- """Return the media type of the audio file, based on the url."""
185
+ """Return the media type of the audio file, based on the url.
186
+
187
+ References:
188
+ - Gemini: https://ai.google.dev/gemini-api/docs/audio#supported-formats
189
+ """
186
190
  if self.url.endswith('.mp3'):
187
191
  return 'audio/mpeg'
188
- elif self.url.endswith('.wav'):
192
+ if self.url.endswith('.wav'):
189
193
  return 'audio/wav'
190
- else:
191
- raise ValueError(f'Unknown audio file extension: {self.url}')
194
+ if self.url.endswith('.flac'):
195
+ return 'audio/flac'
196
+ if self.url.endswith('.oga'):
197
+ return 'audio/ogg'
198
+ if self.url.endswith('.aiff'):
199
+ return 'audio/aiff'
200
+ if self.url.endswith('.aac'):
201
+ return 'audio/aac'
202
+
203
+ raise ValueError(f'Unknown audio file extension: {self.url}')
192
204
 
193
205
  @property
194
206
  def format(self) -> AudioFormat:
@@ -358,6 +370,10 @@ _document_format_lookup: dict[str, DocumentFormat] = {
358
370
  _audio_format_lookup: dict[str, AudioFormat] = {
359
371
  'audio/mpeg': 'mp3',
360
372
  'audio/wav': 'wav',
373
+ 'audio/flac': 'flac',
374
+ 'audio/ogg': 'oga',
375
+ 'audio/aiff': 'aiff',
376
+ 'audio/aac': 'aac',
361
377
  }
362
378
  _image_format_lookup: dict[str, ImageFormat] = {
363
379
  'image/jpeg': 'jpeg',
@@ -416,7 +416,7 @@ class AnthropicModel(Model):
416
416
  def _map_tool_definition(f: ToolDefinition) -> BetaToolParam:
417
417
  return {
418
418
  'name': f.name,
419
- 'description': f.description,
419
+ 'description': f.description or '',
420
420
  'input_schema': f.parameters_json_schema,
421
421
  }
422
422
 
@@ -62,6 +62,7 @@ if TYPE_CHECKING:
62
62
  SystemContentBlockTypeDef,
63
63
  ToolChoiceTypeDef,
64
64
  ToolConfigurationTypeDef,
65
+ ToolSpecificationTypeDef,
65
66
  ToolTypeDef,
66
67
  VideoBlockTypeDef,
67
68
  )
@@ -228,14 +229,16 @@ class BedrockConverseModel(Model):
228
229
 
229
230
  @staticmethod
230
231
  def _map_tool_definition(f: ToolDefinition) -> ToolTypeDef:
231
- return {
232
- 'toolSpec': {
233
- 'name': f.name,
234
- 'description': f.description,
235
- 'inputSchema': {'json': f.parameters_json_schema},
236
- }
232
+ tool_spec: ToolSpecificationTypeDef = {
233
+ 'name': f.name,
234
+ 'inputSchema': {'json': f.parameters_json_schema},
237
235
  }
238
236
 
237
+ if f.description: # pragma: no branch
238
+ tool_spec['description'] = f.description
239
+
240
+ return {'toolSpec': tool_spec}
241
+
239
242
  @property
240
243
  def base_url(self) -> str:
241
244
  return str(self.client.meta.endpoint_url)
@@ -773,7 +773,7 @@ class _GeminiFunction(TypedDict):
773
773
 
774
774
  def _function_from_abstract_tool(tool: ToolDefinition) -> _GeminiFunction:
775
775
  json_schema = tool.parameters_json_schema
776
- f = _GeminiFunction(name=tool.name, description=tool.description, parameters=json_schema)
776
+ f = _GeminiFunction(name=tool.name, description=tool.description or '', parameters=json_schema)
777
777
  return f
778
778
 
779
779
 
@@ -534,7 +534,7 @@ def _function_declaration_from_tool(tool: ToolDefinition) -> FunctionDeclaration
534
534
  json_schema = tool.parameters_json_schema
535
535
  f = FunctionDeclarationDict(
536
536
  name=tool.name,
537
- description=tool.description,
537
+ description=tool.description or '',
538
538
  parameters=json_schema, # type: ignore
539
539
  )
540
540
  return f
@@ -333,7 +333,7 @@ class GroqModel(Model):
333
333
  'type': 'function',
334
334
  'function': {
335
335
  'name': f.name,
336
- 'description': f.description,
336
+ 'description': f.description or '',
337
337
  'parameters': f.parameters_json_schema,
338
338
  },
339
339
  }
@@ -306,7 +306,9 @@ class MistralModel(Model):
306
306
  )
307
307
  tools = [
308
308
  MistralTool(
309
- function=MistralFunction(name=r.name, parameters=r.parameters_json_schema, description=r.description)
309
+ function=MistralFunction(
310
+ name=r.name, parameters=r.parameters_json_schema, description=r.description or ''
311
+ )
310
312
  )
311
313
  for r in all_tools
312
314
  ]
@@ -469,7 +469,7 @@ class OpenAIModel(Model):
469
469
  'type': 'function',
470
470
  'function': {
471
471
  'name': f.name,
472
- 'description': f.description,
472
+ 'description': f.description or '',
473
473
  'parameters': f.parameters_json_schema,
474
474
  },
475
475
  }
@@ -93,10 +93,18 @@ class OpenAIJsonSchemaTransformer(JsonSchemaTransformer):
93
93
  def transform(self, schema: JsonSchema) -> JsonSchema: # noqa C901
94
94
  # Remove unnecessary keys
95
95
  schema.pop('title', None)
96
- schema.pop('default', None)
97
96
  schema.pop('$schema', None)
98
97
  schema.pop('discriminator', None)
99
98
 
99
+ default = schema.get('default', _sentinel)
100
+ if default is not _sentinel:
101
+ # the "default" keyword is not allowed in strict mode, but including it makes some Ollama models behave
102
+ # better, so we keep it around when not strict
103
+ if self.strict is True:
104
+ schema.pop('default', None)
105
+ elif self.strict is None: # pragma: no branch
106
+ self.is_strict_compatible = False
107
+
100
108
  if schema_ref := schema.get('$ref'):
101
109
  if schema_ref == self.root_ref:
102
110
  schema['$ref'] = '#'
pydantic_ai/tools.py CHANGED
@@ -161,7 +161,7 @@ class Tool(Generic[AgentDepsT]):
161
161
  takes_ctx: bool
162
162
  max_retries: int | None
163
163
  name: str
164
- description: str
164
+ description: str | None
165
165
  prepare: ToolPrepareFunc[AgentDepsT] | None
166
166
  docstring_format: DocstringFormat
167
167
  require_parameter_descriptions: bool
@@ -269,7 +269,7 @@ class Tool(Generic[AgentDepsT]):
269
269
  cls,
270
270
  function: Callable[..., Any],
271
271
  name: str,
272
- description: str,
272
+ description: str | None,
273
273
  json_schema: JsonSchemaValue,
274
274
  ) -> Self:
275
275
  """Creates a Pydantic tool from a function and a JSON schema.
@@ -440,12 +440,12 @@ class ToolDefinition:
440
440
  name: str
441
441
  """The name of the tool."""
442
442
 
443
- description: str
444
- """The description of the tool."""
445
-
446
443
  parameters_json_schema: ObjectJsonSchema
447
444
  """The JSON schema for the tool's parameters."""
448
445
 
446
+ description: str | None = None
447
+ """The description of the tool."""
448
+
449
449
  outer_typed_dict_key: str | None = None
450
450
  """The key in the outer [TypedDict] that wraps an output tool.
451
451
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 0.3.7
3
+ Version: 0.4.0
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>
6
6
  License-Expression: MIT
@@ -30,11 +30,11 @@ 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.3.7
33
+ Requires-Dist: pydantic-graph==0.4.0
34
34
  Requires-Dist: pydantic>=2.10
35
35
  Requires-Dist: typing-inspection>=0.4.0
36
36
  Provides-Extra: a2a
37
- Requires-Dist: fasta2a==0.3.7; extra == 'a2a'
37
+ Requires-Dist: fasta2a==0.4.0; extra == 'a2a'
38
38
  Provides-Extra: anthropic
39
39
  Requires-Dist: anthropic>=0.52.0; extra == 'anthropic'
40
40
  Provides-Extra: bedrock
@@ -48,7 +48,7 @@ Requires-Dist: cohere>=5.13.11; (platform_system != 'Emscripten') and extra == '
48
48
  Provides-Extra: duckduckgo
49
49
  Requires-Dist: duckduckgo-search>=7.0.0; extra == 'duckduckgo'
50
50
  Provides-Extra: evals
51
- Requires-Dist: pydantic-evals==0.3.7; extra == 'evals'
51
+ Requires-Dist: pydantic-evals==0.4.0; extra == 'evals'
52
52
  Provides-Extra: google
53
53
  Requires-Dist: google-genai>=1.24.0; extra == 'google'
54
54
  Provides-Extra: groq
@@ -3,27 +3,27 @@ pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
3
3
  pydantic_ai/_a2a.py,sha256=8nNtx6GENDt2Ej3f1ui9L-FuNQBYVELpJFfwz-y7fUw,7234
4
4
  pydantic_ai/_agent_graph.py,sha256=rtzyBXN4bzEDBeRkRwF031ORktSMbuGz9toZmSqUxNI,42153
5
5
  pydantic_ai/_cli.py,sha256=R-sE-9gYqPxV5-5utso4g-bzAKMiTCdo33XOVqE0ZEg,13206
6
- pydantic_ai/_function_schema.py,sha256=TP9Y1wlN7tRHTDhkJ1IopJHPWpSbxJCxS3zxCb0dpK4,10806
7
- pydantic_ai/_griffe.py,sha256=Sf_DisE9k2TA0VFeVIK2nf1oOct5MygW86PBCACJkFA,5244
6
+ pydantic_ai/_function_schema.py,sha256=BZus5y51eqiGQKxQIcCiDoSPml3AtAb12-st_aujU2k,10813
7
+ pydantic_ai/_griffe.py,sha256=Ugft16ZHw9CN_6-lW0Svn6jESK9zHXO_x4utkGBkbBI,5253
8
8
  pydantic_ai/_mcp.py,sha256=PuvwnlLjv7YYOa9AZJCrklevBug99zGMhwJCBGG7BHQ,5626
9
9
  pydantic_ai/_output.py,sha256=8qOx2hEwxpcoS5P8OLqOAWj94KfODDVqrPHnEIhI-90,33164
10
10
  pydantic_ai/_parts_manager.py,sha256=Lioi8b7Nfyax09yQu8jTkMzxd26dYDrdAqhYvjRSKqQ,16182
11
11
  pydantic_ai/_run_context.py,sha256=zNkSyiQSH-YweO39ii3iB2taouUOodo3sTjz2Lrj4Pc,1792
12
12
  pydantic_ai/_system_prompt.py,sha256=lUSq-gDZjlYTGtd6BUm54yEvTIvgdwBmJ8mLsNZZtYU,1142
13
13
  pydantic_ai/_thinking_part.py,sha256=mzx2RZSfiQxAKpljEflrcXRXmFKxtp6bKVyorY3UYZk,1554
14
- pydantic_ai/_utils.py,sha256=hKejTwg5rAd6ElFFSE50xbs3VO4O_3tRfZ8Dy6V2DsY,15515
14
+ pydantic_ai/_utils.py,sha256=SGXEiGCnMae1Iz_eZKUs6ni_tGMPkDaJ4W3W3YMoP5w,15545
15
15
  pydantic_ai/agent.py,sha256=Fs-bm9eeCvanwiKiD-IS_XLcMmgNWucJylXgrIDH6WM,96186
16
16
  pydantic_ai/direct.py,sha256=WRfgke3zm-eeR39LTuh9XI2TrdHXAqO81eDvFwih4Ko,14803
17
17
  pydantic_ai/exceptions.py,sha256=IdFw594Ou7Vn4YFa7xdZ040_j_6nmyA3MPANbC7sys4,3175
18
18
  pydantic_ai/format_as_xml.py,sha256=IINfh1evWDphGahqHNLBArB5dQ4NIqS3S-kru35ztGg,372
19
19
  pydantic_ai/format_prompt.py,sha256=qdKep95Sjlr7u1-qag4JwPbjoURbG0GbeU_l5ODTNw4,4466
20
- pydantic_ai/mcp.py,sha256=MSLNFiC38A1e5W7K8gQdnh0_DNLqD_AdzW064U83FJ8,21836
21
- pydantic_ai/messages.py,sha256=DGD9_Ct-xfcprN-yYpy_fqO5wqffuwesH7mNx4_BfD4,38701
20
+ pydantic_ai/mcp.py,sha256=6RvxXIn6bUlL2XWpX69i8G3atU-HLLZBgKc93dYqeVo,21830
21
+ pydantic_ai/messages.py,sha256=ykB4jzDwPGFkgQSJagOdurBv5-DTtCaY-y9671FYz7E,39256
22
22
  pydantic_ai/output.py,sha256=gq-8H2YKgbKSTxp_HUMym57ZUkwupHyS4sCOzedlXTI,9315
23
23
  pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  pydantic_ai/result.py,sha256=GVzXf7yjR2lKBDw9k-8PlhJgCpE3dVHiyLL0dFPvs7I,25603
25
25
  pydantic_ai/settings.py,sha256=yuUZ7-GkdPB-Gbx71kSdh8dSr6gwM9gEwk84qNxPO_I,3552
26
- pydantic_ai/tools.py,sha256=SQyLA5X3ILhjUW7kUTZefiUCNwhQhEETxkSC2JH4kCI,17746
26
+ pydantic_ai/tools.py,sha256=ZZ5DZMzSLMZkM9y_G3fx5YnVTki6daPYgRkfuNXAQ-M,17774
27
27
  pydantic_ai/usage.py,sha256=35YPmItlzfNOwP35Rhh0qBUOlg5On5rUE7xqHQWrpaU,5596
28
28
  pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  pydantic_ai/common_tools/duckduckgo.py,sha256=Ty9tu1rCwMfGKgz1JAaC2q_4esmL6QvpkHQUN8F0Ecc,2152
@@ -32,18 +32,18 @@ pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  pydantic_ai/ext/aci.py,sha256=eiuWamUh90kexWyuGw_Fw2kM-EAA6Pv-IfNhf5hQ8fs,2123
33
33
  pydantic_ai/ext/langchain.py,sha256=iSyACZiJDDvxr0BKYl9dLxe4BPezCBHxgz_2Vk3W-Ak,1973
34
34
  pydantic_ai/models/__init__.py,sha256=B8vG0crUDCO3Bvd8fVeMNPzZH2Un61rEJFxSaumoUl4,29101
35
- pydantic_ai/models/anthropic.py,sha256=4kWGrKvyv32VmpyHXzqrGyLDUxIiNj15HSW_wJ3mEoU,23673
36
- pydantic_ai/models/bedrock.py,sha256=41rHdPpa7OfVXVaglyNeu54bptQxbVOWcuTpTWJd78A,29122
35
+ pydantic_ai/models/anthropic.py,sha256=ooRh6Yh0jLj78IKjgaYTN0UbB2Ku8ZhuEBi8v8kymoE,23679
36
+ pydantic_ai/models/bedrock.py,sha256=i8BNOFEYGiRYA4ZEFwqHzJHf3EP54akVzZHdEUJohiw,29234
37
37
  pydantic_ai/models/cohere.py,sha256=qgYegjfOsqXbRcjXCbg0jaexbuxh1SrS9_mZdzzJVbM,12623
38
38
  pydantic_ai/models/fallback.py,sha256=sTYw8wW8iGgFIPG2Oynsucb9orG6wbV_h-9k5vKil4I,5103
39
39
  pydantic_ai/models/function.py,sha256=nfCjRmbcF7sdK_nsak1fvzz9Xkptx5WhsxvWdB02zec,12113
40
- pydantic_ai/models/gemini.py,sha256=IB1GUtdlYX6GePXRWZYGY8ickhB5aNSGnjOcwgNqs7Q,38482
41
- pydantic_ai/models/google.py,sha256=F9m6uH3lxApzcevE61Vq0Pb2T4gmQNHb6Y5Yy-ZQvTc,24066
42
- pydantic_ai/models/groq.py,sha256=NHHOR4rfia3GmiA2qGnSCrXQaIPpPM3G0D2-XIzj43Q,18494
40
+ pydantic_ai/models/gemini.py,sha256=22qucwayi8x20yvZY6qeHH4WRyEObfIkrCQ5cluejdQ,38488
41
+ pydantic_ai/models/google.py,sha256=PFioCPeuf5_f80s9NiRSxFZawvfYbUUhpaW7mUg8frg,24072
42
+ pydantic_ai/models/groq.py,sha256=tmYTPKsMMhtIms_9muPKYQvGZ98b_kax7t8H1YE1vPU,18500
43
43
  pydantic_ai/models/instrumented.py,sha256=olTa7Fl2BwHLvTLT6sSrS2HOS7UyWg182Xujx8hutBw,15947
44
44
  pydantic_ai/models/mcp_sampling.py,sha256=q9nnjNEAAbhrfRc_Qw5z9TtCHMG_SwlCWW9FvKWjh8k,3395
45
- pydantic_ai/models/mistral.py,sha256=reE_x3r6q8qMP05qwCUeSkzBxuRvv29v2rSIHFyXML4,30511
46
- pydantic_ai/models/openai.py,sha256=f0BwWnZ951Sa39bZ0-YKvDbgXwhc_UIre4BztzsXBB8,53640
45
+ pydantic_ai/models/mistral.py,sha256=d_TQjSQukSztNt6JpFQCqugYTxXQ97GaQBc3zUxOSSA,30555
46
+ pydantic_ai/models/openai.py,sha256=ReqpM4gdM0TPSwUCGu2L8VoBFsxy2Y-8PRFhI6d5KcI,53646
47
47
  pydantic_ai/models/test.py,sha256=STNd79ZoCyyphm0eFRNDoTpvkOzhw1qFw1zgv44kqsg,17441
48
48
  pydantic_ai/models/wrapper.py,sha256=2g06TxE5kFqfaJCwsDJHp7Rltoj0XXH0OzdpRDOcqNo,1861
49
49
  pydantic_ai/profiles/__init__.py,sha256=BXMqUpgRfosmYgcxjKAI9ESCj47JTSa30DhKXEgVLzM,2419
@@ -56,7 +56,7 @@ pydantic_ai/profiles/google.py,sha256=DJ0otpkCgVIrjwV2lzAUAejw8ivwZT9pNAY_sGRcrV
56
56
  pydantic_ai/profiles/grok.py,sha256=nBOxOCYCK9aiLmz2Q-esqYhotNbbBC1boAoOYIk1tVw,211
57
57
  pydantic_ai/profiles/meta.py,sha256=IAGPoUrLWd-g9ajAgpWp9fIeOrP-7dBlZ2HEFjIhUbY,334
58
58
  pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzCMQ,217
59
- pydantic_ai/profiles/openai.py,sha256=DzrKYvegfCerqavHU3jHzrNQCm0IllWoIqS7_DiQB9M,6281
59
+ pydantic_ai/profiles/openai.py,sha256=wFFtzbM22HbxxRNDXYEs6tr6_RSbv8xN_xBPz6RsP9s,6698
60
60
  pydantic_ai/profiles/qwen.py,sha256=u7pL8uomoQTVl45g5wDrHx0P_oFDLaN6ALswuwmkWc0,334
61
61
  pydantic_ai/providers/__init__.py,sha256=JNsVZ1PBx_9hUJZbnoRIDJCkWbrJbk69w-SFqjoG-6c,3654
62
62
  pydantic_ai/providers/anthropic.py,sha256=D35UXxCPXv8yIbD0fj9Zg2FvNyoMoJMeDUtVM8Sn78I,3046
@@ -76,8 +76,8 @@ pydantic_ai/providers/mistral.py,sha256=EIUSENjFuGzBhvbdrarUTM4VPkesIMnZrzfnEKHO
76
76
  pydantic_ai/providers/openai.py,sha256=7iGij0EaFylab7dTZAZDgXr78tr-HsZrn9EI9AkWBNQ,3091
77
77
  pydantic_ai/providers/openrouter.py,sha256=NXjNdnlXIBrBMMqbzcWQnowXOuZh4NHikXenBn5h3mc,4061
78
78
  pydantic_ai/providers/together.py,sha256=zFVSMSm5jXbpkNouvBOTjWrPmlPpCp6sQS5LMSyVjrQ,3482
79
- pydantic_ai_slim-0.3.7.dist-info/METADATA,sha256=ourVNvtmorrRHZGFYk8kNLDBZr6mKDSHtL9f_NRITAc,3846
80
- pydantic_ai_slim-0.3.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
81
- pydantic_ai_slim-0.3.7.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
82
- pydantic_ai_slim-0.3.7.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
83
- pydantic_ai_slim-0.3.7.dist-info/RECORD,,
79
+ pydantic_ai_slim-0.4.0.dist-info/METADATA,sha256=S-ygqOZ0lpsazK_VGyrj8B6l1H9Q7B2bCGYRtmmK4T8,3846
80
+ pydantic_ai_slim-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
81
+ pydantic_ai_slim-0.4.0.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
82
+ pydantic_ai_slim-0.4.0.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
83
+ pydantic_ai_slim-0.4.0.dist-info/RECORD,,