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

Files changed (37) hide show
  1. pydantic_ai/_output.py +19 -7
  2. pydantic_ai/_parts_manager.py +10 -12
  3. pydantic_ai/_tool_manager.py +18 -1
  4. pydantic_ai/ag_ui.py +32 -17
  5. pydantic_ai/agent/abstract.py +8 -0
  6. pydantic_ai/durable_exec/dbos/_agent.py +5 -2
  7. pydantic_ai/durable_exec/temporal/_agent.py +1 -1
  8. pydantic_ai/messages.py +30 -6
  9. pydantic_ai/models/__init__.py +5 -1
  10. pydantic_ai/models/anthropic.py +54 -25
  11. pydantic_ai/models/bedrock.py +81 -31
  12. pydantic_ai/models/cohere.py +39 -13
  13. pydantic_ai/models/function.py +8 -1
  14. pydantic_ai/models/google.py +61 -33
  15. pydantic_ai/models/groq.py +35 -7
  16. pydantic_ai/models/huggingface.py +27 -5
  17. pydantic_ai/models/mistral.py +55 -21
  18. pydantic_ai/models/openai.py +135 -63
  19. pydantic_ai/profiles/openai.py +11 -0
  20. pydantic_ai/providers/__init__.py +3 -0
  21. pydantic_ai/providers/anthropic.py +8 -4
  22. pydantic_ai/providers/bedrock.py +9 -1
  23. pydantic_ai/providers/cohere.py +2 -2
  24. pydantic_ai/providers/gateway.py +187 -0
  25. pydantic_ai/providers/google.py +2 -2
  26. pydantic_ai/providers/google_gla.py +1 -1
  27. pydantic_ai/providers/groq.py +12 -5
  28. pydantic_ai/providers/heroku.py +2 -2
  29. pydantic_ai/providers/huggingface.py +1 -1
  30. pydantic_ai/providers/mistral.py +1 -1
  31. pydantic_ai/providers/openai.py +13 -0
  32. pydantic_ai/settings.py +1 -0
  33. {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/METADATA +5 -5
  34. {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/RECORD +37 -36
  35. {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/WHEEL +0 -0
  36. {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/entry_points.txt +0 -0
  37. {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,187 @@
1
+ """This module implements the Pydantic AI Gateway provider."""
2
+
3
+ from __future__ import annotations as _annotations
4
+
5
+ import os
6
+ from typing import TYPE_CHECKING, Any, Literal, overload
7
+ from urllib.parse import urljoin
8
+
9
+ import httpx
10
+
11
+ from pydantic_ai.exceptions import UserError
12
+ from pydantic_ai.models import Model, cached_async_http_client, get_user_agent
13
+
14
+ if TYPE_CHECKING:
15
+ from google.genai import Client as GoogleClient
16
+ from groq import AsyncGroq
17
+ from openai import AsyncOpenAI
18
+
19
+ from pydantic_ai.models.anthropic import AsyncAnthropicClient
20
+ from pydantic_ai.providers import Provider
21
+
22
+
23
+ @overload
24
+ def gateway_provider(
25
+ upstream_provider: Literal['openai', 'openai-chat', 'openai-responses'],
26
+ *,
27
+ api_key: str | None = None,
28
+ base_url: str | None = None,
29
+ http_client: httpx.AsyncClient | None = None,
30
+ ) -> Provider[AsyncOpenAI]: ...
31
+
32
+
33
+ @overload
34
+ def gateway_provider(
35
+ upstream_provider: Literal['groq'],
36
+ *,
37
+ api_key: str | None = None,
38
+ base_url: str | None = None,
39
+ http_client: httpx.AsyncClient | None = None,
40
+ ) -> Provider[AsyncGroq]: ...
41
+
42
+
43
+ @overload
44
+ def gateway_provider(
45
+ upstream_provider: Literal['google-vertex'],
46
+ *,
47
+ api_key: str | None = None,
48
+ base_url: str | None = None,
49
+ ) -> Provider[GoogleClient]: ...
50
+
51
+
52
+ @overload
53
+ def gateway_provider(
54
+ upstream_provider: Literal['anthropic'],
55
+ *,
56
+ api_key: str | None = None,
57
+ base_url: str | None = None,
58
+ ) -> Provider[AsyncAnthropicClient]: ...
59
+
60
+
61
+ def gateway_provider(
62
+ upstream_provider: Literal['openai', 'openai-chat', 'openai-responses', 'groq', 'google-vertex', 'anthropic'] | str,
63
+ *,
64
+ # Every provider
65
+ api_key: str | None = None,
66
+ base_url: str | None = None,
67
+ # OpenAI & Groq
68
+ http_client: httpx.AsyncClient | None = None,
69
+ ) -> Provider[Any]:
70
+ """Create a new Gateway provider.
71
+
72
+ Args:
73
+ upstream_provider: The upstream provider to use.
74
+ api_key: The API key to use for authentication. If not provided, the `PYDANTIC_AI_GATEWAY_API_KEY`
75
+ environment variable will be used if available.
76
+ base_url: The base URL to use for the Gateway. If not provided, the `PYDANTIC_AI_GATEWAY_BASE_URL`
77
+ environment variable will be used if available. Otherwise, defaults to `http://localhost:8787/`.
78
+ http_client: The HTTP client to use for the Gateway.
79
+ """
80
+ api_key = api_key or os.getenv('PYDANTIC_AI_GATEWAY_API_KEY')
81
+ if not api_key:
82
+ raise UserError(
83
+ 'Set the `PYDANTIC_AI_GATEWAY_API_KEY` environment variable or pass it via `gateway_provider(api_key=...)`'
84
+ ' to use the Pydantic AI Gateway provider.'
85
+ )
86
+
87
+ base_url = base_url or os.getenv('PYDANTIC_AI_GATEWAY_BASE_URL', 'http://localhost:8787')
88
+ http_client = http_client or cached_async_http_client(provider=f'gateway-{upstream_provider}')
89
+ http_client.event_hooks = {'request': [_request_hook]}
90
+
91
+ if upstream_provider in ('openai', 'openai-chat'):
92
+ from .openai import OpenAIProvider
93
+
94
+ return OpenAIProvider(api_key=api_key, base_url=urljoin(base_url, 'openai'), http_client=http_client)
95
+ elif upstream_provider == 'openai-responses':
96
+ from .openai import OpenAIProvider
97
+
98
+ return OpenAIProvider(api_key=api_key, base_url=urljoin(base_url, 'openai'), http_client=http_client)
99
+ elif upstream_provider == 'groq':
100
+ from .groq import GroqProvider
101
+
102
+ return GroqProvider(api_key=api_key, base_url=urljoin(base_url, 'groq'), http_client=http_client)
103
+ elif upstream_provider == 'anthropic':
104
+ from anthropic import AsyncAnthropic
105
+
106
+ from .anthropic import AnthropicProvider
107
+
108
+ return AnthropicProvider(
109
+ anthropic_client=AsyncAnthropic(
110
+ auth_token=api_key,
111
+ base_url=urljoin(base_url, 'anthropic'),
112
+ http_client=http_client,
113
+ )
114
+ )
115
+ elif upstream_provider == 'google-vertex':
116
+ from google.genai import Client as GoogleClient
117
+
118
+ from .google import GoogleProvider
119
+
120
+ return GoogleProvider(
121
+ client=GoogleClient(
122
+ vertexai=True,
123
+ api_key='unset',
124
+ http_options={
125
+ 'base_url': f'{base_url}/google-vertex',
126
+ 'headers': {'User-Agent': get_user_agent(), 'Authorization': api_key},
127
+ # TODO(Marcelo): Until https://github.com/googleapis/python-genai/issues/1357 is solved.
128
+ 'async_client_args': {
129
+ 'transport': httpx.AsyncHTTPTransport(),
130
+ 'event_hooks': {'request': [_request_hook]},
131
+ },
132
+ },
133
+ )
134
+ )
135
+ else: # pragma: no cover
136
+ raise UserError(f'Unknown provider: {upstream_provider}')
137
+
138
+
139
+ def infer_model(model_name: str) -> Model:
140
+ """Infer the model class that will be used to make requests to the gateway.
141
+
142
+ Args:
143
+ model_name: The name of the model to infer. Must be in the format "provider/model_name".
144
+
145
+ Returns:
146
+ The model class that will be used to make requests to the gateway.
147
+ """
148
+ try:
149
+ upstream_provider, model_name = model_name.split('/', 1)
150
+ except ValueError:
151
+ raise UserError(f'The model name "{model_name}" is not in the format "provider/model_name".')
152
+
153
+ if upstream_provider in ('openai', 'openai-chat'):
154
+ from pydantic_ai.models.openai import OpenAIChatModel
155
+
156
+ return OpenAIChatModel(model_name, provider=gateway_provider('openai'))
157
+ elif upstream_provider == 'openai-responses':
158
+ from pydantic_ai.models.openai import OpenAIResponsesModel
159
+
160
+ return OpenAIResponsesModel(model_name, provider=gateway_provider('openai'))
161
+ elif upstream_provider == 'groq':
162
+ from pydantic_ai.models.groq import GroqModel
163
+
164
+ return GroqModel(model_name, provider=gateway_provider('groq'))
165
+ elif upstream_provider == 'anthropic':
166
+ from pydantic_ai.models.anthropic import AnthropicModel
167
+
168
+ return AnthropicModel(model_name, provider=gateway_provider('anthropic'))
169
+ elif upstream_provider == 'google-vertex':
170
+ from pydantic_ai.models.google import GoogleModel
171
+
172
+ return GoogleModel(model_name, provider=gateway_provider('google-vertex'))
173
+ raise UserError(f'Unknown upstream provider: {upstream_provider}')
174
+
175
+
176
+ async def _request_hook(request: httpx.Request) -> httpx.Request:
177
+ """Request hook for the gateway provider.
178
+
179
+ It adds the `"traceparent"` header to the request.
180
+ """
181
+ from opentelemetry.propagate import inject
182
+
183
+ headers: dict[str, Any] = {}
184
+ inject(headers)
185
+ request.headers.update(headers)
186
+
187
+ return request
@@ -106,13 +106,13 @@ class GoogleProvider(Provider[Client]):
106
106
  else:
107
107
  self._client = Client(
108
108
  vertexai=vertexai,
109
- project=project or os.environ.get('GOOGLE_CLOUD_PROJECT'),
109
+ project=project or os.getenv('GOOGLE_CLOUD_PROJECT'),
110
110
  # From https://github.com/pydantic/pydantic-ai/pull/2031/files#r2169682149:
111
111
  # Currently `us-central1` supports the most models by far of any region including `global`, but not
112
112
  # all of them. `us-central1` has all google models but is missing some Anthropic partner models,
113
113
  # which use `us-east5` instead. `global` has fewer models but higher availability.
114
114
  # For more details, check: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#available-regions
115
- location=location or os.environ.get('GOOGLE_CLOUD_LOCATION') or 'us-central1',
115
+ location=location or os.getenv('GOOGLE_CLOUD_LOCATION') or 'us-central1',
116
116
  credentials=credentials,
117
117
  http_options=http_options,
118
118
  )
@@ -39,7 +39,7 @@ class GoogleGLAProvider(Provider[httpx.AsyncClient]):
39
39
  will be used if available.
40
40
  http_client: An existing `httpx.AsyncClient` to use for making HTTP requests.
41
41
  """
42
- api_key = api_key or os.environ.get('GEMINI_API_KEY')
42
+ api_key = api_key or os.getenv('GEMINI_API_KEY')
43
43
  if not api_key:
44
44
  raise UserError(
45
45
  'Set the `GEMINI_API_KEY` environment variable or pass it via `GoogleGLAProvider(api_key=...)`'
@@ -53,7 +53,7 @@ class GroqProvider(Provider[AsyncGroq]):
53
53
 
54
54
  @property
55
55
  def base_url(self) -> str:
56
- return os.environ.get('GROQ_BASE_URL', 'https://api.groq.com')
56
+ return str(self.client.base_url)
57
57
 
58
58
  @property
59
59
  def client(self) -> AsyncGroq:
@@ -85,12 +85,15 @@ class GroqProvider(Provider[AsyncGroq]):
85
85
  def __init__(self, *, groq_client: AsyncGroq | None = None) -> None: ...
86
86
 
87
87
  @overload
88
- def __init__(self, *, api_key: str | None = None, http_client: httpx.AsyncClient | None = None) -> None: ...
88
+ def __init__(
89
+ self, *, api_key: str | None = None, base_url: str | None = None, http_client: httpx.AsyncClient | None = None
90
+ ) -> None: ...
89
91
 
90
92
  def __init__(
91
93
  self,
92
94
  *,
93
95
  api_key: str | None = None,
96
+ base_url: str | None = None,
94
97
  groq_client: AsyncGroq | None = None,
95
98
  http_client: httpx.AsyncClient | None = None,
96
99
  ) -> None:
@@ -99,6 +102,8 @@ class GroqProvider(Provider[AsyncGroq]):
99
102
  Args:
100
103
  api_key: The API key to use for authentication, if not provided, the `GROQ_API_KEY` environment variable
101
104
  will be used if available.
105
+ base_url: The base url for the Groq requests. If not provided, the `GROQ_BASE_URL` environment variable
106
+ will be used if available. Otherwise, defaults to Groq's base url.
102
107
  groq_client: An existing
103
108
  [`AsyncGroq`](https://github.com/groq/groq-python?tab=readme-ov-file#async-usage)
104
109
  client to use. If provided, `api_key` and `http_client` must be `None`.
@@ -107,9 +112,11 @@ class GroqProvider(Provider[AsyncGroq]):
107
112
  if groq_client is not None:
108
113
  assert http_client is None, 'Cannot provide both `groq_client` and `http_client`'
109
114
  assert api_key is None, 'Cannot provide both `groq_client` and `api_key`'
115
+ assert base_url is None, 'Cannot provide both `groq_client` and `base_url`'
110
116
  self._client = groq_client
111
117
  else:
112
- api_key = api_key or os.environ.get('GROQ_API_KEY')
118
+ api_key = api_key or os.getenv('GROQ_API_KEY')
119
+ base_url = base_url or os.getenv('GROQ_BASE_URL', 'https://api.groq.com')
113
120
 
114
121
  if not api_key:
115
122
  raise UserError(
@@ -117,7 +124,7 @@ class GroqProvider(Provider[AsyncGroq]):
117
124
  'to use the Groq provider.'
118
125
  )
119
126
  elif http_client is not None:
120
- self._client = AsyncGroq(base_url=self.base_url, api_key=api_key, http_client=http_client)
127
+ self._client = AsyncGroq(base_url=base_url, api_key=api_key, http_client=http_client)
121
128
  else:
122
129
  http_client = cached_async_http_client(provider='groq')
123
- self._client = AsyncGroq(base_url=self.base_url, api_key=api_key, http_client=http_client)
130
+ self._client = AsyncGroq(base_url=base_url, api_key=api_key, http_client=http_client)
@@ -65,14 +65,14 @@ class HerokuProvider(Provider[AsyncOpenAI]):
65
65
  assert api_key is None, 'Cannot provide both `openai_client` and `api_key`'
66
66
  self._client = openai_client
67
67
  else:
68
- api_key = api_key or os.environ.get('HEROKU_INFERENCE_KEY')
68
+ api_key = api_key or os.getenv('HEROKU_INFERENCE_KEY')
69
69
  if not api_key:
70
70
  raise UserError(
71
71
  'Set the `HEROKU_INFERENCE_KEY` environment variable or pass it via `HerokuProvider(api_key=...)`'
72
72
  'to use the Heroku provider.'
73
73
  )
74
74
 
75
- base_url = base_url or os.environ.get('HEROKU_INFERENCE_URL', 'https://us.inference.heroku.com')
75
+ base_url = base_url or os.getenv('HEROKU_INFERENCE_URL', 'https://us.inference.heroku.com')
76
76
  base_url = base_url.rstrip('/') + '/v1'
77
77
 
78
78
  if http_client is not None:
@@ -95,7 +95,7 @@ class HuggingFaceProvider(Provider[AsyncInferenceClient]):
95
95
  defaults to "auto", which will select the first available provider for the model, the first of the providers available for the model, sorted by the user's order in https://hf.co/settings/inference-providers.
96
96
  If `base_url` is passed, then `provider_name` is not used.
97
97
  """
98
- api_key = api_key or os.environ.get('HF_TOKEN')
98
+ api_key = api_key or os.getenv('HF_TOKEN')
99
99
 
100
100
  if api_key is None:
101
101
  raise UserError(
@@ -67,7 +67,7 @@ class MistralProvider(Provider[Mistral]):
67
67
  assert base_url is None, 'Cannot provide both `mistral_client` and `base_url`'
68
68
  self._client = mistral_client
69
69
  else:
70
- api_key = api_key or os.environ.get('MISTRAL_API_KEY')
70
+ api_key = api_key or os.getenv('MISTRAL_API_KEY')
71
71
 
72
72
  if not api_key:
73
73
  raise UserError(
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations as _annotations
2
2
 
3
3
  import os
4
+ from typing import overload
4
5
 
5
6
  import httpx
6
7
 
@@ -36,6 +37,18 @@ class OpenAIProvider(Provider[AsyncOpenAI]):
36
37
  def model_profile(self, model_name: str) -> ModelProfile | None:
37
38
  return openai_model_profile(model_name)
38
39
 
40
+ @overload
41
+ def __init__(self, *, openai_client: AsyncOpenAI) -> None: ...
42
+
43
+ @overload
44
+ def __init__(
45
+ self,
46
+ base_url: str | None = None,
47
+ api_key: str | None = None,
48
+ openai_client: None = None,
49
+ http_client: httpx.AsyncClient | None = None,
50
+ ) -> None: ...
51
+
39
52
  def __init__(
40
53
  self,
41
54
  base_url: str | None = None,
pydantic_ai/settings.py CHANGED
@@ -94,6 +94,7 @@ class ModelSettings(TypedDict, total=False):
94
94
  * Groq
95
95
  * Cohere
96
96
  * Mistral
97
+ * Gemini
97
98
  """
98
99
 
99
100
  presence_penalty: float
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 1.0.2
3
+ Version: 1.0.4
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.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.2
36
+ Requires-Dist: pydantic-graph==1.0.4
37
37
  Requires-Dist: pydantic>=2.10
38
38
  Requires-Dist: typing-inspection>=0.4.0
39
39
  Provides-Extra: a2a
@@ -51,13 +51,13 @@ Requires-Dist: prompt-toolkit>=3; extra == 'cli'
51
51
  Requires-Dist: pyperclip>=1.9.0; extra == 'cli'
52
52
  Requires-Dist: rich>=13; extra == 'cli'
53
53
  Provides-Extra: cohere
54
- Requires-Dist: cohere>=5.16.0; (platform_system != 'Emscripten') and extra == 'cohere'
54
+ Requires-Dist: cohere>=5.17.0; (platform_system != 'Emscripten') and extra == 'cohere'
55
55
  Provides-Extra: dbos
56
56
  Requires-Dist: dbos>=1.13.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.2; extra == 'evals'
60
+ Requires-Dist: pydantic-evals==1.0.4; extra == 'evals'
61
61
  Provides-Extra: google
62
62
  Requires-Dist: google-genai>=1.31.0; extra == 'google'
63
63
  Provides-Extra: groq
@@ -69,7 +69,7 @@ Requires-Dist: logfire[httpx]>=3.14.1; extra == 'logfire'
69
69
  Provides-Extra: mcp
70
70
  Requires-Dist: mcp>=1.12.3; extra == 'mcp'
71
71
  Provides-Extra: mistral
72
- Requires-Dist: mistralai>=1.9.2; extra == 'mistral'
72
+ Requires-Dist: mistralai>=1.9.10; extra == 'mistral'
73
73
  Provides-Extra: openai
74
74
  Requires-Dist: openai>=1.99.9; extra == 'openai'
75
75
  Provides-Extra: retries
@@ -7,42 +7,42 @@ pydantic_ai/_function_schema.py,sha256=olbmUMQoQV5qKV4j0-cOnhcTINz4uYyeDqMyusrFR
7
7
  pydantic_ai/_griffe.py,sha256=BphvTL00FHxsSY56GM-bNyCOdwrpL0T3LbDQITWUK_Q,5280
8
8
  pydantic_ai/_mcp.py,sha256=PuvwnlLjv7YYOa9AZJCrklevBug99zGMhwJCBGG7BHQ,5626
9
9
  pydantic_ai/_otel_messages.py,sha256=qLu81aBDEAsUTW6efBzWRXNDMICTrUUBpcGbCEyXr4o,1480
10
- pydantic_ai/_output.py,sha256=0Oq-FFvxXdR0Ia_8LrJ1CanGOWkI5C98HfdkY8TZhik,37442
11
- pydantic_ai/_parts_manager.py,sha256=SZi2_G9Z5Z9BLuInfgcki9p5yUhVjR38WcxfuOoECLA,18057
10
+ pydantic_ai/_output.py,sha256=phJ9AQYUlhQhAVikL0FpPn_Vm05V_yK3VYmCUUtH778,38296
11
+ pydantic_ai/_parts_manager.py,sha256=5451d4Oj-kX_hKA8ioyYA7ilFhuwd7XmQ0dLroPzeS8,17947
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=1lPPIrEc9sLR9c3GEv2GE2STZ88ipTHRqUYNzqrAKzo,9779
15
+ pydantic_ai/_tool_manager.py,sha256=hB_QzVxnGEbB7ZT2UUDeKeLm_Cv0F-0oCPwInxR-8NE,10369
16
16
  pydantic_ai/_utils.py,sha256=xa2PoAcTN-oXhfXOONOighmue-jtSv668o9Fu_IdO0A,16062
17
- pydantic_ai/ag_ui.py,sha256=L21cc_LN532psY70GNgJNaj-PtBpLgqARJBF1zb2ZX4,28127
17
+ pydantic_ai/ag_ui.py,sha256=Pp-R6XeHip1oQ6_jqV79JyE4TMQ0VOwb99pHxoGdsuU,28911
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
22
  pydantic_ai/mcp.py,sha256=cmgi3Nq_qe1cTqs-R92WMfZw6bwjSqy2R6NiR7isPcQ,30364
23
- pydantic_ai/messages.py,sha256=PrewulR99D-WHBLIUjZDPiDSOHaTfo6-_AGDl14KdTA,54897
23
+ pydantic_ai/messages.py,sha256=gP5Tzjq3TfOJZuA98kK7oOMTX7gAH6yvW7uDfQYLRIY,55787
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
- pydantic_ai/settings.py,sha256=yuUZ7-GkdPB-Gbx71kSdh8dSr6gwM9gEwk84qNxPO_I,3552
29
+ pydantic_ai/settings.py,sha256=0mr6KudxKKjTG8e3nsv_8vDLxNhu_1-WvefCOzCGSYM,3565
30
30
  pydantic_ai/tools.py,sha256=McOPcViIGCjJzoyoipUTrttPPRMsIkbbm9ike8PaS8c,19712
31
31
  pydantic_ai/usage.py,sha256=UoSOwhH-NTAeXl7Tq8GWXcW82m8zQLQvThvQehEx08g,14070
32
32
  pydantic_ai/agent/__init__.py,sha256=WES-ZG7s7QQOOBIMN8fE9nXRTt_zD_M0WFsgwuz1O7c,62499
33
- pydantic_ai/agent/abstract.py,sha256=nKDP_T0hRhi1RGVNIcAQbmQkTrwGWbTxt_Lzwfa7cPs,44291
33
+ pydantic_ai/agent/abstract.py,sha256=h1e9cWv2N9qsXWhkJmJW-LJehZu3bFFOsfzRH6o7O84,44551
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
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
40
+ pydantic_ai/durable_exec/dbos/_agent.py,sha256=IsGDvqQ4Jc5QPTNi9nVEKDc96b8p6SKYo80Yz9CjdhI,32499
41
41
  pydantic_ai/durable_exec/dbos/_mcp_server.py,sha256=XeDeBnyNwonPMZaSd2IMDf3ye0CTgYO9b9Vh8ZoeT6A,3009
42
42
  pydantic_ai/durable_exec/dbos/_model.py,sha256=XNGLKJ5a9znUWnMSIA0SzxvQmUJREWzcVDrnfdjMoac,5115
43
43
  pydantic_ai/durable_exec/dbos/_utils.py,sha256=_aNceFvTcNeqb78sTDYM2TdYph85tbdeLueyXY1lbTA,242
44
44
  pydantic_ai/durable_exec/temporal/__init__.py,sha256=XKwy68wfgmjr057nolRwGHTKiadxufpQEGEUprAV09k,5563
45
- pydantic_ai/durable_exec/temporal/_agent.py,sha256=9-yANaXqbOELkvTu_zeJI5tROKUY2t9-WYUIksSmzD8,36901
45
+ pydantic_ai/durable_exec/temporal/_agent.py,sha256=M2i-uKxlbneHMmSgABwpB5dMzM3SEyhVRds3A-DQ-Jw,36869
46
46
  pydantic_ai/durable_exec/temporal/_function_toolset.py,sha256=Hnfz3ukOqgq8j3h9u97S-fMfq4un1HZA4kxN2irWD_0,5562
47
47
  pydantic_ai/durable_exec/temporal/_logfire.py,sha256=5bSiOt-jihQATJsg-jrGmEqP3RWW_Sz6c2aicjt03lI,2009
48
48
  pydantic_ai/durable_exec/temporal/_mcp_server.py,sha256=VFvHPVhvYz-ITGaXXNyuWwB8tsdF3Hg9rs7gss8TKWY,6032
@@ -52,20 +52,20 @@ pydantic_ai/durable_exec/temporal/_toolset.py,sha256=HxmQ5vut7Zd5eyrC27eNNn5_CHA
52
52
  pydantic_ai/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  pydantic_ai/ext/aci.py,sha256=sUllKDNO-LOMurbFgxwRHuzNlBkSa3aVBqXfEm-A_vo,2545
54
54
  pydantic_ai/ext/langchain.py,sha256=iLVEZv1kcLkdIHo3us2yfdi0kVqyJ6qTaCt9BoLWm4k,2335
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
57
- pydantic_ai/models/bedrock.py,sha256=Eeq-rqZWaVu2tbH8eSNoxp5dq5RH8esnsOp-ge_XGu4,30786
58
- pydantic_ai/models/cohere.py,sha256=aKgpcYfIKwMfEroWxfLyzYu8ELuddF4TXv7s0LU3Pcc,13052
55
+ pydantic_ai/models/__init__.py,sha256=na9M98DMJ0VpsYhcJ9WI80EI0278XJEJ9jIE_hlW6q4,36256
56
+ pydantic_ai/models/anthropic.py,sha256=-dH4qYSRlRD1XiC1wR89oGHKnFTjxP8zQh0scQDkTCk,32768
57
+ pydantic_ai/models/bedrock.py,sha256=wHo65QNEsfsb1UaUv_TpvJ0WrgFoKoegB6I3eDVnORI,33393
58
+ pydantic_ai/models/cohere.py,sha256=Oly6wpw7Xj0z-690foknLK2z2F9ukDOjxQCGBFFJKkk,13898
59
59
  pydantic_ai/models/fallback.py,sha256=XJ74wRxVT4dF0uewHH3is9I-zcLBK8KFIhpK3BB6mRw,5526
60
- pydantic_ai/models/function.py,sha256=uWGdw4sFhhmczjU44rwe6i2XFafOXAalIigWGCSivYg,14231
60
+ pydantic_ai/models/function.py,sha256=9ZuRDQXChiA_S3a_M9tmmYQwlyuUEFZ20aYrnPqdTz8,14599
61
61
  pydantic_ai/models/gemini.py,sha256=DYEaOnwGmo9FUGVkRRrydGuQwYhnO-Cq5grTurLWgb4,39376
62
- pydantic_ai/models/google.py,sha256=npkTLwS8w-SfvsU9iB3_yOZfCfreJhKEmuuu_I9RQfk,33701
63
- pydantic_ai/models/groq.py,sha256=am-Qpp6RLFqwRnouIdACWd5nxOBB92Bn0hRs-VdrD38,25561
64
- pydantic_ai/models/huggingface.py,sha256=sWjHTVfqOtdlOENdERkPxtGjQ8quUNepPjqlXSR7aGk,20417
62
+ pydantic_ai/models/google.py,sha256=i8dMi3wyeSTT8CFgbDd9gxKUhahgkBEXNXjLqs2utwI,34758
63
+ pydantic_ai/models/groq.py,sha256=G17TeyQeIAYG7hANe1LkZhj41xScB8VYum3AK7Q5KRA,26769
64
+ pydantic_ai/models/huggingface.py,sha256=f1tZObCJkcbiUCwNoPyuiaRaGYuj0GBFmbA8yFd-tHY,21176
65
65
  pydantic_ai/models/instrumented.py,sha256=DCnyG7HXgV-W2EWac8oZb2A8PL8yarXeU7Rt97l4w_s,21421
66
66
  pydantic_ai/models/mcp_sampling.py,sha256=qnLCO3CB5bNQ86SpWRA-CSSOVcCCLPwjHtcNFvW9wHs,3461
67
- pydantic_ai/models/mistral.py,sha256=yS5pBYtFUkICwkvGN23iBbBfaBASN1DARsB6QQbBjOc,32344
68
- pydantic_ai/models/openai.py,sha256=WwbEHpSR_ZOBt0-oQ_sUbDxUFDuS0hcd5H4dEboG4ew,66978
67
+ pydantic_ai/models/mistral.py,sha256=ru8EHwFS0xZBN6s1tlssUdjxjQyjB9L_8kFH7qq5U_g,33654
68
+ pydantic_ai/models/openai.py,sha256=fqSD7_Vo5lIoi-Yf8ljoSDy7Reo2EMNrrdNCgh1QsOg,70789
69
69
  pydantic_ai/models/test.py,sha256=1kBwi7pSUt9_K1U-hokOilplxJWPQ3KRKH_s8bYmt_s,19969
70
70
  pydantic_ai/models/wrapper.py,sha256=9MeHW7mXPsEK03IKL0rtjeX6QgXyZROOOzLh72GiX2k,2148
71
71
  pydantic_ai/profiles/__init__.py,sha256=V6uGAVJuIaYRuZOQjkdIyFfDKD5py18RC98njnHOFug,3293
@@ -81,29 +81,30 @@ pydantic_ai/profiles/harmony.py,sha256=_81tOGOYGTH3Za67jjtdINvASTTM5_CTyc1Ej2KHJ
81
81
  pydantic_ai/profiles/meta.py,sha256=JdZcpdRWx8PY1pU9Z2i_TYtA0Cpbg23xyFrV7eXnooY,309
82
82
  pydantic_ai/profiles/mistral.py,sha256=ll01PmcK3szwlTfbaJLQmfd0TADN8lqjov9HpPJzCMQ,217
83
83
  pydantic_ai/profiles/moonshotai.py,sha256=e1RJnbEvazE6aJAqfmYLYGNtwNwg52XQDRDkcLrv3fU,272
84
- pydantic_ai/profiles/openai.py,sha256=4w-xzTfn6PKQwmT-Cc13Wit9UcYGapo6eD1q8LgUHRU,9038
84
+ pydantic_ai/profiles/openai.py,sha256=YmIm_2YoIcUrQ22XVcBy9mdXMAF-5glUdYme2jY_5nc,9592
85
85
  pydantic_ai/profiles/qwen.py,sha256=9SnTpMKndxNQMFyumyaOczJa5JGWbYQdpVKKW4OzKjk,749
86
- pydantic_ai/providers/__init__.py,sha256=QlFpPM_kGnF_YAzwB9Dgmxx4Emp33x0bh831H_xKDXE,4478
87
- pydantic_ai/providers/anthropic.py,sha256=bDFNAE4WB66Dn7YDnI3dv6yBbMmM9Kzt2kalM4Fq8WQ,3158
86
+ pydantic_ai/providers/__init__.py,sha256=ksqF_HFRWiFsoXwz4lIQSA2VRvfQTCliRIDVepvBkiE,4598
87
+ pydantic_ai/providers/anthropic.py,sha256=4Cy5S2lnU_hThp8wkDPwWev1Mzmiztw4otFsfrpL8F8,3336
88
88
  pydantic_ai/providers/azure.py,sha256=msYyeQoHATxCJkiF1N05lPSJivh-SWKK1463WF6xTK4,5823
89
- pydantic_ai/providers/bedrock.py,sha256=eq9KflG4pT1Ny2mlaSHkXYdwn8L6S36qTJijrp98Cd4,6160
89
+ pydantic_ai/providers/bedrock.py,sha256=t4ADWFYJKxW-Al5-lOSlb4p-5YiTEOU_O7owcVSP3CU,6522
90
90
  pydantic_ai/providers/cerebras.py,sha256=2zgsNxup_7OEPOXnbJHMYnVRDnB9UYTQnOO4wv7xnYA,3436
91
- pydantic_ai/providers/cohere.py,sha256=-F0prLuI2aDtHNZakd1GlyvgFLio-fo5n6fRbyPMvro,2858
91
+ pydantic_ai/providers/cohere.py,sha256=5__UI6PdNz1eqGda2ylBwUuenpNG9MJN-fDSbFO0euQ,2848
92
92
  pydantic_ai/providers/deepseek.py,sha256=JSc7dQbB-l7_Phf61ZLb4_c1oym9fHea_h2Yq88uoL8,3032
93
93
  pydantic_ai/providers/fireworks.py,sha256=-jMRxbt353nENdpxuDpC4zJZ9wlJBcWa4wdcUk4cXKo,3594
94
+ pydantic_ai/providers/gateway.py,sha256=2O7nepvn8s3IbMSAdRZ8V_ag0VmjDKjvc9gGCb99AEE,6675
94
95
  pydantic_ai/providers/github.py,sha256=Mp6-piXuRe5R0Iu4p0N06aIZgX7rJe5KRzCjt9E4OK4,4378
95
- pydantic_ai/providers/google.py,sha256=iLXcKUl5r7wdLuZtT1IM3obGZi7ecLM_PDyWdQKDncI,6038
96
- pydantic_ai/providers/google_gla.py,sha256=dLkDxps5gEtxsQiDbs1e88lXLYeX4i2qnJtDiFFJ0Ng,1965
96
+ pydantic_ai/providers/google.py,sha256=rYLZa1LUkOXKu39_VIF7u3buYC78IWiYwCEiS0vRJH8,6028
97
+ pydantic_ai/providers/google_gla.py,sha256=X_gxItZg8IGGK0RRsa8lXA_vQtPHEiIDLpfg2u9s5oY,1960
97
98
  pydantic_ai/providers/google_vertex.py,sha256=tAR3L1DZPDvGOJsKyGkIRPeXL7wjly4CvqTWMK1ozVQ,9752
98
99
  pydantic_ai/providers/grok.py,sha256=s9Y_iYkYCBc7UbP2ppGOUdAP_04xrkmPBHq3q3Qr9eE,3109
99
- pydantic_ai/providers/groq.py,sha256=3XuYqvugToJhTf7kQCdtdaTpFsiqAu_pwnIQnHm04uo,4913
100
- pydantic_ai/providers/heroku.py,sha256=wA36vh0ldpdaj33FPtfo4roY_MhaCqErjLyGtcbC6Xs,2958
101
- pydantic_ai/providers/huggingface.py,sha256=MLAv-Z99Kii5Faolq97_0Ir1LUKH9CwRmJFaI5RvwW4,4914
100
+ pydantic_ai/providers/groq.py,sha256=axqy1Hko3NISSzwHACGZddwLZDGup89o13eRwBboU8I,5321
101
+ pydantic_ai/providers/heroku.py,sha256=ADohwsLz25jpqxVjtv9hFhMrJui7AGak5j3hbTIHZPc,2948
102
+ pydantic_ai/providers/huggingface.py,sha256=_Bvi2qdbOB8E9mhiJX3fVoUDZWPCTduCFASZT9JhnI8,4909
102
103
  pydantic_ai/providers/litellm.py,sha256=3hTCjHWRG_1c4S9JSNm0BDBDi4q6BVVZ3OLSXhTndNM,5079
103
- pydantic_ai/providers/mistral.py,sha256=ZxfOQNB2RADtHeGLQrhxHwq6cXpBi3LMgIUa_9wXoug,3088
104
+ pydantic_ai/providers/mistral.py,sha256=pHcWHb2Wf9ZcqQl_Lp84ZvepO0Hmyb1CiqCTbur9S-s,3083
104
105
  pydantic_ai/providers/moonshotai.py,sha256=LwasmxCZCPkq1pb1uDtZTEb_nE55bAtX3QXgLmuNlHE,3260
105
106
  pydantic_ai/providers/ollama.py,sha256=_bxons0p8g0RSPNV8iq3AScVS1ym27QTW4zhDqSakgY,4633
106
- pydantic_ai/providers/openai.py,sha256=xCpR2c7QnYQukiJJKiFTSaGSewPFht7ekTasJDjSimA,3071
107
+ pydantic_ai/providers/openai.py,sha256=SKRsYRUW_zu24iKAM7KJ-6j8GQDIjjxll4AWY1uB3Vs,3410
107
108
  pydantic_ai/providers/openrouter.py,sha256=PXGgHPtlQQHKFaSnmiswWZ3dTvmT9PAg-NvfRYGjrPw,4154
108
109
  pydantic_ai/providers/together.py,sha256=Dln_NgCul1XVOQtNaYvqWrNjOWj9XzA8n4NwNMKkbLk,3450
109
110
  pydantic_ai/providers/vercel.py,sha256=Q7pPvzaoh7Uiqq7CD8TxaWnXnXRKYgWJRwQXSYm0ZKQ,4257
@@ -119,8 +120,8 @@ pydantic_ai/toolsets/prefixed.py,sha256=0KwcDkW8OM36ZUsOLVP5h-Nj2tPq78L3_E2c-1Fb
119
120
  pydantic_ai/toolsets/prepared.py,sha256=Zjfz6S8In6PBVxoKFN9sKPN984zO6t0awB7Lnq5KODw,1431
120
121
  pydantic_ai/toolsets/renamed.py,sha256=JuLHpi-hYPiSPlaTpN8WiXLiGsywYK0axi2lW2Qs75k,1637
121
122
  pydantic_ai/toolsets/wrapper.py,sha256=KRzF1p8dncHbva8CE6Ud-IC5E_aygIHlwH5atXK55k4,1673
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,,
123
+ pydantic_ai_slim-1.0.4.dist-info/METADATA,sha256=sr5EOx_cvOhZR9ps6rO54xvyrW_lFzV0_FL_OWteqhs,4627
124
+ pydantic_ai_slim-1.0.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
125
+ pydantic_ai_slim-1.0.4.dist-info/entry_points.txt,sha256=kbKxe2VtDCYS06hsI7P3uZGxcVC08-FPt1rxeiMpIps,50
126
+ pydantic_ai_slim-1.0.4.dist-info/licenses/LICENSE,sha256=vA6Jc482lEyBBuGUfD1pYx-cM7jxvLYOxPidZ30t_PQ,1100
127
+ pydantic_ai_slim-1.0.4.dist-info/RECORD,,