pydantic-ai 1.4.0__tar.gz → 1.5.0__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 might be problematic. Click here for more details.

Files changed (536) hide show
  1. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/Makefile +4 -2
  2. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/PKG-INFO +5 -5
  3. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_dataset.py +4 -3
  4. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_utils.py +3 -2
  5. pydantic_ai-1.5.0/tests/graph/beta/test_broadcast_and_spread.py +271 -0
  6. pydantic_ai-1.5.0/tests/graph/beta/test_decisions.py +524 -0
  7. pydantic_ai-1.5.0/tests/graph/beta/test_edge_cases.py +396 -0
  8. pydantic_ai-1.5.0/tests/graph/beta/test_edge_labels.py +221 -0
  9. pydantic_ai-1.5.0/tests/graph/beta/test_graph_builder.py +444 -0
  10. pydantic_ai-1.5.0/tests/graph/beta/test_graph_edge_cases.py +426 -0
  11. pydantic_ai-1.5.0/tests/graph/beta/test_graph_execution.py +345 -0
  12. pydantic_ai-1.5.0/tests/graph/beta/test_graph_iteration.py +466 -0
  13. pydantic_ai-1.5.0/tests/graph/beta/test_joins_and_reducers.py +372 -0
  14. pydantic_ai-1.5.0/tests/graph/beta/test_mermaid_rendering.py +197 -0
  15. pydantic_ai-1.5.0/tests/graph/beta/test_node_and_step.py +70 -0
  16. pydantic_ai-1.5.0/tests/graph/beta/test_parent_forks.py +304 -0
  17. pydantic_ai-1.5.0/tests/graph/beta/test_paths.py +108 -0
  18. pydantic_ai-1.5.0/tests/graph/beta/test_util.py +49 -0
  19. pydantic_ai-1.5.0/tests/graph/beta/test_v1_v2_integration.py +287 -0
  20. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_graph.py +41 -0
  21. pydantic_ai-1.5.0/tests/graph/test_utils.py +55 -0
  22. pydantic_ai-1.5.0/tests/models/cassettes/test_google/test_google_httpx_client_is_not_closed.yaml +122 -0
  23. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_fallback.py +5 -4
  24. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_google.py +11 -0
  25. pydantic_ai-1.5.0/tests/providers/__init__.py +0 -0
  26. pydantic_ai-1.4.0/tests/graph/test_utils.py +0 -13
  27. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/.gitignore +0 -0
  28. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/LICENSE +0 -0
  29. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/README.md +0 -0
  30. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/pyproject.toml +0 -0
  31. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/__init__.py +0 -0
  32. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/dummy.pdf +0 -0
  33. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/dummy.txt +0 -0
  34. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/kiwi.png +0 -0
  35. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/marcelo.mp3 +0 -0
  36. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/product_name.txt +0 -0
  37. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/small_video.mp4 +0 -0
  38. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
  39. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
  40. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  41. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
  42. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
  43. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
  44. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
  45. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
  46. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
  47. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
  48. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
  49. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
  50. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
  51. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
  52. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
  53. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
  54. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
  55. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
  56. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
  57. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
  58. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
  59. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  60. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  61. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  62. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  63. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  64. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  65. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  66. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  67. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  68. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  69. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  70. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  71. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  72. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  73. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_unstructured_dict.yaml +0 -0
  74. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_complex_agent_run_in_flow.yaml +0 -0
  75. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_iter_in_flow.yaml +0 -0
  76. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_multiple_agents.yaml +0 -0
  77. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_iter.yaml +0 -0
  78. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_deps.yaml +0 -0
  79. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_tools.yaml +0 -0
  80. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_toolsets.yaml +0 -0
  81. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run.yaml +0 -0
  82. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream.yaml +0 -0
  83. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream_events.yaml +0 -0
  84. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_sync.yaml +0 -0
  85. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool.yaml +0 -0
  86. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool_sync.yaml +0 -0
  87. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_model_retry.yaml +0 -0
  88. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_unserializable_deps.yaml +0 -0
  89. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_run_stream_in_flow.yaml +0 -0
  90. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_run_sync_in_flow.yaml +0 -0
  91. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_simple_agent_run_in_flow.yaml +0 -0
  92. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  93. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  94. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  95. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  96. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  97. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  98. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  99. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  100. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
  101. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
  102. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  103. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
  104. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
  105. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
  106. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
  107. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
  108. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
  109. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
  110. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream_events.yaml +0 -0
  111. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
  112. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
  113. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
  114. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
  115. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
  116. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
  117. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
  118. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_web_search_agent_run_in_workflow.yaml +0 -0
  119. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/conftest.py +0 -0
  120. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/__init__.py +0 -0
  121. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_base.py +0 -0
  122. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_common.py +0 -0
  123. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_context.py +0 -0
  124. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_spec.py +0 -0
  125. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluators.py +0 -0
  126. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_llm_as_a_judge.py +0 -0
  127. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_otel.py +0 -0
  128. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_render_numbers.py +0 -0
  129. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_reporting.py +0 -0
  130. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_reports.py +0 -0
  131. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/utils.py +0 -0
  132. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/README.md +0 -0
  133. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/bank_database.py +0 -0
  134. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/fake_database.py +0 -0
  135. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/mcp_server.py +0 -0
  136. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/weather_service.py +0 -0
  137. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/ext/__init__.py +0 -0
  138. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/ext/test_langchain.py +0 -0
  139. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/__init__.py +0 -0
  140. {pydantic_ai-1.4.0/tests/models → pydantic_ai-1.5.0/tests/graph/beta}/__init__.py +0 -0
  141. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_file_persistence.py +0 -0
  142. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_mermaid.py +0 -0
  143. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_persistence.py +0 -0
  144. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_state.py +0 -0
  145. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/import_examples.py +0 -0
  146. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/json_body_serializer.py +0 -0
  147. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/mcp_server.py +0 -0
  148. {pydantic_ai-1.4.0/tests/providers → pydantic_ai-1.5.0/tests/models}/__init__.py +0 -0
  149. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
  150. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool_stream.yaml +0 -0
  151. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_mcp_servers.yaml +0 -0
  152. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_mcp_servers_stream.yaml +0 -0
  153. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_memory_tool.yaml +0 -0
  154. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  155. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  156. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  157. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
  158. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
  159. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
  160. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  161. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_web_search_tool_stream.yaml +0 -0
  162. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_output_tool_with_thinking.yaml +0 -0
  163. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  164. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  165. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
  166. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
  167. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  168. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_parts_ahead_of_built_in_tool_call.yaml +0 -0
  169. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  170. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  171. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
  172. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
  173. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  174. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  175. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  176. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  177. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  178. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  179. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  180. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  181. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
  182. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  183. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  184. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  185. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  186. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  187. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  188. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  189. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  190. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  191. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  192. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  193. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream_empty_text_delta.yaml +0 -0
  194. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  195. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
  196. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
  197. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
  198. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
  199. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
  200. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  201. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  202. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  203. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  204. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  205. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  206. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  207. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  208. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  209. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  210. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  211. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  212. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  213. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  214. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  215. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  216. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  217. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  218. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  219. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  220. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  221. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  222. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  223. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  224. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  225. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  226. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  227. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  228. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  229. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  230. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  231. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  232. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  233. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  234. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  235. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  236. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  237. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  238. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  239. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  240. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  241. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  242. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  243. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  244. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  245. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  246. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  247. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  248. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  249. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  250. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  251. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
  252. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_and_text_output.yaml +0 -0
  253. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation.yaml +0 -0
  254. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation_stream.yaml +0 -0
  255. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation_with_text.yaml +0 -0
  256. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_or_text_output.yaml +0 -0
  257. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  258. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
  259. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
  260. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  261. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  262. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  263. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  264. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  265. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  266. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  267. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  268. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  269. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
  270. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  271. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  272. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
  273. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  274. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  275. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  276. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  277. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  278. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  279. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
  280. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  281. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  282. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
  283. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
  284. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
  285. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  286. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  287. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  288. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  289. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  290. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
  291. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool_stream.yaml +0 -0
  292. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  293. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_multiple_images.yaml +0 -0
  294. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  295. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  296. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  297. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  298. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  299. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  300. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  301. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  302. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  303. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  304. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  305. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  306. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  307. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  308. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  309. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  310. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  311. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  312. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  313. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_vertexai_image_generation.yaml +0 -0
  314. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
  315. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  316. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  317. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  318. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  319. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
  320. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool_stream.yaml +0 -0
  321. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
  322. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
  323. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  324. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  325. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  326. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
  327. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
  328. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
  329. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  330. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  331. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  332. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  333. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  334. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  335. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  336. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  337. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  338. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  339. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  340. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  341. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  342. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  343. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  344. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
  345. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  346. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  347. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  348. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  349. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
  350. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  351. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  352. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  353. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  354. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download.yaml +0 -0
  355. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download_response_api.yaml +0 -0
  356. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  357. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  358. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  359. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  360. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  361. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  362. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  363. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  364. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  365. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
  366. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
  367. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
  368. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
  369. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  370. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  371. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  372. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  373. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  374. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  375. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  376. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  377. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  378. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  379. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
  380. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
  381. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
  382. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  383. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
  384. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_document_as_binary_content_input.yaml +0 -0
  385. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_document_url_input.yaml +0 -0
  386. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  387. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  388. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  389. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  390. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  391. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  392. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  393. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  394. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
  395. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
  396. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image.yaml +0 -0
  397. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image_stream.yaml +0 -0
  398. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  399. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  400. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_history_with_combined_tool_call_id.yaml +0 -0
  401. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_and_text_output.yaml +0 -0
  402. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation.yaml +0 -0
  403. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_jpeg.yaml +0 -0
  404. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_stream.yaml +0 -0
  405. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_tool_without_image_output.yaml +0 -0
  406. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_native_output.yaml +0 -0
  407. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_prompted_output.yaml +0 -0
  408. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tool_output.yaml +0 -0
  409. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tools.yaml +0 -0
  410. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_or_text_output.yaml +0 -0
  411. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  412. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  413. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools_web_search.yaml +0 -0
  414. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  415. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  416. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool.yaml +0 -0
  417. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool_stream.yaml +0 -0
  418. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool_with_connector.yaml +0 -0
  419. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  420. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  421. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  422. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
  423. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
  424. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
  425. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
  426. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
  427. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_multiple_images.yaml +0 -0
  428. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_non_reasoning_model_no_item_ids.yaml +0 -0
  429. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  430. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  431. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  432. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  433. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +0 -0
  434. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  435. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  436. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
  437. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
  438. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool.yaml +0 -0
  439. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool_stream.yaml +0 -0
  440. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
  441. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
  442. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
  443. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  444. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  445. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  446. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  447. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  448. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/mock_async_stream.py +0 -0
  449. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/mock_openai.py +0 -0
  450. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_anthropic.py +0 -0
  451. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_bedrock.py +0 -0
  452. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_cohere.py +0 -0
  453. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_deepseek.py +0 -0
  454. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_download_item.py +0 -0
  455. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_gemini.py +0 -0
  456. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_gemini_vertex.py +0 -0
  457. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_groq.py +0 -0
  458. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_huggingface.py +0 -0
  459. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_instrumented.py +0 -0
  460. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_mcp_sampling.py +0 -0
  461. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_mistral.py +0 -0
  462. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model.py +0 -0
  463. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_function.py +0 -0
  464. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_names.py +0 -0
  465. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_request_parameters.py +0 -0
  466. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_settings.py +0 -0
  467. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_test.py +0 -0
  468. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_openai.py +0 -0
  469. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_openai_responses.py +0 -0
  470. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/parts_from_messages.py +0 -0
  471. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  472. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +0 -0
  473. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_bedrock.yaml +0 -0
  474. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
  475. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
  476. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
  477. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
  478. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  479. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  480. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  481. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_anthropic.py +0 -0
  482. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_azure.py +0 -0
  483. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_bedrock.py +0 -0
  484. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_cerebras.py +0 -0
  485. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_cohere.py +0 -0
  486. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_deepseek.py +0 -0
  487. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_fireworks.py +0 -0
  488. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_gateway.py +0 -0
  489. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_github.py +0 -0
  490. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_google_gla.py +0 -0
  491. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_google_vertex.py +0 -0
  492. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_grok.py +0 -0
  493. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_groq.py +0 -0
  494. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_heroku.py +0 -0
  495. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_huggingface.py +0 -0
  496. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_litellm.py +0 -0
  497. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_mistral.py +0 -0
  498. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_moonshotai.py +0 -0
  499. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_nebius.py +0 -0
  500. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_ollama.py +0 -0
  501. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_openai.py +0 -0
  502. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_openrouter.py +0 -0
  503. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_ovhcloud.py +0 -0
  504. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_provider_names.py +0 -0
  505. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_together.py +0 -0
  506. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_vercel.py +0 -0
  507. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_a2a.py +0 -0
  508. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_ag_ui.py +0 -0
  509. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_agent.py +0 -0
  510. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_builtin_tools.py +0 -0
  511. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_cli.py +0 -0
  512. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_dbos.py +0 -0
  513. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_deps.py +0 -0
  514. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_direct.py +0 -0
  515. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_examples.py +0 -0
  516. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_format_as_xml.py +0 -0
  517. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_function_schema.py +0 -0
  518. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_history_processor.py +0 -0
  519. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_json_body_serializer.py +0 -0
  520. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_live.py +0 -0
  521. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_logfire.py +0 -0
  522. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_mcp.py +0 -0
  523. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_messages.py +0 -0
  524. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_parts_manager.py +0 -0
  525. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_prefect.py +0 -0
  526. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_settings.py +0 -0
  527. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_streaming.py +0 -0
  528. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_temporal.py +0 -0
  529. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_tenacity.py +0 -0
  530. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_thinking_part.py +0 -0
  531. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_tools.py +0 -0
  532. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_toolsets.py +0 -0
  533. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_usage_limits.py +0 -0
  534. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_utils.py +0 -0
  535. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/typed_agent.py +0 -0
  536. {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/typed_graph.py +0 -0
@@ -36,8 +36,9 @@ lint: ## Lint the code
36
36
 
37
37
  .PHONY: typecheck-pyright
38
38
  typecheck-pyright:
39
+ @# To typecheck for a specific version of python, run 'make install-all-python' then set environment variable PYRIGHT_PYTHON=3.10 or similar
39
40
  @# PYRIGHT_PYTHON_IGNORE_WARNINGS avoids the overhead of making a request to github on every invocation
40
- PYRIGHT_PYTHON_IGNORE_WARNINGS=1 uv run pyright
41
+ PYRIGHT_PYTHON_IGNORE_WARNINGS=1 uv run pyright $(if $(PYRIGHT_PYTHON),--pythonversion $(PYRIGHT_PYTHON))
41
42
 
42
43
  .PHONY: typecheck-mypy
43
44
  typecheck-mypy:
@@ -51,7 +52,8 @@ typecheck-both: typecheck-pyright typecheck-mypy
51
52
 
52
53
  .PHONY: test
53
54
  test: ## Run tests and collect coverage data
54
- uv run coverage run -m pytest -n auto --dist=loadgroup --durations=20
55
+ @# To test using a specific version of python, run 'make install-all-python' then set environment variable PYTEST_PYTHON=3.10 or similar
56
+ $(if $(PYTEST_PYTHON),UV_PROJECT_ENVIRONMENT=.venv$(subst .,,$(PYTEST_PYTHON))) uv run $(if $(PYTEST_PYTHON),--python $(PYTEST_PYTHON)) coverage run -m pytest -n auto --dist=loadgroup --durations=20
55
57
  @uv run coverage combine
56
58
  @uv run coverage report
57
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs
5
5
  Project-URL: Homepage, https://ai.pydantic.dev
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai
@@ -26,15 +26,15 @@ Classifier: Topic :: Internet
26
26
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
27
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
28
  Requires-Python: >=3.10
29
- Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.4.0
29
+ Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.5.0
30
30
  Provides-Extra: a2a
31
31
  Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
32
32
  Provides-Extra: dbos
33
- Requires-Dist: pydantic-ai-slim[dbos]==1.4.0; extra == 'dbos'
33
+ Requires-Dist: pydantic-ai-slim[dbos]==1.5.0; extra == 'dbos'
34
34
  Provides-Extra: examples
35
- Requires-Dist: pydantic-ai-examples==1.4.0; extra == 'examples'
35
+ Requires-Dist: pydantic-ai-examples==1.5.0; extra == 'examples'
36
36
  Provides-Extra: prefect
37
- Requires-Dist: pydantic-ai-slim[prefect]==1.4.0; extra == 'prefect'
37
+ Requires-Dist: pydantic-ai-slim[prefect]==1.5.0; extra == 'prefect'
38
38
  Description-Content-Type: text/markdown
39
39
 
40
40
  <div align="center">
@@ -4,10 +4,11 @@ import json
4
4
  import sys
5
5
  from dataclasses import dataclass, field
6
6
  from pathlib import Path
7
- from typing import Any, Literal
7
+ from typing import Any, Literal, cast
8
8
 
9
9
  import pytest
10
10
  import yaml
11
+ from _pytest.python_api import RaisesContext
11
12
  from dirty_equals import HasRepr, IsNumber
12
13
  from inline_snapshot import snapshot
13
14
  from pydantic import BaseModel, TypeAdapter
@@ -963,7 +964,7 @@ async def test_from_text_failure():
963
964
  ],
964
965
  'evaluators': ['NotAnEvaluator'],
965
966
  }
966
- with pytest.raises(ExceptionGroup) as exc_info:
967
+ with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
967
968
  Dataset[TaskInput, TaskOutput, TaskMetadata].from_text(json.dumps(dataset_dict))
968
969
  assert exc_info.value == HasRepr(
969
970
  repr(
@@ -993,7 +994,7 @@ async def test_from_text_failure():
993
994
  ],
994
995
  'evaluators': ['LLMJudge'],
995
996
  }
996
- with pytest.raises(ExceptionGroup) as exc_info:
997
+ with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
997
998
  Dataset[TaskInput, TaskOutput, TaskMetadata].from_text(json.dumps(dataset_dict))
998
999
  assert exc_info.value == HasRepr( # pragma: lax no cover
999
1000
  repr(
@@ -4,9 +4,10 @@ import functools
4
4
  import sys
5
5
  from collections.abc import Callable
6
6
  from functools import partial
7
- from typing import Any
7
+ from typing import Any, cast
8
8
 
9
9
  import pytest
10
+ from _pytest.python_api import RaisesContext
10
11
  from dirty_equals import HasRepr
11
12
 
12
13
  from ..conftest import try_import
@@ -143,7 +144,7 @@ async def test_task_group_gather_with_error():
143
144
  return 3
144
145
 
145
146
  tasks = [task1, task2, task3]
146
- with pytest.raises(ExceptionGroup) as exc_info:
147
+ with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
147
148
  await task_group_gather(tasks)
148
149
 
149
150
  assert exc_info.value == HasRepr(
@@ -0,0 +1,271 @@
1
+ """Tests for broadcast (parallel) and map (fan-out) operations."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass, field
6
+
7
+ import pytest
8
+
9
+ from pydantic_graph.beta import GraphBuilder, StepContext
10
+ from pydantic_graph.beta.join import reduce_list_append
11
+
12
+ pytestmark = pytest.mark.anyio
13
+
14
+
15
+ @dataclass
16
+ class CounterState:
17
+ values: list[int] = field(default_factory=list)
18
+
19
+
20
+ async def test_broadcast_to_multiple_steps():
21
+ """Test broadcasting the same data to multiple parallel steps."""
22
+ g = GraphBuilder(state_type=CounterState, output_type=list[int])
23
+
24
+ @g.step
25
+ async def source(ctx: StepContext[CounterState, None, None]) -> int:
26
+ return 10
27
+
28
+ @g.step
29
+ async def add_one(ctx: StepContext[CounterState, None, int]) -> int:
30
+ return ctx.inputs + 1
31
+
32
+ @g.step
33
+ async def add_two(ctx: StepContext[CounterState, None, int]) -> int:
34
+ return ctx.inputs + 2
35
+
36
+ @g.step
37
+ async def add_three(ctx: StepContext[CounterState, None, int]) -> int:
38
+ return ctx.inputs + 3
39
+
40
+ collect = g.join(reduce_list_append, initial_factory=list[int])
41
+
42
+ g.add(
43
+ g.edge_from(g.start_node).to(source),
44
+ g.edge_from(source).to(add_one, add_two, add_three),
45
+ g.edge_from(add_one, add_two, add_three).to(collect),
46
+ g.edge_from(collect).to(g.end_node),
47
+ )
48
+
49
+ graph = g.build()
50
+ result = await graph.run(state=CounterState())
51
+ # Results can be in any order due to parallel execution
52
+ assert sorted(result) == [11, 12, 13]
53
+
54
+
55
+ async def test_map_over_list():
56
+ """Test mapping a list to process items in parallel."""
57
+ g = GraphBuilder(state_type=CounterState, output_type=list[int])
58
+
59
+ @g.step
60
+ async def generate_list(ctx: StepContext[CounterState, None, None]) -> list[int]:
61
+ return [1, 2, 3, 4, 5]
62
+
63
+ @g.step
64
+ async def square(ctx: StepContext[CounterState, None, int]) -> int:
65
+ return ctx.inputs * ctx.inputs
66
+
67
+ collect = g.join(reduce_list_append, initial_factory=list[int])
68
+
69
+ g.add_mapping_edge(generate_list, square)
70
+ g.add(
71
+ g.edge_from(g.start_node).to(generate_list),
72
+ g.edge_from(square).to(collect),
73
+ g.edge_from(collect).to(g.end_node),
74
+ )
75
+
76
+ graph = g.build()
77
+ result = await graph.run(state=CounterState())
78
+ assert sorted(result) == [1, 4, 9, 16, 25]
79
+
80
+
81
+ async def test_map_with_labels():
82
+ """Test map operation with labeled edges."""
83
+ g = GraphBuilder(state_type=CounterState, output_type=list[str])
84
+
85
+ @g.step
86
+ async def generate_numbers(ctx: StepContext[CounterState, None, None]) -> list[int]:
87
+ return [10, 20, 30]
88
+
89
+ @g.step
90
+ async def stringify(ctx: StepContext[CounterState, None, int]) -> str:
91
+ return f'Value: {ctx.inputs}'
92
+
93
+ collect = g.join(reduce_list_append, initial_factory=list[str])
94
+
95
+ g.add_mapping_edge(
96
+ generate_numbers,
97
+ stringify,
98
+ pre_map_label='before map',
99
+ post_map_label='after map',
100
+ )
101
+ g.add(
102
+ g.edge_from(g.start_node).to(generate_numbers),
103
+ g.edge_from(stringify).to(collect),
104
+ g.edge_from(collect).to(g.end_node),
105
+ )
106
+
107
+ graph = g.build()
108
+ result = await graph.run(state=CounterState())
109
+ assert sorted(result) == ['Value: 10', 'Value: 20', 'Value: 30']
110
+
111
+
112
+ async def test_map_empty_list():
113
+ """Test mapping an empty list."""
114
+ g = GraphBuilder(state_type=CounterState, output_type=list[int])
115
+
116
+ @g.step
117
+ async def generate_empty(ctx: StepContext[CounterState, None, None]) -> list[int]:
118
+ return []
119
+
120
+ @g.step
121
+ async def double(ctx: StepContext[CounterState, None, int]) -> int:
122
+ return ctx.inputs * 2 # pragma: no cover
123
+
124
+ collect = g.join(reduce_list_append, initial_factory=list[int])
125
+
126
+ g.add_mapping_edge(generate_empty, double, downstream_join_id=collect.id)
127
+ g.add(
128
+ g.edge_from(g.start_node).to(generate_empty),
129
+ g.edge_from(double).to(collect),
130
+ g.edge_from(collect).to(g.end_node),
131
+ )
132
+
133
+ graph = g.build()
134
+ result = await graph.run(state=CounterState())
135
+ assert result == []
136
+
137
+
138
+ async def test_nested_broadcasts():
139
+ """Test nested broadcast operations."""
140
+ g = GraphBuilder(state_type=CounterState, output_type=list[int])
141
+
142
+ @g.step
143
+ async def start_value(ctx: StepContext[CounterState, None, None]) -> int:
144
+ return 5
145
+
146
+ @g.step
147
+ async def path_a1(ctx: StepContext[CounterState, None, int]) -> int:
148
+ return ctx.inputs + 1
149
+
150
+ @g.step
151
+ async def path_a2(ctx: StepContext[CounterState, None, int]) -> int:
152
+ return ctx.inputs + 10
153
+
154
+ @g.step
155
+ async def path_b1(ctx: StepContext[CounterState, None, int]) -> int:
156
+ return ctx.inputs * 2
157
+
158
+ @g.step
159
+ async def path_b2(ctx: StepContext[CounterState, None, int]) -> int:
160
+ return ctx.inputs * 3
161
+
162
+ collect = g.join(reduce_list_append, initial_factory=list[int])
163
+
164
+ g.add(
165
+ g.edge_from(g.start_node).to(start_value),
166
+ g.edge_from(start_value).to(path_a1, path_b1),
167
+ g.edge_from(path_a1).to(path_a2),
168
+ g.edge_from(path_b1).to(path_b2),
169
+ g.edge_from(path_a2, path_b2).to(collect),
170
+ g.edge_from(collect).to(g.end_node),
171
+ )
172
+
173
+ graph = g.build()
174
+ result = await graph.run(state=CounterState())
175
+ # path_a: 5 + 1 + 10 = 16
176
+ # path_b: 5 * 2 * 3 = 30
177
+ assert sorted(result) == [16, 30]
178
+
179
+
180
+ async def test_map_then_broadcast():
181
+ """Test mapping followed by broadcasting from each map item."""
182
+ g = GraphBuilder(state_type=CounterState, output_type=list[int])
183
+
184
+ @g.step
185
+ async def generate_list(ctx: StepContext[CounterState, None, None]) -> list[int]:
186
+ return [10, 20]
187
+
188
+ @g.step
189
+ async def add_one(ctx: StepContext[CounterState, None, int]) -> int:
190
+ return ctx.inputs + 1
191
+
192
+ @g.step
193
+ async def add_two(ctx: StepContext[CounterState, None, int]) -> int:
194
+ return ctx.inputs + 2
195
+
196
+ collect = g.join(reduce_list_append, initial_factory=list[int])
197
+
198
+ g.add(
199
+ g.edge_from(g.start_node).to(generate_list),
200
+ g.edge_from(generate_list).map().to(add_one, add_two),
201
+ g.edge_from(add_one, add_two).to(collect),
202
+ g.edge_from(collect).to(g.end_node),
203
+ )
204
+
205
+ graph = g.build()
206
+ result = await graph.run(state=CounterState())
207
+ # From 10: 11, 12
208
+ # From 20: 21, 22
209
+ assert sorted(result) == [11, 12, 21, 22]
210
+
211
+
212
+ async def test_multiple_sequential_maps():
213
+ """Test multiple sequential map operations."""
214
+ g = GraphBuilder(state_type=CounterState, output_type=list[str])
215
+
216
+ @g.step
217
+ async def generate_pairs(ctx: StepContext[CounterState, None, None]) -> list[tuple[int, int]]:
218
+ return [(1, 2), (3, 4)]
219
+
220
+ @g.step
221
+ async def unpack_pair(ctx: StepContext[CounterState, None, tuple[int, int]]) -> list[int]:
222
+ return [ctx.inputs[0], ctx.inputs[1]]
223
+
224
+ @g.step
225
+ async def stringify(ctx: StepContext[CounterState, None, int]) -> str:
226
+ return f'num:{ctx.inputs}'
227
+
228
+ collect = g.join(reduce_list_append, initial_factory=list[str])
229
+
230
+ g.add(
231
+ g.edge_from(g.start_node).to(generate_pairs),
232
+ g.edge_from(generate_pairs).map().to(unpack_pair),
233
+ g.edge_from(unpack_pair).map().to(stringify),
234
+ g.edge_from(stringify).to(collect),
235
+ g.edge_from(collect).to(g.end_node),
236
+ )
237
+
238
+ graph = g.build()
239
+ result = await graph.run(state=CounterState())
240
+ assert sorted(result) == ['num:1', 'num:2', 'num:3', 'num:4']
241
+
242
+
243
+ async def test_broadcast_with_different_outputs():
244
+ """Test that broadcasts can produce different types of outputs."""
245
+ g = GraphBuilder(state_type=CounterState, output_type=list[int | str])
246
+
247
+ @g.step
248
+ async def source(ctx: StepContext[CounterState, None, None]) -> int:
249
+ return 42
250
+
251
+ @g.step
252
+ async def return_int(ctx: StepContext[CounterState, None, int]) -> int:
253
+ return ctx.inputs
254
+
255
+ @g.step
256
+ async def return_str(ctx: StepContext[CounterState, None, int]) -> str:
257
+ return str(ctx.inputs)
258
+
259
+ collect = g.join(reduce_list_append, initial_factory=list[int | str])
260
+
261
+ g.add(
262
+ g.edge_from(g.start_node).to(source),
263
+ g.edge_from(source).to(return_int, return_str),
264
+ g.edge_from(return_int, return_str).to(collect),
265
+ g.edge_from(collect).to(g.end_node),
266
+ )
267
+
268
+ graph = g.build()
269
+ result = await graph.run(state=CounterState())
270
+ # Order may vary
271
+ assert set(result) == {42, '42'}