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.

Files changed (128) hide show
  1. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/PKG-INFO +4 -4
  2. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_agent_graph.py +13 -12
  3. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_cli.py +3 -3
  4. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/__init__.py +18 -7
  5. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/abstract.py +27 -26
  6. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/agent/wrapper.py +7 -4
  7. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/direct.py +9 -9
  8. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_agent.py +21 -18
  9. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_agent.py +19 -16
  10. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/format_prompt.py +6 -4
  11. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/messages.py +66 -42
  12. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/anthropic.py +20 -19
  13. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/openai.py +9 -1
  14. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/result.py +5 -5
  15. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/usage.py +35 -1
  16. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pyproject.toml +1 -1
  17. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/.gitignore +0 -0
  18. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/LICENSE +0 -0
  19. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/README.md +0 -0
  20. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/__init__.py +0 -0
  21. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/__main__.py +0 -0
  22. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_a2a.py +0 -0
  23. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_function_schema.py +0 -0
  24. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_griffe.py +0 -0
  25. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_instrumentation.py +0 -0
  26. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_json_schema.py +0 -0
  27. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_mcp.py +0 -0
  28. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_otel_messages.py +0 -0
  29. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_output.py +0 -0
  30. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_parts_manager.py +0 -0
  31. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_run_context.py +0 -0
  32. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_system_prompt.py +0 -0
  33. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_thinking_part.py +0 -0
  34. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_tool_manager.py +0 -0
  35. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/_utils.py +0 -0
  36. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ag_ui.py +0 -0
  37. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/builtin_tools.py +0 -0
  38. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/__init__.py +0 -0
  39. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/duckduckgo.py +0 -0
  40. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/common_tools/tavily.py +0 -0
  41. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/__init__.py +0 -0
  42. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/__init__.py +0 -0
  43. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_mcp_server.py +0 -0
  44. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_model.py +0 -0
  45. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/dbos/_utils.py +0 -0
  46. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/__init__.py +0 -0
  47. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_function_toolset.py +0 -0
  48. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_logfire.py +0 -0
  49. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_mcp_server.py +0 -0
  50. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_model.py +0 -0
  51. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_run_context.py +0 -0
  52. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/durable_exec/temporal/_toolset.py +0 -0
  53. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/exceptions.py +0 -0
  54. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/__init__.py +0 -0
  55. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/aci.py +0 -0
  56. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/ext/langchain.py +0 -0
  57. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/mcp.py +0 -0
  58. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/__init__.py +0 -0
  59. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/bedrock.py +0 -0
  60. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/cohere.py +0 -0
  61. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/fallback.py +0 -0
  62. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/function.py +0 -0
  63. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/gemini.py +0 -0
  64. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/google.py +0 -0
  65. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/groq.py +0 -0
  66. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/huggingface.py +0 -0
  67. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/instrumented.py +0 -0
  68. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/mcp_sampling.py +0 -0
  69. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/mistral.py +0 -0
  70. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/test.py +0 -0
  71. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/models/wrapper.py +0 -0
  72. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/output.py +0 -0
  73. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/__init__.py +0 -0
  74. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/amazon.py +0 -0
  75. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/anthropic.py +0 -0
  76. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/cohere.py +0 -0
  77. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/deepseek.py +0 -0
  78. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/google.py +0 -0
  79. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/grok.py +0 -0
  80. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/groq.py +0 -0
  81. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/harmony.py +0 -0
  82. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/meta.py +0 -0
  83. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/mistral.py +0 -0
  84. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/moonshotai.py +0 -0
  85. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/openai.py +0 -0
  86. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/profiles/qwen.py +0 -0
  87. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/__init__.py +0 -0
  88. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/anthropic.py +0 -0
  89. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/azure.py +0 -0
  90. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/bedrock.py +0 -0
  91. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/cerebras.py +0 -0
  92. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/cohere.py +0 -0
  93. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/deepseek.py +0 -0
  94. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/fireworks.py +0 -0
  95. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/gateway.py +0 -0
  96. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/github.py +0 -0
  97. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google.py +0 -0
  98. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google_gla.py +0 -0
  99. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/google_vertex.py +0 -0
  100. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/grok.py +0 -0
  101. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/groq.py +0 -0
  102. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/heroku.py +0 -0
  103. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/huggingface.py +0 -0
  104. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/litellm.py +0 -0
  105. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/mistral.py +0 -0
  106. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/moonshotai.py +0 -0
  107. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/ollama.py +0 -0
  108. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/openai.py +0 -0
  109. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/openrouter.py +0 -0
  110. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/together.py +0 -0
  111. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/providers/vercel.py +0 -0
  112. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/py.typed +0 -0
  113. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/retries.py +0 -0
  114. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/run.py +0 -0
  115. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/settings.py +0 -0
  116. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/tools.py +0 -0
  117. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/__init__.py +0 -0
  118. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/_dynamic.py +0 -0
  119. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/abstract.py +0 -0
  120. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/approval_required.py +0 -0
  121. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/combined.py +0 -0
  122. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/external.py +0 -0
  123. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/filtered.py +0 -0
  124. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/function.py +0 -0
  125. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/prefixed.py +0 -0
  126. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/prepared.py +0 -0
  127. {pydantic_ai_slim-1.0.15 → pydantic_ai_slim-1.0.16}/pydantic_ai/toolsets/renamed.py +0 -0
  128. {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.15
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.28
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.15
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.15; extra == 'evals'
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
- output_parts.extend(
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
- for call in tool_calls_by_kind['function']
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
- for call in calls:
854
- output_parts.append(
855
- _messages.ToolReturnPart(
856
- tool_name=call.tool_name,
857
- content='Tool not executed - a final result was already processed.',
858
- tool_call_id=call.tool_call_id,
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: list[ModelMessage] | None = None,
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[:] if message_history else []
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: list[ModelMessage] | None = None,
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
- return self._name
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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[:] if message_history else [],
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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
- stream, final_result_event.tool_name, final_result_event.tool_call_id
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
- last_message = messages[-1]
507
- assert isinstance(last_message, _messages.ModelResponse)
508
- tool_calls = [
509
- part for part in last_message.parts if isinstance(part, _messages.ToolCallPart)
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[_messages.ModelMessage] | None = None,
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: list[messages.ModelMessage],
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: list[messages.ModelMessage],
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: list[messages.ModelMessage],
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: list[messages.ModelMessage],
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,