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.
- pydantic_ai/_output.py +19 -7
- pydantic_ai/_parts_manager.py +10 -12
- pydantic_ai/_tool_manager.py +18 -1
- pydantic_ai/ag_ui.py +32 -17
- pydantic_ai/agent/abstract.py +8 -0
- pydantic_ai/durable_exec/dbos/_agent.py +5 -2
- pydantic_ai/durable_exec/temporal/_agent.py +1 -1
- pydantic_ai/messages.py +30 -6
- pydantic_ai/models/__init__.py +5 -1
- pydantic_ai/models/anthropic.py +54 -25
- pydantic_ai/models/bedrock.py +81 -31
- pydantic_ai/models/cohere.py +39 -13
- pydantic_ai/models/function.py +8 -1
- pydantic_ai/models/google.py +61 -33
- pydantic_ai/models/groq.py +35 -7
- pydantic_ai/models/huggingface.py +27 -5
- pydantic_ai/models/mistral.py +55 -21
- pydantic_ai/models/openai.py +135 -63
- pydantic_ai/profiles/openai.py +11 -0
- pydantic_ai/providers/__init__.py +3 -0
- pydantic_ai/providers/anthropic.py +8 -4
- pydantic_ai/providers/bedrock.py +9 -1
- pydantic_ai/providers/cohere.py +2 -2
- pydantic_ai/providers/gateway.py +187 -0
- pydantic_ai/providers/google.py +2 -2
- pydantic_ai/providers/google_gla.py +1 -1
- pydantic_ai/providers/groq.py +12 -5
- pydantic_ai/providers/heroku.py +2 -2
- pydantic_ai/providers/huggingface.py +1 -1
- pydantic_ai/providers/mistral.py +1 -1
- pydantic_ai/providers/openai.py +13 -0
- pydantic_ai/settings.py +1 -0
- {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/METADATA +5 -5
- {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/RECORD +37 -36
- {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/WHEEL +0 -0
- {pydantic_ai_slim-1.0.2.dist-info → pydantic_ai_slim-1.0.4.dist-info}/entry_points.txt +0 -0
- {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
|
pydantic_ai/providers/google.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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=...)`'
|
pydantic_ai/providers/groq.py
CHANGED
|
@@ -53,7 +53,7 @@ class GroqProvider(Provider[AsyncGroq]):
|
|
|
53
53
|
|
|
54
54
|
@property
|
|
55
55
|
def base_url(self) -> str:
|
|
56
|
-
return
|
|
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__(
|
|
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.
|
|
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=
|
|
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=
|
|
130
|
+
self._client = AsyncGroq(base_url=base_url, api_key=api_key, http_client=http_client)
|
pydantic_ai/providers/heroku.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
98
|
+
api_key = api_key or os.getenv('HF_TOKEN')
|
|
99
99
|
|
|
100
100
|
if api_key is None:
|
|
101
101
|
raise UserError(
|
pydantic_ai/providers/mistral.py
CHANGED
|
@@ -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.
|
|
70
|
+
api_key = api_key or os.getenv('MISTRAL_API_KEY')
|
|
71
71
|
|
|
72
72
|
if not api_key:
|
|
73
73
|
raise UserError(
|
pydantic_ai/providers/openai.py
CHANGED
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai-slim
|
|
3
|
-
Version: 1.0.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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=
|
|
11
|
-
pydantic_ai/_parts_manager.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
56
|
-
pydantic_ai/models/anthropic.py,sha256
|
|
57
|
-
pydantic_ai/models/bedrock.py,sha256=
|
|
58
|
-
pydantic_ai/models/cohere.py,sha256=
|
|
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=
|
|
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=
|
|
63
|
-
pydantic_ai/models/groq.py,sha256=
|
|
64
|
-
pydantic_ai/models/huggingface.py,sha256=
|
|
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=
|
|
68
|
-
pydantic_ai/models/openai.py,sha256=
|
|
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=
|
|
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=
|
|
87
|
-
pydantic_ai/providers/anthropic.py,sha256=
|
|
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=
|
|
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
|
|
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=
|
|
96
|
-
pydantic_ai/providers/google_gla.py,sha256=
|
|
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=
|
|
100
|
-
pydantic_ai/providers/heroku.py,sha256=
|
|
101
|
-
pydantic_ai/providers/huggingface.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
123
|
-
pydantic_ai_slim-1.0.
|
|
124
|
-
pydantic_ai_slim-1.0.
|
|
125
|
-
pydantic_ai_slim-1.0.
|
|
126
|
-
pydantic_ai_slim-1.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|