From 38dde363e889730d1b1ae879a79799cd97b8a5e5 Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Tue, 30 Sep 2025 09:43:42 +0200 Subject: [PATCH 1/9] direct functions only --- pydantic_ai_slim/pydantic_ai/direct.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/direct.py b/pydantic_ai_slim/pydantic_ai/direct.py index 26d94717fb..137f39fa3a 100644 --- a/pydantic_ai_slim/pydantic_ai/direct.py +++ b/pydantic_ai_slim/pydantic_ai/direct.py @@ -10,7 +10,7 @@ import queue import threading -from collections.abc import Iterator +from collections.abc import Iterator, Sequence from contextlib import AbstractAsyncContextManager from dataclasses import dataclass, field from datetime import datetime @@ -35,7 +35,7 @@ async def model_request( model: models.Model | models.KnownModelName | str, - messages: list[messages.ModelMessage], + messages: Sequence[messages.ModelMessage], *, model_settings: settings.ModelSettings | None = None, model_request_parameters: models.ModelRequestParameters | None = None, @@ -79,7 +79,7 @@ async def main(): """ model_instance = _prepare_model(model, instrument) return await model_instance.request( - messages, + list(messages), model_settings, model_request_parameters or models.ModelRequestParameters(), ) @@ -87,7 +87,7 @@ async def main(): def model_request_sync( model: models.Model | models.KnownModelName | str, - messages: list[messages.ModelMessage], + messages: Sequence[messages.ModelMessage], *, model_settings: settings.ModelSettings | None = None, model_request_parameters: models.ModelRequestParameters | None = None, @@ -133,7 +133,7 @@ def model_request_sync( return _get_event_loop().run_until_complete( model_request( model, - messages, + list(messages), model_settings=model_settings, model_request_parameters=model_request_parameters, instrument=instrument, @@ -143,7 +143,7 @@ def model_request_sync( def model_request_stream( model: models.Model | models.KnownModelName | str, - messages: list[messages.ModelMessage], + messages: Sequence[messages.ModelMessage], *, model_settings: settings.ModelSettings | None = None, model_request_parameters: models.ModelRequestParameters | None = None, @@ -191,7 +191,7 @@ async def main(): """ model_instance = _prepare_model(model, instrument) return model_instance.request_stream( - messages, + list(messages), model_settings, model_request_parameters or models.ModelRequestParameters(), ) @@ -199,7 +199,7 @@ async def main(): def model_request_stream_sync( model: models.Model | models.KnownModelName | str, - messages: list[messages.ModelMessage], + messages: Sequence[messages.ModelMessage], *, model_settings: settings.ModelSettings | None = None, model_request_parameters: models.ModelRequestParameters | None = None, @@ -246,7 +246,7 @@ def model_request_stream_sync( """ async_stream_cm = model_request_stream( model=model, - messages=messages, + messages=list(messages), model_settings=model_settings, model_request_parameters=model_request_parameters, instrument=instrument, From 9a92e348fafd871c314709a5a118e8119ed94876 Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Wed, 1 Oct 2025 10:36:24 +0200 Subject: [PATCH 2/9] `run` + `iter` --- pydantic_ai_slim/pydantic_ai/_cli.py | 6 ++-- .../pydantic_ai/agent/__init__.py | 12 +++---- .../pydantic_ai/agent/abstract.py | 32 +++++++++---------- pydantic_ai_slim/pydantic_ai/agent/wrapper.py | 6 ++-- .../pydantic_ai/durable_exec/dbos/_agent.py | 28 ++++++++-------- .../durable_exec/temporal/_agent.py | 24 +++++++------- 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/_cli.py b/pydantic_ai_slim/pydantic_ai/_cli.py index 95fcf8b520..ddf76a4676 100644 --- a/pydantic_ai_slim/pydantic_ai/_cli.py +++ b/pydantic_ai_slim/pydantic_ai/_cli.py @@ -228,7 +228,7 @@ async def run_chat( prog_name: str, config_dir: Path | None = None, deps: AgentDepsT = None, - message_history: list[ModelMessage] | None = None, + message_history: Sequence[ModelMessage] | None = None, ) -> int: prompt_history_path = (config_dir or PYDANTIC_AI_HOME) / PROMPT_HISTORY_FILENAME prompt_history_path.parent.mkdir(parents=True, exist_ok=True) @@ -236,7 +236,7 @@ async def run_chat( session: PromptSession[Any] = PromptSession(history=FileHistory(str(prompt_history_path))) multiline = False - messages: list[ModelMessage] = message_history[:] if message_history else [] + messages: list[ModelMessage] = list(message_history) if message_history else [] while True: try: @@ -272,7 +272,7 @@ async def ask_agent( console: Console, code_theme: str, deps: AgentDepsT = None, - messages: list[ModelMessage] | None = None, + messages: Sequence[ModelMessage] | None = None, ) -> list[ModelMessage]: status = Status('[dim]Working on it…[/dim]', console=console) diff --git a/pydantic_ai_slim/pydantic_ai/agent/__init__.py b/pydantic_ai_slim/pydantic_ai/agent/__init__.py index 72c256e9c4..1f57031cbe 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/agent/__init__.py @@ -415,7 +415,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -432,7 +432,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -449,7 +449,7 @@ async def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -566,7 +566,7 @@ async def main(): # Build the initial state usage = usage or _usage.RunUsage() state = _agent_graph.GraphAgentState( - message_history=message_history[:] if message_history else [], + message_history=list(message_history) if message_history else [], usage=usage, retries=0, run_step=0, @@ -684,13 +684,13 @@ def _run_span_end_attributes( 'all_messages_events': json.dumps( [ InstrumentedModel.event_to_dict(e) - for e in settings.messages_to_otel_events(state.message_history) + for e in settings.messages_to_otel_events(list(state.message_history)) ] ) } else: attrs = { - 'pydantic_ai.all_messages': json.dumps(settings.messages_to_otel_messages(state.message_history)), + 'pydantic_ai.all_messages': json.dumps(settings.messages_to_otel_messages(list(state.message_history))), **settings.system_instructions_attributes(literal_instructions), } diff --git a/pydantic_ai_slim/pydantic_ai/agent/abstract.py b/pydantic_ai_slim/pydantic_ai/agent/abstract.py index c5d59f7561..efa73a3b49 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/abstract.py +++ b/pydantic_ai_slim/pydantic_ai/agent/abstract.py @@ -128,7 +128,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -146,7 +146,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -163,7 +163,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -242,7 +242,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -260,7 +260,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -277,7 +277,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -348,7 +348,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -366,7 +366,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -384,7 +384,7 @@ async def run_stream( # noqa C901 user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -495,7 +495,7 @@ async def stream_to_final( raise exceptions.AgentRunError('Agent run produced final results') # pragma: no cover yielded = True - messages = graph_ctx.state.message_history.copy() + messages = list(graph_ctx.state.message_history) async def on_complete() -> None: """Called when the stream has completed. @@ -523,7 +523,7 @@ async def on_complete() -> None: messages.append(_messages.ModelRequest(parts)) yield StreamedRunResult( - messages, + list(messages), graph_ctx.deps.new_message_index, stream, on_complete, @@ -726,7 +726,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -743,7 +743,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -761,7 +761,7 @@ async def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -1112,7 +1112,7 @@ async def to_cli( self: Self, deps: AgentDepsT = None, prog_name: str = 'pydantic-ai', - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, ) -> None: """Run the agent in a CLI chat interface. @@ -1149,7 +1149,7 @@ def to_cli_sync( self: Self, deps: AgentDepsT = None, prog_name: str = 'pydantic-ai', - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, ) -> None: """Run the agent in a CLI chat interface with the non-async interface. diff --git a/pydantic_ai_slim/pydantic_ai/agent/wrapper.py b/pydantic_ai_slim/pydantic_ai/agent/wrapper.py index ba735f0907..4e8646d040 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/wrapper.py +++ b/pydantic_ai_slim/pydantic_ai/agent/wrapper.py @@ -72,7 +72,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -89,7 +89,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -106,7 +106,7 @@ async def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, diff --git a/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py b/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py index eb609cfc4a..ae9b317b7c 100644 --- a/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py +++ b/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py @@ -112,7 +112,7 @@ async def wrapped_run_workflow( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT, @@ -149,7 +149,7 @@ def wrapped_run_sync_workflow( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT, @@ -237,7 +237,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -255,7 +255,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -272,7 +272,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -341,7 +341,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -359,7 +359,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -376,7 +376,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -444,7 +444,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -462,7 +462,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -480,7 +480,7 @@ async def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -656,7 +656,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -674,7 +674,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -692,7 +692,7 @@ async def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, diff --git a/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py b/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py index 5338f228a9..174a9e9f90 100644 --- a/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py +++ b/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py @@ -259,7 +259,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -277,7 +277,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -294,7 +294,7 @@ async def run( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -369,7 +369,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -387,7 +387,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -404,7 +404,7 @@ def run_sync( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -477,7 +477,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -495,7 +495,7 @@ def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -513,7 +513,7 @@ async def run_stream( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -704,7 +704,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -722,7 +722,7 @@ def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -740,7 +740,7 @@ async def iter( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, From 49951696ecb1e27b7d69264bf6f5237a358b134a Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Wed, 1 Oct 2025 14:52:42 +0200 Subject: [PATCH 3/9] wip --- tests/test_dbos.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_dbos.py b/tests/test_dbos.py index a9aac4b961..d968c89264 100644 --- a/tests/test_dbos.py +++ b/tests/test_dbos.py @@ -120,8 +120,8 @@ def workflow_raises(exc_type: type[Exception], exc_message: str) -> Iterator[Non 'name': 'pydantic_dbos_tests', 'system_database_url': f'sqlite:///{DBOS_SQLITE_FILE}', 'run_admin_server': False, - # enable_otlp requires dbos>1.14 - 'enable_otlp': True, + # disable_otlp: False means OTLP is enabled (requires dbos>1.14) + 'disable_otlp': False, } From 454fe66036bfc16c394f85e81f97ea31d012414a Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Wed, 1 Oct 2025 13:13:46 +0000 Subject: [PATCH 4/9] fix --- pydantic_ai_slim/pydantic_ai/agent/abstract.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/agent/abstract.py b/pydantic_ai_slim/pydantic_ai/agent/abstract.py index efa73a3b49..32fdef436f 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/abstract.py +++ b/pydantic_ai_slim/pydantic_ai/agent/abstract.py @@ -523,7 +523,7 @@ async def on_complete() -> None: messages.append(_messages.ModelRequest(parts)) yield StreamedRunResult( - list(messages), + messages, graph_ctx.deps.new_message_index, stream, on_complete, @@ -539,7 +539,7 @@ async def on_complete() -> None: # if a tool function raised CallDeferred or ApprovalRequired. # In this case there's no response to stream, but we still let the user access the output etc as normal. yield StreamedRunResult( - graph_ctx.state.message_history, + list(graph_ctx.state.message_history), graph_ctx.deps.new_message_index, run_result=agent_run.result, ) From a7d39cec4c321597cb0afe99fa739dca93e09d8c Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Wed, 1 Oct 2025 13:22:20 +0000 Subject: [PATCH 5/9] dbos setting? --- tests/test_dbos.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_dbos.py b/tests/test_dbos.py index d968c89264..58c0e0c1d7 100644 --- a/tests/test_dbos.py +++ b/tests/test_dbos.py @@ -121,7 +121,8 @@ def workflow_raises(exc_type: type[Exception], exc_message: str) -> Iterator[Non 'system_database_url': f'sqlite:///{DBOS_SQLITE_FILE}', 'run_admin_server': False, # disable_otlp: False means OTLP is enabled (requires dbos>1.14) - 'disable_otlp': False, + # enable_otlp requires dbos>1.14 + 'enable_otlp': True, } From 3d0909505885442411a5edb2427fc31a18ddb93c Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Thu, 2 Oct 2025 04:04:50 +0000 Subject: [PATCH 6/9] rm comment --- tests/test_dbos.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_dbos.py b/tests/test_dbos.py index 58c0e0c1d7..a9aac4b961 100644 --- a/tests/test_dbos.py +++ b/tests/test_dbos.py @@ -120,7 +120,6 @@ def workflow_raises(exc_type: type[Exception], exc_message: str) -> Iterator[Non 'name': 'pydantic_dbos_tests', 'system_database_url': f'sqlite:///{DBOS_SQLITE_FILE}', 'run_admin_server': False, - # disable_otlp: False means OTLP is enabled (requires dbos>1.14) # enable_otlp requires dbos>1.14 'enable_otlp': True, } From c9d47c6ee627ed17cde9b5fe3fc5142824cacd5e Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Mon, 6 Oct 2025 06:34:51 +0000 Subject: [PATCH 7/9] review --- pydantic_ai_slim/pydantic_ai/agent/__init__.py | 2 +- pydantic_ai_slim/pydantic_ai/agent/abstract.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/agent/__init__.py b/pydantic_ai_slim/pydantic_ai/agent/__init__.py index 1f57031cbe..9ba8420299 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/__init__.py +++ b/pydantic_ai_slim/pydantic_ai/agent/__init__.py @@ -684,7 +684,7 @@ def _run_span_end_attributes( 'all_messages_events': json.dumps( [ InstrumentedModel.event_to_dict(e) - for e in settings.messages_to_otel_events(list(state.message_history)) + for e in settings.messages_to_otel_events(state.message_history) ] ) } diff --git a/pydantic_ai_slim/pydantic_ai/agent/abstract.py b/pydantic_ai_slim/pydantic_ai/agent/abstract.py index 32fdef436f..9a9f3c1e19 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/abstract.py +++ b/pydantic_ai_slim/pydantic_ai/agent/abstract.py @@ -495,7 +495,7 @@ async def stream_to_final( raise exceptions.AgentRunError('Agent run produced final results') # pragma: no cover yielded = True - messages = list(graph_ctx.state.message_history) + messages = graph_ctx.state.message_history async def on_complete() -> None: """Called when the stream has completed. @@ -539,7 +539,7 @@ async def on_complete() -> None: # if a tool function raised CallDeferred or ApprovalRequired. # In this case there's no response to stream, but we still let the user access the output etc as normal. yield StreamedRunResult( - list(graph_ctx.state.message_history), + graph_ctx.state.message_history, graph_ctx.deps.new_message_index, run_result=agent_run.result, ) From 8509865f7b2a33e92ec6124572f5d0a25ac75170 Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Mon, 6 Oct 2025 06:36:51 +0000 Subject: [PATCH 8/9] copy --- pydantic_ai_slim/pydantic_ai/agent/abstract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydantic_ai_slim/pydantic_ai/agent/abstract.py b/pydantic_ai_slim/pydantic_ai/agent/abstract.py index 9a9f3c1e19..7c6364c35d 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/abstract.py +++ b/pydantic_ai_slim/pydantic_ai/agent/abstract.py @@ -495,7 +495,7 @@ async def stream_to_final( raise exceptions.AgentRunError('Agent run produced final results') # pragma: no cover yielded = True - messages = graph_ctx.state.message_history + messages = graph_ctx.state.message_history.copy() async def on_complete() -> None: """Called when the stream has completed. From a10c6a1d14e6969d93b9807812461cd1483457f1 Mon Sep 17 00:00:00 2001 From: Moritz Wilksch Date: Tue, 7 Oct 2025 11:47:08 +0000 Subject: [PATCH 9/9] type `run_stream_events` methods --- pydantic_ai_slim/pydantic_ai/agent/abstract.py | 8 ++++---- pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py | 6 +++--- .../pydantic_ai/durable_exec/temporal/_agent.py | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pydantic_ai_slim/pydantic_ai/agent/abstract.py b/pydantic_ai_slim/pydantic_ai/agent/abstract.py index 7c6364c35d..419b5120f4 100644 --- a/pydantic_ai_slim/pydantic_ai/agent/abstract.py +++ b/pydantic_ai_slim/pydantic_ai/agent/abstract.py @@ -560,7 +560,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -577,7 +577,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -593,7 +593,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -674,7 +674,7 @@ async def _run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, diff --git a/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py b/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py index ae9b317b7c..14f32bdc97 100644 --- a/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py +++ b/pydantic_ai_slim/pydantic_ai/durable_exec/dbos/_agent.py @@ -553,7 +553,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -570,7 +570,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -586,7 +586,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, diff --git a/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py b/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py index 174a9e9f90..84b1b047b0 100644 --- a/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py +++ b/pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_agent.py @@ -586,7 +586,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -603,7 +603,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT], - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None, @@ -619,7 +619,7 @@ def run_stream_events( user_prompt: str | Sequence[_messages.UserContent] | None = None, *, output_type: OutputSpec[RunOutputDataT] | None = None, - message_history: list[_messages.ModelMessage] | None = None, + message_history: Sequence[_messages.ModelMessage] | None = None, deferred_tool_results: DeferredToolResults | None = None, model: models.Model | models.KnownModelName | str | None = None, deps: AgentDepsT = None,