pydantic-ai-slim 0.1.10__tar.gz → 0.1.11__tar.gz
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_slim-0.1.10 → pydantic_ai_slim-0.1.11}/PKG-INFO +6 -6
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/README.md +2 -2
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/__main__.py +2 -2
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_cli.py +30 -25
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/exceptions.py +2 -2
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/messages.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/_json_schema.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/function.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/gemini.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/openai.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/__init__.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/azure.py +1 -1
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pyproject.toml +8 -2
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/.gitignore +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/__init__.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_agent_graph.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_griffe.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_output.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_parts_manager.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_pydantic.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_system_prompt.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/_utils.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/agent.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/common_tools/__init__.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/common_tools/duckduckgo.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/common_tools/tavily.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/format_as_xml.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/format_prompt.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/mcp.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/__init__.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/anthropic.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/bedrock.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/cohere.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/fallback.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/groq.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/instrumented.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/mistral.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/test.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/models/wrapper.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/anthropic.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/bedrock.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/cohere.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/deepseek.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/google_gla.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/google_vertex.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/groq.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/mistral.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/providers/openai.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/py.typed +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/result.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/settings.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/tools.py +0 -0
- {pydantic_ai_slim-0.1.10 → pydantic_ai_slim-0.1.11}/pydantic_ai/usage.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai-slim
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs, slim package
|
|
5
|
-
Author-email: Samuel Colvin <samuel@pydantic.dev>
|
|
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
|
|
7
7
|
Classifier: Development Status :: 4 - Beta
|
|
8
8
|
Classifier: Environment :: Console
|
|
@@ -29,7 +29,7 @@ Requires-Dist: exceptiongroup; python_version < '3.11'
|
|
|
29
29
|
Requires-Dist: griffe>=1.3.2
|
|
30
30
|
Requires-Dist: httpx>=0.27
|
|
31
31
|
Requires-Dist: opentelemetry-api>=1.28.0
|
|
32
|
-
Requires-Dist: pydantic-graph==0.1.
|
|
32
|
+
Requires-Dist: pydantic-graph==0.1.11
|
|
33
33
|
Requires-Dist: pydantic>=2.10
|
|
34
34
|
Requires-Dist: typing-inspection>=0.4.0
|
|
35
35
|
Provides-Extra: anthropic
|
|
@@ -45,7 +45,7 @@ Requires-Dist: cohere>=5.13.11; (platform_system != 'Emscripten') and extra == '
|
|
|
45
45
|
Provides-Extra: duckduckgo
|
|
46
46
|
Requires-Dist: duckduckgo-search>=7.0.0; extra == 'duckduckgo'
|
|
47
47
|
Provides-Extra: evals
|
|
48
|
-
Requires-Dist: pydantic-evals==0.1.
|
|
48
|
+
Requires-Dist: pydantic-evals==0.1.11; extra == 'evals'
|
|
49
49
|
Provides-Extra: groq
|
|
50
50
|
Requires-Dist: groq>=0.15.0; extra == 'groq'
|
|
51
51
|
Provides-Extra: logfire
|
|
@@ -67,8 +67,8 @@ Description-Content-Type: text/markdown
|
|
|
67
67
|
|
|
68
68
|
[](https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain)
|
|
69
69
|
[](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic-ai)
|
|
70
|
-
[](https://pypi.python.org/pypi/pydantic-ai)
|
|
71
|
-
[](https://github.com/pydantic/pydantic-ai)
|
|
70
|
+
[](https://pypi.python.org/pypi/pydantic-ai-slim)
|
|
71
|
+
[](https://github.com/pydantic/pydantic-ai)
|
|
72
72
|
[](https://github.com/pydantic/pydantic-ai/blob/main/LICENSE)
|
|
73
73
|
|
|
74
74
|
PydanticAI core logic with minimal required dependencies.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain)
|
|
4
4
|
[](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic-ai)
|
|
5
|
-
[](https://pypi.python.org/pypi/pydantic-ai)
|
|
6
|
-
[](https://github.com/pydantic/pydantic-ai)
|
|
5
|
+
[](https://pypi.python.org/pypi/pydantic-ai-slim)
|
|
6
|
+
[](https://github.com/pydantic/pydantic-ai)
|
|
7
7
|
[](https://github.com/pydantic/pydantic-ai/blob/main/LICENSE)
|
|
8
8
|
|
|
9
9
|
PydanticAI core logic with minimal required dependencies.
|
|
@@ -7,16 +7,16 @@ from asyncio import CancelledError
|
|
|
7
7
|
from collections.abc import Sequence
|
|
8
8
|
from contextlib import ExitStack
|
|
9
9
|
from datetime import datetime, timezone
|
|
10
|
-
from importlib.metadata import version
|
|
11
10
|
from pathlib import Path
|
|
12
11
|
from typing import Any, cast
|
|
13
12
|
|
|
14
13
|
from typing_inspection.introspection import get_literal_values
|
|
15
14
|
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
15
|
+
from . import __version__
|
|
16
|
+
from .agent import Agent
|
|
17
|
+
from .exceptions import UserError
|
|
18
|
+
from .messages import ModelMessage
|
|
19
|
+
from .models import KnownModelName, infer_model
|
|
20
20
|
|
|
21
21
|
try:
|
|
22
22
|
import argcomplete
|
|
@@ -39,7 +39,7 @@ except ImportError as _import_error:
|
|
|
39
39
|
) from _import_error
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
__all__ = 'cli', 'cli_exit'
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class SimpleCodeBlock(CodeBlock):
|
|
@@ -83,14 +83,20 @@ The current date and time is {datetime.now()} {tzname}.
|
|
|
83
83
|
The user is running {sys.platform}."""
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
def
|
|
86
|
+
def cli_exit(prog_name: str = 'pai'): # pragma: no cover
|
|
87
|
+
"""Run the CLI and exit."""
|
|
88
|
+
sys.exit(cli(prog_name=prog_name))
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def cli(args_list: Sequence[str] | None = None, *, prog_name: str = 'pai') -> int:
|
|
92
|
+
"""Run the CLI and return the exit code for the process."""
|
|
87
93
|
parser = argparse.ArgumentParser(
|
|
88
|
-
prog=
|
|
94
|
+
prog=prog_name,
|
|
89
95
|
description=f"""\
|
|
90
96
|
PydanticAI CLI v{__version__}\n\n
|
|
91
97
|
|
|
92
|
-
Special
|
|
93
|
-
* `/exit` - exit the interactive mode
|
|
98
|
+
Special prompts:
|
|
99
|
+
* `/exit` - exit the interactive mode (ctrl-c and ctrl-d also work)
|
|
94
100
|
* `/markdown` - show the last markdown output of the last question
|
|
95
101
|
* `/multiline` - toggle multiline mode
|
|
96
102
|
""",
|
|
@@ -101,7 +107,7 @@ Special prompt:
|
|
|
101
107
|
'-m',
|
|
102
108
|
'--model',
|
|
103
109
|
nargs='?',
|
|
104
|
-
help='Model to use, in format "<provider>:<model>" e.g. "openai:gpt-4o". Defaults to "openai:gpt-4o".',
|
|
110
|
+
help='Model to use, in format "<provider>:<model>" e.g. "openai:gpt-4o" or "anthropic:claude-3-7-sonnet-latest". Defaults to "openai:gpt-4o".',
|
|
105
111
|
default='openai:gpt-4o',
|
|
106
112
|
)
|
|
107
113
|
# we don't want to autocomplete or list models that don't include the provider,
|
|
@@ -118,10 +124,10 @@ Special prompt:
|
|
|
118
124
|
'-t',
|
|
119
125
|
'--code-theme',
|
|
120
126
|
nargs='?',
|
|
121
|
-
help='Which colors to use for code, can be "dark", "light" or any theme from pygments.org/styles/. Defaults to "
|
|
122
|
-
default='
|
|
127
|
+
help='Which colors to use for code, can be "dark", "light" or any theme from pygments.org/styles/. Defaults to "dark" which works well on dark terminals.',
|
|
128
|
+
default='dark',
|
|
123
129
|
)
|
|
124
|
-
parser.add_argument('--no-stream', action='store_true', help='
|
|
130
|
+
parser.add_argument('--no-stream', action='store_true', help='Disable streaming from the model')
|
|
125
131
|
parser.add_argument('--version', action='store_true', help='Show version and exit')
|
|
126
132
|
|
|
127
133
|
argcomplete.autocomplete(parser)
|
|
@@ -129,7 +135,8 @@ Special prompt:
|
|
|
129
135
|
|
|
130
136
|
console = Console()
|
|
131
137
|
console.print(
|
|
132
|
-
f'[green]
|
|
138
|
+
f'[green]{prog_name} - PydanticAI CLI v{__version__} using[/green] [magenta]{args.model}[/magenta]',
|
|
139
|
+
highlight=False,
|
|
133
140
|
)
|
|
134
141
|
if args.version:
|
|
135
142
|
return 0
|
|
@@ -160,23 +167,25 @@ Special prompt:
|
|
|
160
167
|
pass
|
|
161
168
|
return 0
|
|
162
169
|
|
|
163
|
-
history = Path.home() / '.
|
|
170
|
+
history = Path.home() / f'.{prog_name}-prompt-history.txt'
|
|
164
171
|
# doing this instead of `PromptSession[Any](history=` allows mocking of PromptSession in tests
|
|
165
172
|
session: PromptSession[Any] = PromptSession(history=FileHistory(str(history)))
|
|
166
173
|
try:
|
|
167
|
-
return asyncio.run(run_chat(session, stream, cli_agent, console, code_theme))
|
|
174
|
+
return asyncio.run(run_chat(session, stream, cli_agent, console, code_theme, prog_name))
|
|
168
175
|
except KeyboardInterrupt: # pragma: no cover
|
|
169
176
|
return 0
|
|
170
177
|
|
|
171
178
|
|
|
172
|
-
async def run_chat(
|
|
179
|
+
async def run_chat(
|
|
180
|
+
session: PromptSession[Any], stream: bool, agent: Agent, console: Console, code_theme: str, prog_name: str
|
|
181
|
+
) -> int:
|
|
173
182
|
multiline = False
|
|
174
183
|
messages: list[ModelMessage] = []
|
|
175
184
|
|
|
176
185
|
while True:
|
|
177
186
|
try:
|
|
178
187
|
auto_suggest = CustomAutoSuggest(['/markdown', '/multiline', '/exit'])
|
|
179
|
-
text = await session.prompt_async('
|
|
188
|
+
text = await session.prompt_async(f'{prog_name} ➤ ', auto_suggest=auto_suggest, multiline=multiline)
|
|
180
189
|
except (KeyboardInterrupt, EOFError): # pragma: no cover
|
|
181
190
|
return 0
|
|
182
191
|
|
|
@@ -214,14 +223,14 @@ async def ask_agent(
|
|
|
214
223
|
|
|
215
224
|
with status, ExitStack() as stack:
|
|
216
225
|
async with agent.iter(prompt, message_history=messages) as agent_run:
|
|
217
|
-
live = Live('', refresh_per_second=15, console=console, vertical_overflow='
|
|
226
|
+
live = Live('', refresh_per_second=15, console=console, vertical_overflow='ellipsis')
|
|
218
227
|
async for node in agent_run:
|
|
219
228
|
if Agent.is_model_request_node(node):
|
|
220
229
|
async with node.stream(agent_run.ctx) as handle_stream:
|
|
221
230
|
status.stop() # stopping multiple times is idempotent
|
|
222
231
|
stack.enter_context(live) # entering multiple times is idempotent
|
|
223
232
|
|
|
224
|
-
async for content in handle_stream.stream_output():
|
|
233
|
+
async for content in handle_stream.stream_output(debounce_by=None):
|
|
225
234
|
live.update(Markdown(content, code_theme=code_theme))
|
|
226
235
|
|
|
227
236
|
assert agent_run.result is not None
|
|
@@ -282,7 +291,3 @@ def handle_slash_command(
|
|
|
282
291
|
else:
|
|
283
292
|
console.print(f'[red]Unknown command[/red] [magenta]`{ident_prompt}`[/magenta]')
|
|
284
293
|
return None, multiline
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
def app(): # pragma: no cover
|
|
288
|
-
sys.exit(cli())
|
|
@@ -3,9 +3,9 @@ from __future__ import annotations as _annotations
|
|
|
3
3
|
import json
|
|
4
4
|
import sys
|
|
5
5
|
|
|
6
|
-
if sys.version_info < (3, 11):
|
|
6
|
+
if sys.version_info < (3, 11):
|
|
7
7
|
from exceptiongroup import ExceptionGroup
|
|
8
|
-
else:
|
|
8
|
+
else:
|
|
9
9
|
ExceptionGroup = ExceptionGroup
|
|
10
10
|
|
|
11
11
|
__all__ = (
|
|
@@ -81,7 +81,7 @@ class VideoUrl:
|
|
|
81
81
|
"""Type identifier, this is available on all parts as a discriminator."""
|
|
82
82
|
|
|
83
83
|
@property
|
|
84
|
-
def media_type(self) -> VideoMediaType: # pragma: no cover
|
|
84
|
+
def media_type(self) -> VideoMediaType: # pragma: lax no cover
|
|
85
85
|
"""Return the media type of the video, based on the url."""
|
|
86
86
|
if self.url.endswith('.mkv'):
|
|
87
87
|
return 'video/x-matroska'
|
|
@@ -99,7 +99,7 @@ class WalkJsonSchema(ABC):
|
|
|
99
99
|
if (additional_properties := schema.get('additionalProperties')) is not None:
|
|
100
100
|
if isinstance(additional_properties, bool):
|
|
101
101
|
schema['additionalProperties'] = additional_properties
|
|
102
|
-
else:
|
|
102
|
+
else:
|
|
103
103
|
schema['additionalProperties'] = self._handle(additional_properties)
|
|
104
104
|
|
|
105
105
|
if (pattern_properties := schema.get('patternProperties')) is not None:
|
|
@@ -282,7 +282,7 @@ def _estimate_string_tokens(content: str | Sequence[UserContent]) -> int:
|
|
|
282
282
|
return 0
|
|
283
283
|
if isinstance(content, str):
|
|
284
284
|
return len(re.split(r'[\s",.:]+', content.strip()))
|
|
285
|
-
else:
|
|
285
|
+
else:
|
|
286
286
|
tokens = 0
|
|
287
287
|
for part in content:
|
|
288
288
|
if isinstance(part, str):
|
|
@@ -805,7 +805,7 @@ class _GeminiJsonSchema(WalkJsonSchema):
|
|
|
805
805
|
additional_properties = schema.pop(
|
|
806
806
|
'additionalProperties', None
|
|
807
807
|
) # don't pop yet so it's included in the warning
|
|
808
|
-
if additional_properties:
|
|
808
|
+
if additional_properties:
|
|
809
809
|
original_schema = {**schema, 'additionalProperties': additional_properties}
|
|
810
810
|
warnings.warn(
|
|
811
811
|
'`additionalProperties` is not supported by Gemini; it will be removed from the tool JSON schema.'
|
|
@@ -770,7 +770,7 @@ class OpenAIResponsesModel(Model):
|
|
|
770
770
|
file_data=f'data:{item.media_type};base64,{base64_encoded}',
|
|
771
771
|
)
|
|
772
772
|
)
|
|
773
|
-
elif isinstance(item, DocumentUrl):
|
|
773
|
+
elif isinstance(item, DocumentUrl):
|
|
774
774
|
client = cached_async_http_client()
|
|
775
775
|
response = await client.get(item.url)
|
|
776
776
|
response.raise_for_status()
|
|
@@ -65,7 +65,7 @@ def infer_provider(provider: str) -> Provider[Any]:
|
|
|
65
65
|
|
|
66
66
|
return GoogleGLAProvider()
|
|
67
67
|
# NOTE: We don't test because there are many ways the `boto3.client` can retrieve the credentials.
|
|
68
|
-
elif provider == 'bedrock':
|
|
68
|
+
elif provider == 'bedrock':
|
|
69
69
|
from .bedrock import BedrockProvider
|
|
70
70
|
|
|
71
71
|
return BedrockProvider()
|
|
@@ -82,7 +82,7 @@ class AzureProvider(Provider[AsyncOpenAI]):
|
|
|
82
82
|
self._client = openai_client
|
|
83
83
|
else:
|
|
84
84
|
azure_endpoint = azure_endpoint or os.getenv('AZURE_OPENAI_ENDPOINT')
|
|
85
|
-
if not azure_endpoint:
|
|
85
|
+
if not azure_endpoint:
|
|
86
86
|
raise UserError(
|
|
87
87
|
'Must provide one of the `azure_endpoint` argument or the `AZURE_OPENAI_ENDPOINT` environment variable'
|
|
88
88
|
)
|
|
@@ -14,7 +14,12 @@ bump = true
|
|
|
14
14
|
name = "pydantic-ai-slim"
|
|
15
15
|
dynamic = ["version", "dependencies", "optional-dependencies"]
|
|
16
16
|
description = "Agent Framework / shim to use Pydantic with LLMs, slim package"
|
|
17
|
-
authors = [
|
|
17
|
+
authors = [
|
|
18
|
+
{ name = "Samuel Colvin", email = "samuel@pydantic.dev" },
|
|
19
|
+
{ name = "Marcelo Trylesinski", email = "marcelotryle@gmail.com" },
|
|
20
|
+
{ name = "David Montague", email = "david@pydantic.dev" },
|
|
21
|
+
{ name = "Alex Hall", email = "alex@pydantic.dev" },
|
|
22
|
+
]
|
|
18
23
|
license = "MIT"
|
|
19
24
|
readme = "README.md"
|
|
20
25
|
classifiers = [
|
|
@@ -87,13 +92,14 @@ dev = [
|
|
|
87
92
|
"pytest-recording>=0.13.2",
|
|
88
93
|
"diff-cover>=9.2.0",
|
|
89
94
|
"boto3-stubs[bedrock-runtime]",
|
|
95
|
+
"strict-no-cover>=0.1.1",
|
|
90
96
|
]
|
|
91
97
|
|
|
92
98
|
[tool.hatch.metadata]
|
|
93
99
|
allow-direct-references = true
|
|
94
100
|
|
|
95
101
|
[project.scripts]
|
|
96
|
-
pai = "pydantic_ai._cli:
|
|
102
|
+
pai = "pydantic_ai._cli:cli_exit" # TODO remove this when clai has been out for a while
|
|
97
103
|
|
|
98
104
|
[tool.hatch.build.targets.wheel]
|
|
99
105
|
packages = ["pydantic_ai"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|