pydantic-ai-slim 1.0.15__tar.gz → 1.0.16__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-1.0.15 → pydantic_ai_slim-1.0.16}/PKG-INFO +4 -4
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_agent_graph.py +13 -12
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_cli.py +3 -3
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/__init__.py +18 -7
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/abstract.py +27 -26
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/wrapper.py +7 -4
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/direct.py +9 -9
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_agent.py +21 -18
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_agent.py +19 -16
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/format_prompt.py +6 -4
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/messages.py +66 -42
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/anthropic.py +20 -19
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/openai.py +9 -1
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/result.py +5 -5
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/usage.py +35 -1
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pyproject.toml +1 -1
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/.gitignore +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/LICENSE +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/README.md +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/__main__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_a2a.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_function_schema.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_griffe.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_instrumentation.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_json_schema.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_mcp.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_otel_messages.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_output.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_parts_manager.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_run_context.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_system_prompt.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_thinking_part.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_tool_manager.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_utils.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ag_ui.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/builtin_tools.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/duckduckgo.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/tavily.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_mcp_server.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_model.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_utils.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_function_toolset.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_logfire.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_mcp_server.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_model.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_run_context.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_toolset.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/exceptions.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/aci.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/langchain.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/mcp.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/bedrock.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/cohere.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/fallback.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/function.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/gemini.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/google.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/groq.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/huggingface.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/instrumented.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/mcp_sampling.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/mistral.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/test.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/wrapper.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/output.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/amazon.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/anthropic.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/cohere.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/deepseek.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/google.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/grok.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/groq.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/harmony.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/meta.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/mistral.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/moonshotai.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/openai.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/qwen.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/anthropic.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/azure.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/bedrock.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/cerebras.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/cohere.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/deepseek.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/fireworks.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/gateway.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/github.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google_gla.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google_vertex.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/grok.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/groq.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/heroku.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/huggingface.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/litellm.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/mistral.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/moonshotai.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/ollama.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/openai.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/openrouter.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/together.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/vercel.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/py.typed +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/retries.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/run.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/settings.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/tools.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/__init__.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/_dynamic.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/abstract.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/approval_required.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/combined.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/external.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/filtered.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/function.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/prefixed.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/prepared.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/renamed.py +0 -0
- {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/wrapper.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai-slim
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.16
|
|
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
|
|
@@ -29,11 +29,11 @@ Classifier: Topic :: Internet
|
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Requires-Python: >=3.10
|
|
31
31
|
Requires-Dist: exceptiongroup; python_version < '3.11'
|
|
32
|
-
Requires-Dist: genai-prices>=0.0.
|
|
32
|
+
Requires-Dist: genai-prices>=0.0.30
|
|
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.16
|
|
37
37
|
Requires-Dist: pydantic>=2.10
|
|
38
38
|
Requires-Dist: typing-inspection>=0.4.0
|
|
39
39
|
Provides-Extra: a2a
|
|
@@ -57,7 +57,7 @@ Requires-Dist: dbos>=1.14.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.16; extra == 'evals'
|
|
61
61
|
Provides-Extra: google
|
|
62
62
|
Requires-Dist: google-genai>=1.31.0; extra == 'google'
|
|
63
63
|
Provides-Extra: groq
|
|
@@ -795,16 +795,14 @@ async def process_tool_calls( # noqa: C901
|
|
|
795
795
|
# Then, we handle function tool calls
|
|
796
796
|
calls_to_run: list[_messages.ToolCallPart] = []
|
|
797
797
|
if final_result and ctx.deps.end_strategy == 'early':
|
|
798
|
-
|
|
799
|
-
|
|
798
|
+
for call in tool_calls_by_kind['function']:
|
|
799
|
+
output_parts.append(
|
|
800
800
|
_messages.ToolReturnPart(
|
|
801
801
|
tool_name=call.tool_name,
|
|
802
802
|
content='Tool not executed - a final result was already processed.',
|
|
803
803
|
tool_call_id=call.tool_call_id,
|
|
804
804
|
)
|
|
805
|
-
|
|
806
|
-
]
|
|
807
|
-
)
|
|
805
|
+
)
|
|
808
806
|
else:
|
|
809
807
|
calls_to_run.extend(tool_calls_by_kind['function'])
|
|
810
808
|
|
|
@@ -850,14 +848,17 @@ async def process_tool_calls( # noqa: C901
|
|
|
850
848
|
if tool_call_results is None:
|
|
851
849
|
calls = [*tool_calls_by_kind['external'], *tool_calls_by_kind['unapproved']]
|
|
852
850
|
if final_result:
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
851
|
+
# If the run was already determined to end on deferred tool calls,
|
|
852
|
+
# we shouldn't insert return parts as the deferred tools will still get a real result.
|
|
853
|
+
if not isinstance(final_result.output, _output.DeferredToolRequests):
|
|
854
|
+
for call in calls:
|
|
855
|
+
output_parts.append(
|
|
856
|
+
_messages.ToolReturnPart(
|
|
857
|
+
tool_name=call.tool_name,
|
|
858
|
+
content='Tool not executed - a final result was already processed.',
|
|
859
|
+
tool_call_id=call.tool_call_id,
|
|
860
|
+
)
|
|
859
861
|
)
|
|
860
|
-
)
|
|
861
862
|
elif calls:
|
|
862
863
|
deferred_calls['external'].extend(tool_calls_by_kind['external'])
|
|
863
864
|
deferred_calls['unapproved'].extend(tool_calls_by_kind['unapproved'])
|
|
@@ -228,7 +228,7 @@ async def run_chat(
|
|
|
228
228
|
prog_name: str,
|
|
229
229
|
config_dir: Path | None = None,
|
|
230
230
|
deps: AgentDepsT = None,
|
|
231
|
-
message_history:
|
|
231
|
+
message_history: Sequence[ModelMessage] | None = None,
|
|
232
232
|
) -> int:
|
|
233
233
|
prompt_history_path = (config_dir or PYDANTIC_AI_HOME) / PROMPT_HISTORY_FILENAME
|
|
234
234
|
prompt_history_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -236,7 +236,7 @@ async def run_chat(
|
|
|
236
236
|
session: PromptSession[Any] = PromptSession(history=FileHistory(str(prompt_history_path)))
|
|
237
237
|
|
|
238
238
|
multiline = False
|
|
239
|
-
messages: list[ModelMessage] = message_history
|
|
239
|
+
messages: list[ModelMessage] = list(message_history) if message_history else []
|
|
240
240
|
|
|
241
241
|
while True:
|
|
242
242
|
try:
|
|
@@ -272,7 +272,7 @@ async def ask_agent(
|
|
|
272
272
|
console: Console,
|
|
273
273
|
code_theme: str,
|
|
274
274
|
deps: AgentDepsT = None,
|
|
275
|
-
messages:
|
|
275
|
+
messages: Sequence[ModelMessage] | None = None,
|
|
276
276
|
) -> list[ModelMessage]:
|
|
277
277
|
status = Status('[dim]Working on it…[/dim]', console=console)
|
|
278
278
|
|
|
@@ -344,6 +344,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
344
344
|
|
|
345
345
|
self._event_stream_handler = event_stream_handler
|
|
346
346
|
|
|
347
|
+
self._override_name: ContextVar[_utils.Option[str]] = ContextVar('_override_name', default=None)
|
|
347
348
|
self._override_deps: ContextVar[_utils.Option[AgentDepsT]] = ContextVar('_override_deps', default=None)
|
|
348
349
|
self._override_model: ContextVar[_utils.Option[models.Model]] = ContextVar('_override_model', default=None)
|
|
349
350
|
self._override_toolsets: ContextVar[_utils.Option[Sequence[AbstractToolset[AgentDepsT]]]] = ContextVar(
|
|
@@ -384,7 +385,8 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
384
385
|
|
|
385
386
|
If `None`, we try to infer the agent name from the call frame when the agent is first run.
|
|
386
387
|
"""
|
|
387
|
-
|
|
388
|
+
name_ = self._override_name.get()
|
|
389
|
+
return name_.value if name_ else self._name
|
|
388
390
|
|
|
389
391
|
@name.setter
|
|
390
392
|
def name(self, value: str | None) -> None:
|
|
@@ -415,7 +417,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
415
417
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
416
418
|
*,
|
|
417
419
|
output_type: None = None,
|
|
418
|
-
message_history:
|
|
420
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
419
421
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
420
422
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
421
423
|
deps: AgentDepsT = None,
|
|
@@ -432,7 +434,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
432
434
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
433
435
|
*,
|
|
434
436
|
output_type: OutputSpec[RunOutputDataT],
|
|
435
|
-
message_history:
|
|
437
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
436
438
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
437
439
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
438
440
|
deps: AgentDepsT = None,
|
|
@@ -449,7 +451,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
449
451
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
450
452
|
*,
|
|
451
453
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
452
|
-
message_history:
|
|
454
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
453
455
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
454
456
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
455
457
|
deps: AgentDepsT = None,
|
|
@@ -566,7 +568,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
566
568
|
# Build the initial state
|
|
567
569
|
usage = usage or _usage.RunUsage()
|
|
568
570
|
state = _agent_graph.GraphAgentState(
|
|
569
|
-
message_history=message_history
|
|
571
|
+
message_history=list(message_history) if message_history else [],
|
|
570
572
|
usage=usage,
|
|
571
573
|
retries=0,
|
|
572
574
|
run_step=0,
|
|
@@ -690,7 +692,7 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
690
692
|
}
|
|
691
693
|
else:
|
|
692
694
|
attrs = {
|
|
693
|
-
'pydantic_ai.all_messages': json.dumps(settings.messages_to_otel_messages(state.message_history)),
|
|
695
|
+
'pydantic_ai.all_messages': json.dumps(settings.messages_to_otel_messages(list(state.message_history))),
|
|
694
696
|
**settings.system_instructions_attributes(literal_instructions),
|
|
695
697
|
}
|
|
696
698
|
|
|
@@ -712,24 +714,31 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
712
714
|
def override(
|
|
713
715
|
self,
|
|
714
716
|
*,
|
|
717
|
+
name: str | _utils.Unset = _utils.UNSET,
|
|
715
718
|
deps: AgentDepsT | _utils.Unset = _utils.UNSET,
|
|
716
719
|
model: models.Model | models.KnownModelName | str | _utils.Unset = _utils.UNSET,
|
|
717
720
|
toolsets: Sequence[AbstractToolset[AgentDepsT]] | _utils.Unset = _utils.UNSET,
|
|
718
721
|
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] | _utils.Unset = _utils.UNSET,
|
|
719
722
|
instructions: Instructions[AgentDepsT] | _utils.Unset = _utils.UNSET,
|
|
720
723
|
) -> Iterator[None]:
|
|
721
|
-
"""Context manager to temporarily override agent dependencies, model, toolsets, tools, or instructions.
|
|
724
|
+
"""Context manager to temporarily override agent name, dependencies, model, toolsets, tools, or instructions.
|
|
722
725
|
|
|
723
726
|
This is particularly useful when testing.
|
|
724
727
|
You can find an example of this [here](../testing.md#overriding-model-via-pytest-fixtures).
|
|
725
728
|
|
|
726
729
|
Args:
|
|
730
|
+
name: The name to use instead of the name passed to the agent constructor and agent run.
|
|
727
731
|
deps: The dependencies to use instead of the dependencies passed to the agent run.
|
|
728
732
|
model: The model to use instead of the model passed to the agent run.
|
|
729
733
|
toolsets: The toolsets to use instead of the toolsets passed to the agent constructor and agent run.
|
|
730
734
|
tools: The tools to use instead of the tools registered with the agent.
|
|
731
735
|
instructions: The instructions to use instead of the instructions registered with the agent.
|
|
732
736
|
"""
|
|
737
|
+
if _utils.is_set(name):
|
|
738
|
+
name_token = self._override_name.set(_utils.Some(name))
|
|
739
|
+
else:
|
|
740
|
+
name_token = None
|
|
741
|
+
|
|
733
742
|
if _utils.is_set(deps):
|
|
734
743
|
deps_token = self._override_deps.set(_utils.Some(deps))
|
|
735
744
|
else:
|
|
@@ -759,6 +768,8 @@ class Agent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
759
768
|
try:
|
|
760
769
|
yield
|
|
761
770
|
finally:
|
|
771
|
+
if name_token is not None:
|
|
772
|
+
self._override_name.reset(name_token)
|
|
762
773
|
if deps_token is not None:
|
|
763
774
|
self._override_deps.reset(deps_token)
|
|
764
775
|
if model_token is not None:
|
|
@@ -128,7 +128,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
128
128
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
129
129
|
*,
|
|
130
130
|
output_type: None = None,
|
|
131
|
-
message_history:
|
|
131
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
132
132
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
133
133
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
134
134
|
deps: AgentDepsT = None,
|
|
@@ -146,7 +146,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
146
146
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
147
147
|
*,
|
|
148
148
|
output_type: OutputSpec[RunOutputDataT],
|
|
149
|
-
message_history:
|
|
149
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
150
150
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
151
151
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
152
152
|
deps: AgentDepsT = None,
|
|
@@ -163,7 +163,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
163
163
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
164
164
|
*,
|
|
165
165
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
166
|
-
message_history:
|
|
166
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
167
167
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
168
168
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
169
169
|
deps: AgentDepsT = None,
|
|
@@ -242,7 +242,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
242
242
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
243
243
|
*,
|
|
244
244
|
output_type: None = None,
|
|
245
|
-
message_history:
|
|
245
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
246
246
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
247
247
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
248
248
|
deps: AgentDepsT = None,
|
|
@@ -260,7 +260,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
260
260
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
261
261
|
*,
|
|
262
262
|
output_type: OutputSpec[RunOutputDataT],
|
|
263
|
-
message_history:
|
|
263
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
264
264
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
265
265
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
266
266
|
deps: AgentDepsT = None,
|
|
@@ -277,7 +277,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
277
277
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
278
278
|
*,
|
|
279
279
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
280
|
-
message_history:
|
|
280
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
281
281
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
282
282
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
283
283
|
deps: AgentDepsT = None,
|
|
@@ -348,7 +348,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
348
348
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
349
349
|
*,
|
|
350
350
|
output_type: None = None,
|
|
351
|
-
message_history:
|
|
351
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
352
352
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
353
353
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
354
354
|
deps: AgentDepsT = None,
|
|
@@ -366,7 +366,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
366
366
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
367
367
|
*,
|
|
368
368
|
output_type: OutputSpec[RunOutputDataT],
|
|
369
|
-
message_history:
|
|
369
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
370
370
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
371
371
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
372
372
|
deps: AgentDepsT = None,
|
|
@@ -384,7 +384,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
384
384
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
385
385
|
*,
|
|
386
386
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
387
|
-
message_history:
|
|
387
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
388
388
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
389
389
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
390
390
|
deps: AgentDepsT = None,
|
|
@@ -489,7 +489,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
489
489
|
|
|
490
490
|
if final_result_event is not None:
|
|
491
491
|
final_result = FinalResult(
|
|
492
|
-
|
|
492
|
+
None, final_result_event.tool_name, final_result_event.tool_call_id
|
|
493
493
|
)
|
|
494
494
|
if yielded:
|
|
495
495
|
raise exceptions.AgentRunError('Agent run produced final results') # pragma: no cover
|
|
@@ -503,16 +503,15 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
503
503
|
The model response will have been added to messages by now
|
|
504
504
|
by `StreamedRunResult._marked_completed`.
|
|
505
505
|
"""
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
]
|
|
506
|
+
nonlocal final_result
|
|
507
|
+
final_result = FinalResult(
|
|
508
|
+
await stream.get_output(), final_result.tool_name, final_result.tool_call_id
|
|
509
|
+
)
|
|
511
510
|
|
|
512
511
|
parts: list[_messages.ModelRequestPart] = []
|
|
513
512
|
async for _event in _agent_graph.process_tool_calls(
|
|
514
513
|
tool_manager=graph_ctx.deps.tool_manager,
|
|
515
|
-
tool_calls=tool_calls,
|
|
514
|
+
tool_calls=stream.response.tool_calls,
|
|
516
515
|
tool_call_results=None,
|
|
517
516
|
final_result=final_result,
|
|
518
517
|
ctx=graph_ctx,
|
|
@@ -560,7 +559,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
560
559
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
561
560
|
*,
|
|
562
561
|
output_type: None = None,
|
|
563
|
-
message_history:
|
|
562
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
564
563
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
565
564
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
566
565
|
deps: AgentDepsT = None,
|
|
@@ -577,7 +576,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
577
576
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
578
577
|
*,
|
|
579
578
|
output_type: OutputSpec[RunOutputDataT],
|
|
580
|
-
message_history:
|
|
579
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
581
580
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
582
581
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
583
582
|
deps: AgentDepsT = None,
|
|
@@ -593,7 +592,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
593
592
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
594
593
|
*,
|
|
595
594
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
596
|
-
message_history:
|
|
595
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
597
596
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
598
597
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
599
598
|
deps: AgentDepsT = None,
|
|
@@ -674,7 +673,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
674
673
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
675
674
|
*,
|
|
676
675
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
677
|
-
message_history:
|
|
676
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
678
677
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
679
678
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
680
679
|
deps: AgentDepsT = None,
|
|
@@ -726,7 +725,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
726
725
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
727
726
|
*,
|
|
728
727
|
output_type: None = None,
|
|
729
|
-
message_history:
|
|
728
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
730
729
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
731
730
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
732
731
|
deps: AgentDepsT = None,
|
|
@@ -743,7 +742,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
743
742
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
744
743
|
*,
|
|
745
744
|
output_type: OutputSpec[RunOutputDataT],
|
|
746
|
-
message_history:
|
|
745
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
747
746
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
748
747
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
749
748
|
deps: AgentDepsT = None,
|
|
@@ -761,7 +760,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
761
760
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
762
761
|
*,
|
|
763
762
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
764
|
-
message_history:
|
|
763
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
765
764
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
766
765
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
767
766
|
deps: AgentDepsT = None,
|
|
@@ -854,18 +853,20 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
854
853
|
def override(
|
|
855
854
|
self,
|
|
856
855
|
*,
|
|
856
|
+
name: str | _utils.Unset = _utils.UNSET,
|
|
857
857
|
deps: AgentDepsT | _utils.Unset = _utils.UNSET,
|
|
858
858
|
model: models.Model | models.KnownModelName | str | _utils.Unset = _utils.UNSET,
|
|
859
859
|
toolsets: Sequence[AbstractToolset[AgentDepsT]] | _utils.Unset = _utils.UNSET,
|
|
860
860
|
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] | _utils.Unset = _utils.UNSET,
|
|
861
861
|
instructions: Instructions[AgentDepsT] | _utils.Unset = _utils.UNSET,
|
|
862
862
|
) -> Iterator[None]:
|
|
863
|
-
"""Context manager to temporarily override agent dependencies, model, toolsets, tools, or instructions.
|
|
863
|
+
"""Context manager to temporarily override agent name, dependencies, model, toolsets, tools, or instructions.
|
|
864
864
|
|
|
865
865
|
This is particularly useful when testing.
|
|
866
866
|
You can find an example of this [here](../testing.md#overriding-model-via-pytest-fixtures).
|
|
867
867
|
|
|
868
868
|
Args:
|
|
869
|
+
name: The name to use instead of the name passed to the agent constructor and agent run.
|
|
869
870
|
deps: The dependencies to use instead of the dependencies passed to the agent run.
|
|
870
871
|
model: The model to use instead of the model passed to the agent run.
|
|
871
872
|
toolsets: The toolsets to use instead of the toolsets passed to the agent constructor and agent run.
|
|
@@ -1112,7 +1113,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
1112
1113
|
self: Self,
|
|
1113
1114
|
deps: AgentDepsT = None,
|
|
1114
1115
|
prog_name: str = 'pydantic-ai',
|
|
1115
|
-
message_history:
|
|
1116
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
1116
1117
|
) -> None:
|
|
1117
1118
|
"""Run the agent in a CLI chat interface.
|
|
1118
1119
|
|
|
@@ -1149,7 +1150,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
|
|
|
1149
1150
|
self: Self,
|
|
1150
1151
|
deps: AgentDepsT = None,
|
|
1151
1152
|
prog_name: str = 'pydantic-ai',
|
|
1152
|
-
message_history:
|
|
1153
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
1153
1154
|
) -> None:
|
|
1154
1155
|
"""Run the agent in a CLI chat interface with the non-async interface.
|
|
1155
1156
|
|
|
@@ -72,7 +72,7 @@ class WrapperAgent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
72
72
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
73
73
|
*,
|
|
74
74
|
output_type: None = None,
|
|
75
|
-
message_history:
|
|
75
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
76
76
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
77
77
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
78
78
|
deps: AgentDepsT = None,
|
|
@@ -89,7 +89,7 @@ class WrapperAgent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
89
89
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
90
90
|
*,
|
|
91
91
|
output_type: OutputSpec[RunOutputDataT],
|
|
92
|
-
message_history:
|
|
92
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
93
93
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
94
94
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
95
95
|
deps: AgentDepsT = None,
|
|
@@ -106,7 +106,7 @@ class WrapperAgent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
106
106
|
user_prompt: str | Sequence[_messages.UserContent] | None = None,
|
|
107
107
|
*,
|
|
108
108
|
output_type: OutputSpec[RunOutputDataT] | None = None,
|
|
109
|
-
message_history:
|
|
109
|
+
message_history: Sequence[_messages.ModelMessage] | None = None,
|
|
110
110
|
deferred_tool_results: DeferredToolResults | None = None,
|
|
111
111
|
model: models.Model | models.KnownModelName | str | None = None,
|
|
112
112
|
deps: AgentDepsT = None,
|
|
@@ -210,18 +210,20 @@ class WrapperAgent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
210
210
|
def override(
|
|
211
211
|
self,
|
|
212
212
|
*,
|
|
213
|
+
name: str | _utils.Unset = _utils.UNSET,
|
|
213
214
|
deps: AgentDepsT | _utils.Unset = _utils.UNSET,
|
|
214
215
|
model: models.Model | models.KnownModelName | str | _utils.Unset = _utils.UNSET,
|
|
215
216
|
toolsets: Sequence[AbstractToolset[AgentDepsT]] | _utils.Unset = _utils.UNSET,
|
|
216
217
|
tools: Sequence[Tool[AgentDepsT] | ToolFuncEither[AgentDepsT, ...]] | _utils.Unset = _utils.UNSET,
|
|
217
218
|
instructions: Instructions[AgentDepsT] | _utils.Unset = _utils.UNSET,
|
|
218
219
|
) -> Iterator[None]:
|
|
219
|
-
"""Context manager to temporarily override agent dependencies, model, toolsets, tools, or instructions.
|
|
220
|
+
"""Context manager to temporarily override agent name, dependencies, model, toolsets, tools, or instructions.
|
|
220
221
|
|
|
221
222
|
This is particularly useful when testing.
|
|
222
223
|
You can find an example of this [here](../testing.md#overriding-model-via-pytest-fixtures).
|
|
223
224
|
|
|
224
225
|
Args:
|
|
226
|
+
name: The name to use instead of the name passed to the agent constructor and agent run.
|
|
225
227
|
deps: The dependencies to use instead of the dependencies passed to the agent run.
|
|
226
228
|
model: The model to use instead of the model passed to the agent run.
|
|
227
229
|
toolsets: The toolsets to use instead of the toolsets passed to the agent constructor and agent run.
|
|
@@ -229,6 +231,7 @@ class WrapperAgent(AbstractAgent[AgentDepsT, OutputDataT]):
|
|
|
229
231
|
instructions: The instructions to use instead of the instructions registered with the agent.
|
|
230
232
|
"""
|
|
231
233
|
with self.wrapped.override(
|
|
234
|
+
name=name,
|
|
232
235
|
deps=deps,
|
|
233
236
|
model=model,
|
|
234
237
|
toolsets=toolsets,
|
|
@@ -10,7 +10,7 @@ from __future__ import annotations as _annotations
|
|
|
10
10
|
|
|
11
11
|
import queue
|
|
12
12
|
import threading
|
|
13
|
-
from collections.abc import Iterator
|
|
13
|
+
from collections.abc import Iterator, Sequence
|
|
14
14
|
from contextlib import AbstractAsyncContextManager
|
|
15
15
|
from dataclasses import dataclass, field
|
|
16
16
|
from datetime import datetime
|
|
@@ -35,7 +35,7 @@ STREAM_INITIALIZATION_TIMEOUT = 30
|
|
|
35
35
|
|
|
36
36
|
async def model_request(
|
|
37
37
|
model: models.Model | models.KnownModelName | str,
|
|
38
|
-
messages:
|
|
38
|
+
messages: Sequence[messages.ModelMessage],
|
|
39
39
|
*,
|
|
40
40
|
model_settings: settings.ModelSettings | None = None,
|
|
41
41
|
model_request_parameters: models.ModelRequestParameters | None = None,
|
|
@@ -79,7 +79,7 @@ async def model_request(
|
|
|
79
79
|
"""
|
|
80
80
|
model_instance = _prepare_model(model, instrument)
|
|
81
81
|
return await model_instance.request(
|
|
82
|
-
messages,
|
|
82
|
+
list(messages),
|
|
83
83
|
model_settings,
|
|
84
84
|
model_request_parameters or models.ModelRequestParameters(),
|
|
85
85
|
)
|
|
@@ -87,7 +87,7 @@ async def model_request(
|
|
|
87
87
|
|
|
88
88
|
def model_request_sync(
|
|
89
89
|
model: models.Model | models.KnownModelName | str,
|
|
90
|
-
messages:
|
|
90
|
+
messages: Sequence[messages.ModelMessage],
|
|
91
91
|
*,
|
|
92
92
|
model_settings: settings.ModelSettings | None = None,
|
|
93
93
|
model_request_parameters: models.ModelRequestParameters | None = None,
|
|
@@ -133,7 +133,7 @@ def model_request_sync(
|
|
|
133
133
|
return _get_event_loop().run_until_complete(
|
|
134
134
|
model_request(
|
|
135
135
|
model,
|
|
136
|
-
messages,
|
|
136
|
+
list(messages),
|
|
137
137
|
model_settings=model_settings,
|
|
138
138
|
model_request_parameters=model_request_parameters,
|
|
139
139
|
instrument=instrument,
|
|
@@ -143,7 +143,7 @@ def model_request_sync(
|
|
|
143
143
|
|
|
144
144
|
def model_request_stream(
|
|
145
145
|
model: models.Model | models.KnownModelName | str,
|
|
146
|
-
messages:
|
|
146
|
+
messages: Sequence[messages.ModelMessage],
|
|
147
147
|
*,
|
|
148
148
|
model_settings: settings.ModelSettings | None = None,
|
|
149
149
|
model_request_parameters: models.ModelRequestParameters | None = None,
|
|
@@ -191,7 +191,7 @@ def model_request_stream(
|
|
|
191
191
|
"""
|
|
192
192
|
model_instance = _prepare_model(model, instrument)
|
|
193
193
|
return model_instance.request_stream(
|
|
194
|
-
messages,
|
|
194
|
+
list(messages),
|
|
195
195
|
model_settings,
|
|
196
196
|
model_request_parameters or models.ModelRequestParameters(),
|
|
197
197
|
)
|
|
@@ -199,7 +199,7 @@ def model_request_stream(
|
|
|
199
199
|
|
|
200
200
|
def model_request_stream_sync(
|
|
201
201
|
model: models.Model | models.KnownModelName | str,
|
|
202
|
-
messages:
|
|
202
|
+
messages: Sequence[messages.ModelMessage],
|
|
203
203
|
*,
|
|
204
204
|
model_settings: settings.ModelSettings | None = None,
|
|
205
205
|
model_request_parameters: models.ModelRequestParameters | None = None,
|
|
@@ -246,7 +246,7 @@ def model_request_stream_sync(
|
|
|
246
246
|
"""
|
|
247
247
|
async_stream_cm = model_request_stream(
|
|
248
248
|
model=model,
|
|
249
|
-
messages=messages,
|
|
249
|
+
messages=list(messages),
|
|
250
250
|
model_settings=model_settings,
|
|
251
251
|
model_request_parameters=model_request_parameters,
|
|
252
252
|
instrument=instrument,
|