pydantic-ai-slim 0.2.15__py3-none-any.whl → 0.2.17__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.
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations as _annotations
2
+
3
+ import os
4
+ from typing import overload
5
+
6
+ from httpx import AsyncClient as AsyncHTTPClient
7
+ from openai import AsyncOpenAI
8
+
9
+ from pydantic_ai.exceptions import UserError
10
+ from pydantic_ai.models import cached_async_http_client
11
+ from pydantic_ai.profiles import ModelProfile
12
+ from pydantic_ai.profiles.openai import OpenAIJsonSchemaTransformer, OpenAIModelProfile
13
+ from pydantic_ai.providers import Provider
14
+
15
+ try:
16
+ from openai import AsyncOpenAI
17
+ except ImportError as _import_error: # pragma: no cover
18
+ raise ImportError(
19
+ 'Please install the `openai` package to use the Heroku provider, '
20
+ 'you can use the `openai` optional group — `pip install "pydantic-ai-slim[openai]"`'
21
+ ) from _import_error
22
+
23
+
24
+ class HerokuProvider(Provider[AsyncOpenAI]):
25
+ """Provider for Heroku API."""
26
+
27
+ @property
28
+ def name(self) -> str:
29
+ return 'heroku'
30
+
31
+ @property
32
+ def base_url(self) -> str:
33
+ return str(self.client.base_url)
34
+
35
+ @property
36
+ def client(self) -> AsyncOpenAI:
37
+ return self._client
38
+
39
+ def model_profile(self, model_name: str) -> ModelProfile | None:
40
+ # As the Heroku API is OpenAI-compatible, let's assume we also need OpenAIJsonSchemaTransformer.
41
+ return OpenAIModelProfile(json_schema_transformer=OpenAIJsonSchemaTransformer)
42
+
43
+ @overload
44
+ def __init__(self) -> None: ...
45
+
46
+ @overload
47
+ def __init__(self, *, api_key: str) -> None: ...
48
+
49
+ @overload
50
+ def __init__(self, *, api_key: str, http_client: AsyncHTTPClient) -> None: ...
51
+
52
+ @overload
53
+ def __init__(self, *, openai_client: AsyncOpenAI | None = None) -> None: ...
54
+
55
+ def __init__(
56
+ self,
57
+ *,
58
+ base_url: str | None = None,
59
+ api_key: str | None = None,
60
+ openai_client: AsyncOpenAI | None = None,
61
+ http_client: AsyncHTTPClient | None = None,
62
+ ) -> None:
63
+ if openai_client is not None:
64
+ assert http_client is None, 'Cannot provide both `openai_client` and `http_client`'
65
+ assert api_key is None, 'Cannot provide both `openai_client` and `api_key`'
66
+ self._client = openai_client
67
+ else:
68
+ api_key = api_key or os.environ.get('HEROKU_INFERENCE_KEY')
69
+ if not api_key:
70
+ raise UserError(
71
+ 'Set the `HEROKU_INFERENCE_KEY` environment variable or pass it via `HerokuProvider(api_key=...)`'
72
+ 'to use the Heroku provider.'
73
+ )
74
+
75
+ base_url = base_url or os.environ.get('HEROKU_INFERENCE_URL', 'https://us.inference.heroku.com')
76
+ base_url = base_url.rstrip('/') + '/v1'
77
+
78
+ if http_client is not None:
79
+ self._client = AsyncOpenAI(api_key=api_key, http_client=http_client, base_url=base_url)
80
+ else:
81
+ http_client = cached_async_http_client(provider='heroku')
82
+ self._client = AsyncOpenAI(api_key=api_key, http_client=http_client, base_url=base_url)
pydantic_ai/settings.py CHANGED
@@ -139,6 +139,7 @@ class ModelSettings(TypedDict, total=False):
139
139
  * Mistral
140
140
  * Groq
141
141
  * Cohere
142
+ * Google
142
143
  """
143
144
 
144
145
  extra_headers: dict[str, str]
pydantic_ai/tools.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations as _annotations
2
2
 
3
+ import asyncio
3
4
  import dataclasses
4
5
  import json
5
6
  from collections.abc import Awaitable, Sequence
@@ -9,8 +10,8 @@ from typing import TYPE_CHECKING, Any, Callable, Generic, Literal, Union
9
10
  from opentelemetry.trace import Tracer
10
11
  from pydantic import ValidationError
11
12
  from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue
12
- from pydantic_core import core_schema
13
- from typing_extensions import Concatenate, ParamSpec, TypeAlias, TypeVar
13
+ from pydantic_core import SchemaValidator, core_schema
14
+ from typing_extensions import Concatenate, ParamSpec, Self, TypeAlias, TypeVar
14
15
 
15
16
  from . import _function_schema, _utils, messages as _messages
16
17
  from .exceptions import ModelRetry, UnexpectedModelBehavior
@@ -63,7 +64,9 @@ class RunContext(Generic[AgentDepsT]):
63
64
  """The current step in the run."""
64
65
 
65
66
  def replace_with(
66
- self, retry: int | None = None, tool_name: str | None | _utils.Unset = _utils.UNSET
67
+ self,
68
+ retry: int | None = None,
69
+ tool_name: str | None | _utils.Unset = _utils.UNSET,
67
70
  ) -> RunContext[AgentDepsT]:
68
71
  # Create a new `RunContext` a new `retry` value and `tool_name`.
69
72
  kwargs = {}
@@ -215,8 +218,10 @@ class Tool(Generic[AgentDepsT]):
215
218
  This schema may be modified by the `prepare` function or by the Model class prior to including it in an API request.
216
219
  """
217
220
 
218
- # TODO: Move this state off the Tool class, which is otherwise stateless.
219
- # This should be tracked inside a specific agent run, not the tool.
221
+ # TODO: Consider moving this current_retry state to live on something other than the tool.
222
+ # We've worked around this for now by copying instances of the tool when creating new runs,
223
+ # but this is a bit fragile. Moving the tool retry counts to live on the agent run state would likely clean things
224
+ # up, though is also likely a larger effort to refactor.
220
225
  current_retry: int = field(default=0, init=False)
221
226
 
222
227
  def __init__(
@@ -304,6 +309,45 @@ class Tool(Generic[AgentDepsT]):
304
309
  self.require_parameter_descriptions = require_parameter_descriptions
305
310
  self.strict = strict
306
311
 
312
+ @classmethod
313
+ def from_schema(
314
+ cls,
315
+ function: Callable[..., Any],
316
+ name: str,
317
+ description: str,
318
+ json_schema: JsonSchemaValue,
319
+ ) -> Self:
320
+ """Creates a Pydantic tool from a function and a JSON schema.
321
+
322
+ Args:
323
+ function: The function to call.
324
+ This will be called with keywords only, and no validation of
325
+ the arguments will be performed.
326
+ name: The unique name of the tool that clearly communicates its purpose
327
+ description: Used to tell the model how/when/why to use the tool.
328
+ You can provide few-shot examples as a part of the description.
329
+ json_schema: The schema for the function arguments
330
+
331
+ Returns:
332
+ A Pydantic tool that calls the function
333
+ """
334
+ function_schema = _function_schema.FunctionSchema(
335
+ function=function,
336
+ description=description,
337
+ validator=SchemaValidator(schema=core_schema.any_schema()),
338
+ json_schema=json_schema,
339
+ takes_ctx=False,
340
+ is_async=asyncio.iscoroutinefunction(function),
341
+ )
342
+
343
+ return cls(
344
+ function,
345
+ takes_ctx=False,
346
+ name=name,
347
+ description=description,
348
+ function_schema=function_schema,
349
+ )
350
+
307
351
  async def prepare_tool_def(self, ctx: RunContext[AgentDepsT]) -> ToolDefinition | None:
308
352
  """Get the tool definition.
309
353
 
@@ -325,7 +369,10 @@ class Tool(Generic[AgentDepsT]):
325
369
  return tool_def
326
370
 
327
371
  async def run(
328
- self, message: _messages.ToolCallPart, run_context: RunContext[AgentDepsT], tracer: Tracer
372
+ self,
373
+ message: _messages.ToolCallPart,
374
+ run_context: RunContext[AgentDepsT],
375
+ tracer: Tracer,
329
376
  ) -> _messages.ToolReturnPart | _messages.RetryPromptPart:
330
377
  """Run the tool function asynchronously.
331
378
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 0.2.15
3
+ Version: 0.2.17
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.2.15
33
+ Requires-Dist: pydantic-graph==0.2.17
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.2.15; extra == 'a2a'
37
+ Requires-Dist: fasta2a==0.2.17; 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.2.15; extra == 'evals'
51
+ Requires-Dist: pydantic-evals==0.2.17; extra == 'evals'
52
52
  Provides-Extra: google
53
53
  Requires-Dist: google-genai>=1.15.0; extra == 'google'
54
54
  Provides-Extra: groq
@@ -56,7 +56,7 @@ Requires-Dist: groq>=0.15.0; extra == 'groq'
56
56
  Provides-Extra: logfire
57
57
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
58
58
  Provides-Extra: mcp
59
- Requires-Dist: mcp>=1.9.0; (python_version >= '3.10') and extra == 'mcp'
59
+ Requires-Dist: mcp>=1.9.2; (python_version >= '3.10') and extra == 'mcp'
60
60
  Provides-Extra: mistral
61
61
  Requires-Dist: mistralai>=1.2.5; extra == 'mistral'
62
62
  Provides-Extra: openai
@@ -1,41 +1,43 @@
1
1
  pydantic_ai/__init__.py,sha256=5flxyMQJVrHRMQ3MYaZf1el2ctNs0JmPClKbw2Q-Lsk,1160
2
2
  pydantic_ai/__main__.py,sha256=Q_zJU15DUA01YtlJ2mnaLCoId2YmgmreVEERGuQT-Y0,132
3
3
  pydantic_ai/_a2a.py,sha256=8nNtx6GENDt2Ej3f1ui9L-FuNQBYVELpJFfwz-y7fUw,7234
4
- pydantic_ai/_agent_graph.py,sha256=_7iJLLpOwCqViTE2BGTZfI42zdmsz7QPhgP0hdclsvg,36251
4
+ pydantic_ai/_agent_graph.py,sha256=GLcirP600J2UXfFmmWfS6E4oLY6Iaffw07J2KNM6Auo,35997
5
5
  pydantic_ai/_cli.py,sha256=kc9UxGjYsKK0IR4No-V5BGiAtq2fY6eZZ9rBkAdHWOM,12948
6
- pydantic_ai/_function_schema.py,sha256=Ciah-kyw-QiMeM8PtIe4DhOAlmyCZf98D1U0FIdl930,10563
6
+ pydantic_ai/_function_schema.py,sha256=qKhnayKTR6TOayMLDS8EDcQJsc0VwXfya27ygC0D6Z4,10614
7
7
  pydantic_ai/_griffe.py,sha256=Sf_DisE9k2TA0VFeVIK2nf1oOct5MygW86PBCACJkFA,5244
8
- pydantic_ai/_output.py,sha256=MxonK-JPfgSw1nboIQMlnGb5WloTX8WkI9gcWAeCiPI,16798
8
+ pydantic_ai/_output.py,sha256=IatomyvmR4UeIiUk0iXQHpSVmVEkzpSIZIJThSp-_TM,16790
9
9
  pydantic_ai/_parts_manager.py,sha256=c0Gj29FH8K20AmxIr7MY8_SQVdb7SRIRcJYTQVmVYgc,12204
10
10
  pydantic_ai/_system_prompt.py,sha256=602c2jyle2R_SesOrITBDETZqsLk4BZ8Cbo8yEhmx04,1120
11
- pydantic_ai/_utils.py,sha256=XfZ7mZmrv5ZsU3DwjwLXwmbVNTQrgX_kIL9SIfatg90,10456
12
- pydantic_ai/agent.py,sha256=1j3Wkk-wgJQWhaIFiOqc2uvQ2ISqMFoTdoG_8m2faHk,93558
11
+ pydantic_ai/_utils.py,sha256=TpNgr_IaGHrkZugcncs-maZ_7K4fxdC0a-uyYJkKqY8,10575
12
+ pydantic_ai/agent.py,sha256=9CwdFHjSx7BOv-DSkG31lzIeclgoWnPIAnjSPLh8BPo,93562
13
13
  pydantic_ai/direct.py,sha256=tXRcQ3fMkykaawO51VxnSwQnqcEmu1LhCy7U9gOyM-g,7768
14
14
  pydantic_ai/exceptions.py,sha256=IdFw594Ou7Vn4YFa7xdZ040_j_6nmyA3MPANbC7sys4,3175
15
15
  pydantic_ai/format_as_xml.py,sha256=IINfh1evWDphGahqHNLBArB5dQ4NIqS3S-kru35ztGg,372
16
16
  pydantic_ai/format_prompt.py,sha256=qdKep95Sjlr7u1-qag4JwPbjoURbG0GbeU_l5ODTNw4,4466
17
- pydantic_ai/mcp.py,sha256=3dw6mMfjVYC8ivfcUJjFRltMw6UA66KIvtWxVbl1h0g,13537
18
- pydantic_ai/messages.py,sha256=K5zHLOgTLCr2AlqPYA_-WyDJ9B-rAvSiylATbzvZSfc,32410
17
+ pydantic_ai/mcp.py,sha256=sp0nJozRJbtayTxYbLI2pLT9bs7xydE7uk6vUoitrVM,15181
18
+ pydantic_ai/messages.py,sha256=UuUw_L4Nxe4gFLotlOSs5Al1zDyWs8T8tAnjn2ZpYw0,33409
19
19
  pydantic_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  pydantic_ai/result.py,sha256=YlcR0QAQIejz3fbZ50zYfHKIZco0dwmnZTxytV-n3oM,24609
21
- pydantic_ai/settings.py,sha256=U2XzZ9y1fIi_L6yCGTugZRxfk7_01rk5GKSgFqySHL4,3520
22
- pydantic_ai/tools.py,sha256=a6sZv_YcGYbc2A9mhnlR0UoQp9Mt-uSrwbvfhat6mbw,16867
21
+ pydantic_ai/settings.py,sha256=eRJs2fI2yaIrhtYRlWqKlC9KnFaJHvslgSll8NQ20jc,3533
22
+ pydantic_ai/tools.py,sha256=WFO0iYa58nUdNAhdZsl2xTITVyCD3WidYLXxZ8csnjY,18524
23
23
  pydantic_ai/usage.py,sha256=35YPmItlzfNOwP35Rhh0qBUOlg5On5rUE7xqHQWrpaU,5596
24
24
  pydantic_ai/common_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  pydantic_ai/common_tools/duckduckgo.py,sha256=Ty9tu1rCwMfGKgz1JAaC2q_4esmL6QvpkHQUN8F0Ecc,2152
26
26
  pydantic_ai/common_tools/tavily.py,sha256=Q1xxSF5HtXAaZ10Pp-OaDOHXwJf2mco9wScGEQXD7E4,2495
27
- pydantic_ai/models/__init__.py,sha256=M_KXHIFCCVGYr52Rc0xe-uQOMuLJC1AC1Zmj0H9JB00,24725
28
- pydantic_ai/models/anthropic.py,sha256=2R4VpnuXyM1WPB4vV2Ssl7urPwD1IiOAbVJDWplJ0Wc,21201
29
- pydantic_ai/models/bedrock.py,sha256=Y_JMGe09JlFrfS2U3m39EGLViFbJ_WSMljZCQpxSuEI,27519
27
+ pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ pydantic_ai/ext/langchain.py,sha256=TI8B6eBjEGKFfvwyLgC_-0eeba4hDJq7wLZ0OZhbiWw,1967
29
+ pydantic_ai/models/__init__.py,sha256=hnmJnufLazc-S9FqOx5XdIrD3VWY7rZF40I0hIrDS1o,27947
30
+ pydantic_ai/models/anthropic.py,sha256=ggLI3l-w0NiBOEcU-XN_QrckPten7AjGeHLv61HKtJU,21125
31
+ pydantic_ai/models/bedrock.py,sha256=OVuPe_gQ1KHzvN9k5w0IZjdY3uGbQ1LqDAeaC9ffBlE,27944
30
32
  pydantic_ai/models/cohere.py,sha256=bQLTQguqVXkzkPgWmMncrxApO9CQ7YtgrmFwa057g7g,12116
31
33
  pydantic_ai/models/fallback.py,sha256=idOYGMo3CZzpCBT8DDiuPAAgnV2jzluDUq3ESb3KteM,4981
32
34
  pydantic_ai/models/function.py,sha256=rnihsyakyieCGbEyxfqzvoBHnR_3LJn4x6DXQqdAAM4,11458
33
- pydantic_ai/models/gemini.py,sha256=27y4JPGU0EJzGpYZpv6WlAYzHdW_1oD4fRISjoQMKW0,35823
34
- pydantic_ai/models/google.py,sha256=jwmbnBixiBZQFwEa89NJGkeH7iVmKzXhPuf6ONpgduM,21095
35
- pydantic_ai/models/groq.py,sha256=MVJO8DQbgO7NlRA898hTdFnKz1Y42c31u8BDoYDxGIg,17848
36
- pydantic_ai/models/instrumented.py,sha256=Y3SxAlP9cCX_Ch02c8qN9mrWMY9_tuyj6zMeN5Gz-W0,12356
37
- pydantic_ai/models/mistral.py,sha256=pTywq_QCjjAlRC5uTQ9DQeONH0Fsc1cYUVku9BW21Wk,29614
38
- pydantic_ai/models/openai.py,sha256=tsuHg-Rywlv9LtnW3Wad6W1pr4Ogr-pca2q14ZhTiPU,44556
35
+ pydantic_ai/models/gemini.py,sha256=uUQz1q_HwUEXr0pjK8FkaCixQC-3cpfSrFs1kcjwRN4,36251
36
+ pydantic_ai/models/google.py,sha256=NIH6LhzvGn2fyS72PMu3YMKZm13kj-OupiHe-PK-Nq8,21254
37
+ pydantic_ai/models/groq.py,sha256=rnAwTJ5AXgspqSqi2nJPlqj7sOeZ8H04XNs5cWJqKE4,17816
38
+ pydantic_ai/models/instrumented.py,sha256=DvBNxgkxmMGeUQvBUJUAfRCpgXpJzQhNNe_M5TAVCbw,15679
39
+ pydantic_ai/models/mistral.py,sha256=teNN6IfTTpfZxtSXFdD2M1IDrDj0_EHJt-9gDmAKLvg,29563
40
+ pydantic_ai/models/openai.py,sha256=TkabBV7z4WLL_b-KzCnt5_xcns6qW0VMm0Yl-bgzTB0,44902
39
41
  pydantic_ai/models/test.py,sha256=Jlq-YQ9dhzENgmBMVerZpM4L-I2aPf7HH7ifIncyDlE,17010
40
42
  pydantic_ai/models/wrapper.py,sha256=43ntRkTF7rVBYLC-Ihdo1fkwpeveOpA_1fXe1fd3W9Y,1690
41
43
  pydantic_ai/profiles/__init__.py,sha256=uO_f1kSqrnXuO0x5U0EHTTMRYcmOiOoa-tS1OZppxBk,1426
@@ -48,9 +50,9 @@ pydantic_ai/profiles/google.py,sha256=TL8WxCuFKQ7FZnDQpBYvtd26_qOwPDpLfDeTdAOdrB
48
50
  pydantic_ai/profiles/grok.py,sha256=nBOxOCYCK9aiLmz2Q-esqYhotNbbBC1boAoOYIk1tVw,211
49
51
  pydantic_ai/profiles/meta.py,sha256=IAGPoUrLWd-g9ajAgpWp9fIeOrP-7dBlZ2HEFjIhUbY,334
50
52
  pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzCMQ,217
51
- pydantic_ai/profiles/openai.py,sha256=6fRJxA-m196OfzfhG3_2zdZl2plwW0kBNUbQorJUSSE,5459
53
+ pydantic_ai/profiles/openai.py,sha256=QK1-e4fHdTvWgi090UI7ouAlO9hbDu2CBrI0AX1MSUI,5807
52
54
  pydantic_ai/profiles/qwen.py,sha256=u7pL8uomoQTVl45g5wDrHx0P_oFDLaN6ALswuwmkWc0,334
53
- pydantic_ai/providers/__init__.py,sha256=N2rneMydEhq6BbcCxvza1Sv_cdh9HFyNQkjlaiyU6zA,3252
55
+ pydantic_ai/providers/__init__.py,sha256=kcoEy3xYZASoLoR8EHQUN0S8EI9GaqiF6P__oyYOnqM,3373
54
56
  pydantic_ai/providers/anthropic.py,sha256=D35UXxCPXv8yIbD0fj9Zg2FvNyoMoJMeDUtVM8Sn78I,3046
55
57
  pydantic_ai/providers/azure.py,sha256=y77IHGiSQ9Ttx9f4SGMgdpin2Daq6eYyzUdM9ET22RQ,5819
56
58
  pydantic_ai/providers/bedrock.py,sha256=ycdTXnkj_WNqPMA7DNDPeYia0C37FP0_l0CygSQmWYI,5694
@@ -59,15 +61,16 @@ pydantic_ai/providers/deepseek.py,sha256=kUdM8eVp1lse4bS_uy70Gy7wgog94NTZ36GY-vh
59
61
  pydantic_ai/providers/fireworks.py,sha256=TPbqOpNgXG59qovBaHWbbV2vsvROwlHwQ3PvqHUBH-s,3626
60
62
  pydantic_ai/providers/google.py,sha256=3thJwFxJi5R21LuAGhSBYIwmThZ3Bk-6DOCaVhHLDto,5380
61
63
  pydantic_ai/providers/google_gla.py,sha256=BCF5_6EVtpkCZ6qIDuvgY1Qa9EirS71l51CBqPqk4C4,1825
62
- pydantic_ai/providers/google_vertex.py,sha256=NZKMaTQqiopyU4fYJ2WN09GAupPU-g4iKXz82DwQ3zg,9422
64
+ pydantic_ai/providers/google_vertex.py,sha256=_uiPHisYbQJxygESUUsRKBIG-DjeTwEQVvioS4JpEXc,9446
63
65
  pydantic_ai/providers/grok.py,sha256=mtlx7KP6xEDrDnYR1pmuT61wjUlYbCJNASNCDfVGQ5A,2912
64
66
  pydantic_ai/providers/groq.py,sha256=LcD0vXiZhWOsMatz0yKzt9NCIAw6H7OhJsQ5GPDqL44,3835
67
+ pydantic_ai/providers/heroku.py,sha256=NmDIkAdxtWsvCjlX-bKI5FgI4HW1zO9-e0mrNQNGMCk,2990
65
68
  pydantic_ai/providers/mistral.py,sha256=EIUSENjFuGzBhvbdrarUTM4VPkesIMnZrzfnEKHOsc4,3120
66
69
  pydantic_ai/providers/openai.py,sha256=7iGij0EaFylab7dTZAZDgXr78tr-HsZrn9EI9AkWBNQ,3091
67
70
  pydantic_ai/providers/openrouter.py,sha256=NXjNdnlXIBrBMMqbzcWQnowXOuZh4NHikXenBn5h3mc,4061
68
71
  pydantic_ai/providers/together.py,sha256=zFVSMSm5jXbpkNouvBOTjWrPmlPpCp6sQS5LMSyVjrQ,3482
69
- pydantic_ai_slim-0.2.15.dist-info/METADATA,sha256=zRVYY87obQ7R55tqSHCx3RTz2EYcN9tD5AEp14b8ddk,3850
70
- pydantic_ai_slim-0.2.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
71
- pydantic_ai_slim-0.2.15.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
72
- pydantic_ai_slim-0.2.15.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
73
- pydantic_ai_slim-0.2.15.dist-info/RECORD,,
72
+ pydantic_ai_slim-0.2.17.dist-info/METADATA,sha256=2XEObXk2W2obyTt9-1N6oj0e-r8Mj0_LRb1ME5iJtvg,3850
73
+ pydantic_ai_slim-0.2.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
+ pydantic_ai_slim-0.2.17.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
75
+ pydantic_ai_slim-0.2.17.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
76
+ pydantic_ai_slim-0.2.17.dist-info/RECORD,,