pydantic-ai 1.2.1__tar.gz → 1.3.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 (514) hide show
  1. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/PKG-INFO +6 -6
  2. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/README.md +1 -1
  3. pydantic_ai-1.3.0/tests/cassettes/test_temporal/test_web_search_agent_run_in_workflow.yaml +151 -0
  4. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/conftest.py +3 -11
  5. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_dataset.py +22 -0
  6. pydantic_ai-1.3.0/tests/models/cassettes/test_bedrock/test_bedrock_model_stream_empty_text_delta.yaml +66 -0
  7. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_bedrock.py +32 -0
  8. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_deepseek.py +37 -29
  9. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_groq.py +0 -2
  10. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_huggingface.py +29 -37
  11. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_instrumented.py +45 -12
  12. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_model.py +42 -6
  13. pydantic_ai-1.3.0/tests/models/test_model_request_parameters.py +111 -0
  14. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_openai.py +1 -1
  15. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +1 -1
  16. pydantic_ai-1.3.0/tests/providers/cassettes/test_gateway/test_gateway_provider_with_bedrock.yaml +50 -0
  17. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_gateway.py +70 -33
  18. pydantic_ai-1.3.0/tests/providers/test_ovhcloud.py +109 -0
  19. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_provider_names.py +16 -9
  20. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_a2a.py +14 -6
  21. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_agent.py +41 -0
  22. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_examples.py +1 -0
  23. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_logfire.py +105 -20
  24. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_temporal.py +56 -3
  25. pydantic_ai-1.2.1/tests/models/test_model_request_parameters.py +0 -21
  26. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/.gitignore +0 -0
  27. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/LICENSE +0 -0
  28. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/Makefile +0 -0
  29. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/pyproject.toml +0 -0
  30. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/__init__.py +0 -0
  31. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/dummy.pdf +0 -0
  32. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/dummy.txt +0 -0
  33. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/kiwi.png +0 -0
  34. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/marcelo.mp3 +0 -0
  35. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/product_name.txt +0 -0
  36. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/assets/small_video.mp4 +0 -0
  37. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
  38. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
  39. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  40. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
  41. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
  42. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
  43. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
  44. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
  45. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
  46. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
  47. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
  48. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
  49. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
  50. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
  51. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
  52. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
  53. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
  54. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
  55. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
  56. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
  57. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
  58. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  59. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  60. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  61. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  62. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  63. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  64. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  65. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  66. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  67. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  68. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  69. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  70. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  71. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  72. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_mcp/test_tool_returning_unstructured_dict.yaml +0 -0
  73. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_complex_agent_run_in_flow.yaml +0 -0
  74. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_iter_in_flow.yaml +0 -0
  75. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_multiple_agents.yaml +0 -0
  76. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_iter.yaml +0 -0
  77. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_override_deps.yaml +0 -0
  78. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_override_tools.yaml +0 -0
  79. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_override_toolsets.yaml +0 -0
  80. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_run.yaml +0 -0
  81. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream.yaml +0 -0
  82. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream_events.yaml +0 -0
  83. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_run_sync.yaml +0 -0
  84. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool.yaml +0 -0
  85. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool_sync.yaml +0 -0
  86. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_with_model_retry.yaml +0 -0
  87. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_prefect_agent_with_unserializable_deps.yaml +0 -0
  88. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_run_stream_in_flow.yaml +0 -0
  89. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_run_sync_in_flow.yaml +0 -0
  90. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_prefect/test_simple_agent_run_in_flow.yaml +0 -0
  91. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  92. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  93. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  94. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  95. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  96. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  97. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  98. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  99. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
  100. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
  101. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  102. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
  103. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
  104. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
  105. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
  106. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
  107. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
  108. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
  109. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream_events.yaml +0 -0
  110. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
  111. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
  112. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
  113. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
  114. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
  115. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
  116. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
  117. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/__init__.py +0 -0
  118. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_evaluator_base.py +0 -0
  119. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_evaluator_common.py +0 -0
  120. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_evaluator_context.py +0 -0
  121. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_evaluator_spec.py +0 -0
  122. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_evaluators.py +0 -0
  123. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_llm_as_a_judge.py +0 -0
  124. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_otel.py +0 -0
  125. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_render_numbers.py +0 -0
  126. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_reporting.py +0 -0
  127. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_reports.py +0 -0
  128. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/test_utils.py +0 -0
  129. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/evals/utils.py +0 -0
  130. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/example_modules/README.md +0 -0
  131. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/example_modules/bank_database.py +0 -0
  132. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/example_modules/fake_database.py +0 -0
  133. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/example_modules/mcp_server.py +0 -0
  134. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/example_modules/weather_service.py +0 -0
  135. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/ext/__init__.py +0 -0
  136. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/ext/test_langchain.py +0 -0
  137. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/__init__.py +0 -0
  138. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_file_persistence.py +0 -0
  139. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_graph.py +0 -0
  140. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_mermaid.py +0 -0
  141. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_persistence.py +0 -0
  142. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_state.py +0 -0
  143. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/graph/test_utils.py +0 -0
  144. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/import_examples.py +0 -0
  145. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/json_body_serializer.py +0 -0
  146. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/mcp_server.py +0 -0
  147. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/__init__.py +0 -0
  148. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
  149. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool_stream.yaml +0 -0
  150. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_memory_tool.yaml +0 -0
  151. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  152. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  153. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  154. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
  155. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
  156. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
  157. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  158. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_web_search_tool_stream.yaml +0 -0
  159. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_output_tool_with_thinking.yaml +0 -0
  160. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  161. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  162. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
  163. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
  164. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  165. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_parts_ahead_of_built_in_tool_call.yaml +0 -0
  166. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  167. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  168. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
  169. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
  170. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  171. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  172. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  173. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  174. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  175. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  176. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  177. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  178. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
  179. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  180. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  181. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  182. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  183. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  184. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  185. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  186. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  187. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  188. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  189. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  190. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  191. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
  192. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
  193. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
  194. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
  195. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
  196. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  197. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  198. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  199. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  200. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  201. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  202. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  203. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  204. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  205. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  206. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  207. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  208. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  209. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  210. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  211. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  212. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  213. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  214. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  215. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  216. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  217. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  218. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  219. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  220. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  221. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  222. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  223. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  224. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  225. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  226. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  227. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  228. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  229. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  230. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  231. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  232. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  233. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  234. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  235. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  236. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  237. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  238. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  239. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  240. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  241. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  242. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  243. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  244. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  245. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  246. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  247. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
  248. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_image_and_text_output.yaml +0 -0
  249. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_image_generation.yaml +0 -0
  250. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_image_generation_stream.yaml +0 -0
  251. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_image_generation_with_text.yaml +0 -0
  252. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_image_or_text_output.yaml +0 -0
  253. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  254. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
  255. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
  256. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  257. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  258. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  259. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  260. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  261. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  262. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  263. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  264. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  265. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
  266. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  267. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  268. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
  269. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  270. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  271. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  272. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  273. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  274. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  275. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
  276. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  277. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  278. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
  279. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
  280. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
  281. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  282. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  283. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  284. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  285. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  286. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
  287. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool_stream.yaml +0 -0
  288. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  289. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_multiple_images.yaml +0 -0
  290. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  291. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  292. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  293. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  294. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  295. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  296. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  297. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  298. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  299. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  300. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  301. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  302. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  303. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  304. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  305. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  306. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  307. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  308. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  309. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_vertexai_image_generation.yaml +0 -0
  310. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
  311. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  312. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  313. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  314. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  315. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
  316. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool_stream.yaml +0 -0
  317. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
  318. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
  319. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  320. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  321. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  322. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
  323. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
  324. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
  325. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  326. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  327. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  328. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  329. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  330. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  331. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  332. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  333. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  334. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  335. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  336. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  337. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  338. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  339. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  340. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
  341. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  342. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  343. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  344. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  345. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
  346. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  347. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  348. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  349. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  350. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download.yaml +0 -0
  351. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download_response_api.yaml +0 -0
  352. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  353. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  354. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  355. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  356. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  357. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  358. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  359. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  360. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  361. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
  362. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
  363. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
  364. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
  365. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  366. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  367. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  368. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  369. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  370. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  371. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  372. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  373. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  374. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  375. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
  376. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
  377. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
  378. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  379. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
  380. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_text_document_as_binary_content_input.yaml +0 -0
  381. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_text_document_url_input.yaml +0 -0
  382. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  383. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  384. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  385. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  386. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  387. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  388. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  389. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  390. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
  391. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
  392. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image.yaml +0 -0
  393. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image_stream.yaml +0 -0
  394. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  395. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  396. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_history_with_combined_tool_call_id.yaml +0 -0
  397. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_and_text_output.yaml +0 -0
  398. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation.yaml +0 -0
  399. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_jpeg.yaml +0 -0
  400. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_stream.yaml +0 -0
  401. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_tool_without_image_output.yaml +0 -0
  402. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_native_output.yaml +0 -0
  403. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_prompted_output.yaml +0 -0
  404. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tool_output.yaml +0 -0
  405. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tools.yaml +0 -0
  406. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_or_text_output.yaml +0 -0
  407. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  408. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  409. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools_web_search.yaml +0 -0
  410. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  411. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  412. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  413. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  414. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  415. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
  416. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
  417. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
  418. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
  419. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
  420. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_multiple_images.yaml +0 -0
  421. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_non_reasoning_model_no_item_ids.yaml +0 -0
  422. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  423. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  424. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  425. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  426. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +0 -0
  427. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  428. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  429. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
  430. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
  431. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool.yaml +0 -0
  432. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool_stream.yaml +0 -0
  433. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
  434. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
  435. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
  436. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  437. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  438. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  439. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  440. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  441. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/mock_async_stream.py +0 -0
  442. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/mock_openai.py +0 -0
  443. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_anthropic.py +0 -0
  444. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_cohere.py +0 -0
  445. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_download_item.py +0 -0
  446. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_fallback.py +0 -0
  447. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_gemini.py +0 -0
  448. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_gemini_vertex.py +0 -0
  449. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_google.py +0 -0
  450. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_mcp_sampling.py +0 -0
  451. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_mistral.py +0 -0
  452. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_model_function.py +0 -0
  453. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_model_names.py +0 -0
  454. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_model_settings.py +0 -0
  455. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_model_test.py +0 -0
  456. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/models/test_openai_responses.py +0 -0
  457. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/parts_from_messages.py +0 -0
  458. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/__init__.py +0 -0
  459. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  460. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
  461. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
  462. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
  463. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
  464. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  465. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  466. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  467. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_anthropic.py +0 -0
  468. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_azure.py +0 -0
  469. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_bedrock.py +0 -0
  470. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_cerebras.py +0 -0
  471. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_cohere.py +0 -0
  472. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_deepseek.py +0 -0
  473. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_fireworks.py +0 -0
  474. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_github.py +0 -0
  475. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_google_gla.py +0 -0
  476. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_google_vertex.py +0 -0
  477. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_grok.py +0 -0
  478. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_groq.py +0 -0
  479. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_heroku.py +0 -0
  480. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_huggingface.py +0 -0
  481. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_litellm.py +0 -0
  482. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_mistral.py +0 -0
  483. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_moonshotai.py +0 -0
  484. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_nebius.py +0 -0
  485. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_ollama.py +0 -0
  486. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_openai.py +0 -0
  487. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_openrouter.py +0 -0
  488. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_together.py +0 -0
  489. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/providers/test_vercel.py +0 -0
  490. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_ag_ui.py +0 -0
  491. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_builtin_tools.py +0 -0
  492. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_cli.py +0 -0
  493. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_dbos.py +0 -0
  494. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_deps.py +0 -0
  495. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_direct.py +0 -0
  496. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_format_as_xml.py +0 -0
  497. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_function_schema.py +0 -0
  498. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_history_processor.py +0 -0
  499. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_json_body_serializer.py +0 -0
  500. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_live.py +0 -0
  501. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_mcp.py +0 -0
  502. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_messages.py +0 -0
  503. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_parts_manager.py +0 -0
  504. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_prefect.py +0 -0
  505. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_settings.py +0 -0
  506. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_streaming.py +0 -0
  507. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_tenacity.py +0 -0
  508. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_thinking_part.py +0 -0
  509. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_tools.py +0 -0
  510. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_toolsets.py +0 -0
  511. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_usage_limits.py +0 -0
  512. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/test_utils.py +0 -0
  513. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/typed_agent.py +0 -0
  514. {pydantic_ai-1.2.1 → pydantic_ai-1.3.0}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 1.2.1
3
+ Version: 1.3.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.2.1
29
+ Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.3.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.2.1; extra == 'dbos'
33
+ Requires-Dist: pydantic-ai-slim[dbos]==1.3.0; extra == 'dbos'
34
34
  Provides-Extra: examples
35
- Requires-Dist: pydantic-ai-examples==1.2.1; extra == 'examples'
35
+ Requires-Dist: pydantic-ai-examples==1.3.0; extra == 'examples'
36
36
  Provides-Extra: prefect
37
- Requires-Dist: pydantic-ai-slim[prefect]==1.2.1; extra == 'prefect'
37
+ Requires-Dist: pydantic-ai-slim[prefect]==1.3.0; extra == 'prefect'
38
38
  Description-Content-Type: text/markdown
39
39
 
40
40
  <div align="center">
@@ -78,7 +78,7 @@ We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI
78
78
  [Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
79
79
 
80
80
  2. **Model-agnostic**:
81
- Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel, Nebius. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
81
+ Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel, Nebius, OVHcloud. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
82
82
 
83
83
  3. **Seamless Observability**:
84
84
  Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
@@ -39,7 +39,7 @@ We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI
39
39
  [Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
40
40
 
41
41
  2. **Model-agnostic**:
42
- Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel, Nebius. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
42
+ Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel, Nebius, OVHcloud. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
43
43
 
44
44
  3. **Seamless Observability**:
45
45
  Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
@@ -0,0 +1,151 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - application/json
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '336'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.openai.com
16
+ method: POST
17
+ parsed_body:
18
+ include:
19
+ - reasoning.encrypted_content
20
+ input:
21
+ - content: In one sentence, what is the top news story in my country today?
22
+ role: user
23
+ model: gpt-5
24
+ stream: false
25
+ tool_choice: auto
26
+ tools:
27
+ - search_context_size: medium
28
+ type: web_search
29
+ user_location:
30
+ city: Mexico City
31
+ country: MX
32
+ type: approximate
33
+ uri: https://api.openai.com/v1/responses
34
+ response:
35
+ headers:
36
+ alt-svc:
37
+ - h3=":443"; ma=86400
38
+ connection:
39
+ - keep-alive
40
+ content-length:
41
+ - '12089'
42
+ content-type:
43
+ - application/json
44
+ openai-organization:
45
+ - pydantic-28gund
46
+ openai-processing-ms:
47
+ - '45591'
48
+ openai-project:
49
+ - proj_dKobscVY9YJxeEaDJen54e3d
50
+ openai-version:
51
+ - '2020-10-01'
52
+ strict-transport-security:
53
+ - max-age=31536000; includeSubDomains; preload
54
+ transfer-encoding:
55
+ - chunked
56
+ parsed_body:
57
+ background: false
58
+ billing:
59
+ payer: developer
60
+ created_at: 1760537022
61
+ error: null
62
+ id: resp_0cc772278fa4f4140068efa9be8878819ca691ebcbe9f1f6be
63
+ incomplete_details: null
64
+ instructions: null
65
+ max_output_tokens: null
66
+ max_tool_calls: null
67
+ metadata: {}
68
+ model: gpt-5-2025-08-07
69
+ object: response
70
+ output:
71
+ - encrypted_content: gAAAAABo76nsGZ3D61NVA0XbnShNHmz5T4RonYmRGx_pRGkEbVDw7m4Ld84NA0js4svXie5FHgTxnkjohBfv597Y9YkQPDKDKkT80tQ41fo4SYkJ4r3BUtgD-DNrpssBBlK_uT-FfWeJlwTTvz6hfl1jP8NK54ZThlLzeSyhoDkQoiJf7d7rmjro49oy8owOCGlod1oiBBcZoF4zXL04lZXeOmrN40e6zIrEXGIb-iC2NL7O2R3GbipQcbq6zy2RpIbmjgmXRTWjtaMmWcJwry4oqYsud2UHojpkhXeN-0Yh4gPfzWbgvYDO47Lc48t5UkNDuBLXezNyRX_Pmlocn-h9RKNEdkq1iZau4UyY_1Fo8LKm0hQuE4x4ZKzRed2KJM4YjwSomtcGshDGKmZw94kabHY9tDI6y5-mWFhHqvjZt50xJukx2iOC6KKKk0iKiqcCeNb4r2K0G_xhLIS-sjbG9rv_762G3AiZ041xEwbStrqovRuTu52YV6b70gnuzvEG0QF9hToUpbZZQx1prAIE1WILXAZrDxvHB2czq2PF3WP0QGWdbJpO3ZSm9osjX1qqNgoiOArBUYtOQUbYM7JtLz92Es53GVeIXlHSlE_VT92ISO6n8UyAGLYuWLd-nTELBbsjNWmOo1LFpUsi7h0rVR0pbs2jTUDRLCn74ucVxYX45dTx0P-OKfNrKDQNaRCyvi-oCFdrJUc-ecm-EaVoqz0b63HHzhKNXFsmPeFZl5gtGnXARqXrbcBgel-wviXlMLt8KaWWMrEU_yq8KjACNeQy8POZsimzWT95oMAjD_J35JgeXajkYIFHuh1ZRb0awKdXPCUp6kR-nL_cBZco6nZARImw-9VR7527KT30aGvPhSYCrtqP9QXmI94IB9mYvGsCCj1ooQ3JW4nzvThJ3KN9xNZaMkvE_pORulsxPLfKfELoy7i74HWBZ7X5_7zLB-Rv-Zj58YJiFtpVYGSzKd2UfbI8GvYaakGFfN2LqzG4k2UA2rIh97nbMfbdVtUL0PuINsHc2Qr1aHbeaiHavya4QCGt1w0cds37gy06dqdL5Hny2NzhSekkUK2vDGV-evUpIkDeK3hY93NQYgwppnmdvMDYOMUl_VnLH5m-3FIW0bTJkxC2zYR4A1lkD_xhawH2KD5lrZS4-qttoDdfWceV6PIW3J7EnP0j9vq5Twkx9phCXWOL0-_7fEKwwmC2VwVvf43rbqbF5ZQpLl_nNiicJX4nmV_umniCS_hUjmHTHHyagnJjUzD7ZHFjF7CenXS4uag4TlNEozrxEv4vcZtWd_A-zSpqYLdGty2Zp16nkeq2DhF137AZTohRpDttSis-oh18GQzgvyDb3kUyb23CHcH9DZwScI4QDiDjoE94mzOe4_MjSyrY4d4stLYr5DYlUc_zE3jWp10QiNz8Yz3K4sm8aM_cPteHRuwGBPmjYWKoNwhsLEiHP3aNE-MYpkcV4oAJk8MR3NU3asRRZUD5CNj66gkRlpcsd6dTUPSJISIZM415mE7uG8HF0inxGn_VXSIFxV7PfjdIs6WE58dwEEe7QXTpxWjkuCCykg43znRi0G3Tscuq8oU7VUe5dTAfGDA-nwkroCFWyfpHT_VX92l4BFM6Pm9GF1XJ3_cpbp_TMkrLNwkklGeZSbghTU0RqKdGfffyrdZNqRW16BESjHc7Z8SsC8QhLjGvavyFHJOBB3vgwRAFDskmFlhTKMAsJqaq_tqJ550UrrRTmjJ1sH3gOozKgryOU9i7w2rlnbn24YkA9yCvIVSaB7bW8_Z0TbhoWY_0D25OQqc8pgOGECEHDzGOX_k5wSevf6WEdxoL9wY0PpNxGz_TwA0DMOd4vModAeCGDujQSfPS7PDUm9qtZMZtwyjZ4PKQ_K09-sKg7X4PUQ9DAdygNmHQCjK0iqY-fhcJwkApX1ichrxy6M9kA1EM8rO5fD4pTaRLoqNVutc1sUBq93DXMEjE73UTCfrygIOK2brw4P1LBNQe_CP3J65obJQ8tMTXyemrnLPYIzw=
72
+ id: rs_0cc772278fa4f4140068efa9bf0dcc819ca630d7697c77a632
73
+ summary: []
74
+ type: reasoning
75
+ - action:
76
+ query: Mexico top news October 15, 2025
77
+ type: search
78
+ id: ws_0cc772278fa4f4140068efa9c5aa14819c871c50351e98af40
79
+ status: completed
80
+ type: web_search_call
81
+ - encrypted_content: gAAAAABo76nsliyRJLQ8_6svrujSylQVBRqPDxfWb2I2yr61HB3Rvh8mkk4ZPdzVyktR-gyzPkY-X5VtSV3rjjMCRvU6nGi8j9MmS-pULY8splSAdXCTcxm5LoH6laEAtugW0p6HlxkaehV4RLM2RNqiFbx3KMciX3JTkg9AJcchLtGiSvaV4KrI6gO7BoMY_L9lPsTAOJMCWmD6eK3S13Rc61XPEsUhLq7W4h_mz-A_y6K5Hehqu4sEzLlWgAI3bVogiULK0UYQqgmRkL5VhZCw3RP7lqV_3eDD-7hJEgH7tnW3aYkSt-6f0PmuDoDdF5UOdhgjYLyr2KGyXokoRVF310d4b7OEJsFycF4-mqtD8-r6RxjmSJVp95Oye-3X2HhXKwanOhJbtymEa77qy2hIC_8p222na1_wBo9awrBaq8T1cyGauiMEEbVcqVkhwE3mQzGYz2EzbvM-KZ7fguzOijBP3kCaJV3mF4qAVkYG_VDn1jEPd-s1CW34HwZevytQBNizpEJwysAqNHbW6rUgXQiq8gkL3N0MIGffabwI1ZckYikOpQrUw7C9kgVMgy_8jr3nlJ3c3nqLwM5dxB95orArSk-GWyk7BRa_N6htBB2xwrmcbwO8lSF5LCcW5zc6N3O24Vne3YeDVB9rfVMrOwk0pKukSuYmiZpws5U4Yuc3ZFHJfpU-Nswbl4SrjxZATG5Eyzo-ecUMIW-MsifLMwLadoxaq3nafpwcQhE4AH4U3Rgi_NOeHuP6iMeStRxUEi_Q7cRASg7TGZgRYAXVmRjaB0X_LGjA_oITzmfOKewUxG2SwtTi3X0-_dxMzQXVNvBp6nKv3THhnM-qAp9rXowmseH-WRqvsuZR0rwuYHig1nLA_gibGmWJ9VwPrhasxmA6kc-PlGkvoYE59lLL3HQYUzNuJsosSRtHix7gcmkpASBIJlPzzvo_10aE9peHNoam78vm8QcFxKA6Lrynva5qCndxXGN7Phh13mkFKmYYGwdufaHDEpeNH0qAWv2GsVHpHKENe0Ll2XqJNeK_lF-zvzFBh0DeRfVy3Lq3G6ZtNvV_sJslzcNQzqqU7gRJEsnzC-bfqJsTGc1NWbYG86OgMV9FmsUohGlDVNIMxAWwtEQXJitWR7UQpei528hz6pJj6uKzrTqoNXAUVjJcQz5DW9wR8OYwdl95FzFHGmqKn8cPTVEvnTV9ISCHPNJ4Hy6_qb2OaUh624h51eo8fvOye_qBFE4B0nnrhbmdtN9PYoxdcF_hvk0Dxt5rvOmiqeTlxueE
82
+ id: rs_0cc772278fa4f4140068efa9c91ae0819cb57bf002b036ffcb
83
+ summary: []
84
+ type: reasoning
85
+ - action:
86
+ query: inundaciones Mexico octubre 2025 muertos desaparecidos Veracruz Hidalgo Puebla 15 de octubre
87
+ type: search
88
+ id: ws_0cc772278fa4f4140068efa9cb9a94819c86a1054697faa9d6
89
+ status: completed
90
+ type: web_search_call
91
+ - encrypted_content: gAAAAABo76nsdJIaRBHwtMtyHUET6TXVN2QSC9B3268qye-aJa-3t_U3_I8F5URYG19B9IuVC0RDpe2iBHtKklE6KIE_Ugzg57cRDo0wiTQxRDXYwjFxKPXCNyRQHYHkbPh9Dohk8nRcNt9mARzOpwgB6qknrb8odOOhyqe3q8bZ7aAqTh-qimwxkSssyAb-AOjYGAwSXmr2GErt284wA9jughihwSsiRxBmUSwnMx2Tcg8h1Kr4i2lnGcBPgWX_0bCpXGZY4A_JItQv-6Z0erPq5R9xPiYYlMDApTbBBOvFVCUXWuDx8XeAGYm0V18fJxXiEHuktll_Tj7o9c8GDbLF6V_hSsUsPAIQ0RCoKJ6hP4ZgE5CA1ml3WQa7IbPHBU-wKgHcKhwD5eBsRkE4DFfBx7zKTnZtB8FghGYYKkx4Ww7VZVqifoO8JAMvBsmZT3CWp6z69hCg4BOaXnfTE2llfA2B4b0oBTrCl9c4qG5dfx_ELVfRxOJyr8zI_Rxw_xj-fYgCrFb8xfa8XCvbV7thZMAac0eZyq8M9PGRbjvmKn7jNPYK-c2a46Ia6t_s93xxxUtTsCr-rvn2gKTMWm9BPTWqpqkAc2ZTCYxgT7QSs77IAOQuk_9OHDNBM-h0ujCYfzISsieGSnwIwMS3hfg9qiezUcNcwHOHxH7n3T2JfNRa2k37sJmxrFJOPyMezEqar1-XQvAEtXwNcNbYIykNZ4s8G3lCJAnvEzoRzCAmiiAndtejPlVrSZUhsWazjPcDnZ458-1nnMfb-vGK0Cybz3EdNWMFnWN5bjLIP3lc_wLPa_dWSz1Dm_bTckJWKAujV1jQITft04Nlo4i9vLW5vWb7Jsml4fiSYtvuALQkNzhOlMbdKvrL29UFobkfCB1hX4Cgj-Hkn7P5WjeYtxKXkOb171JGIEav5qQcfbImOuFxhg_7EUbaefIyGa1J2eGb7DRCcmbqnur5hvzMzPGNqHxWvEunVxf9ZvUEXsPoNPyC2Jkot_ntLSlwRtuuMqu9teK6NfWi0qCJeqbhEN-OWDpFtrmSEYLr1FNS5_XM6_VZ10o1GRW8notAm5RVdn7zDvjs_s5cXv4efs0UanOOAS6e_OIJeX7VHdiKLnHLXxZ-adp5NR2kKIw0hgtvcrCR7KHvr4itOny8zy_7EfeYgX8B66favNVeu6JLGEVIOs1bN3_evQYUyRPJAn3FwM_DIUZqQ1xJVewm1RAxvaENoT_gh3pib4vdjXxeGjJg7VsAkPpiHf0TSYvGKiAtdUuUHNfNv8X5MGuh40ST8ji-UHeWkUe8fzcVoypPVNApyO9bET3RgirucglYbObm3WwucxyZDkJC9nYb1LptN6K3xvJ8a97njRCnzjE4Z0SfOtRBotblGo0IN7cCVI-SJrOlXXdvm8PUOOofKmzM9Y-Seo_Vapq3NBfLGZar7Sg1RtHXTXpJABZZ1HNgfvmw0qqKka-cUyS2qByP6d1ZRc2MTAofNcJXEiiBF62f1JXK0yMwKyCacPBQ26J7xHvmDtz-lAZGO6n8GvWJy2UkGthYZLIHTfyKfc46t74ZunD1daW5_QK7dCMMdXylK8lQaSBtK8UIzlbDcT7cIeoO-9iGSEMj623RjwMqpAJLYW8cuoccnTnH3cJ0032hhuaTyvPnW98_2QdzERSY6booWeLI5QI4yWcmJgs8gnhQC1-UEZrZ-Y3_344Xv8t2Dk-ihlHMN0aZ5MpBkT_FXqspXn5a6HIVLEhdtckz1LWK6ZZxcMDBVZAy5pqTmIs_Ro303y1_5Z_oiKSl-ISCkUhCGCCb5JpLozG5tJZTqDij8u91L4c3fgzxs2Myk-Dk8eiAtNyR1kJTPLzFTqHrFvlTXbU5UaHqBjGLhlVXY-9H7vRB4Ssk0NWyQY5jv1L2jnhy64l6KtNBqY827HVOnsaT-XWlM4McnFT1MJ-qO41NzR-gTZva-KzjDgVj50_MBmxeuBLsnDVq26Iw2d9OQpyzo_qiN_Fs2G9zpaUr84-W9mNsoV3TljiQk9-D1xdy4ZXJ7oicW1Ah-Ua4lNGI8wKHujDDX-sw0FaEQfKKPrN4Ou_lXAStakNhnvn2C3sbPlUk6Mie52ky1Pyq9L3SMwFtNa_Sx0imAANBAqekA6BMwc_Q_Y8jgmtZatBAibaWfWfcCyWNy832S6wJ5L0_fOhYVwT4PMvOw9AIwQbTSAJtuLN7zxZOv2Qw5_UnatJR6MgXbQc0BrmWI_FGuZdOuv2TMGKZkV9ynaZ5L-Dk0P90lpZwNmpbddh1y7TQNY6Os6YPwwcyPSMgTD1fY3eJPWDEv8OxRIrFJeth_tJMb-IX2fozD7ZAXUXuEFqtCFZ7yqoO-AbW8rgLWU5ILiJJk7neHSyWrsiDf0eyILU-tC1QoGuP-Md5hehvrobjVQgkARdzIUAy_8RIeG956NoG1nqIM-5tu0A8xjv2rBf5vTw5p6rbtCiQtTacMVrprXLz-p23XqrOAZuEvhc7mMJBwEJcGq8w12oil-oakW3gbHWzKWUb_6bLGYaI7uBjSH_HDtcU79uONBYGDKRG_eZa0EcupHQ8twVBNviyz2bSubTN4gWvjz4k1nHkmQBagFQzy6ogcCVldZVyLtib2TfMH64DVeEFBEM-aUKcs81R42r8aZjW_I3RFRGS8hodNs0Y1ZfkYms_kBNOZc3pw2iP4rtOLDWatSGfUWN8owiQETiOI2AD70HoXcVBmjyRpxheI_mBVz6YIxMzf0esd5U118NzOyxqfQ66EvmAzmN0iSrbR2Vucx4CojBzweQ0KoWn_HV4U3qjkdXcmdvncbTK18LPoOhS6z7BhEKXDhd1bhI1f5AyirZhqR8xvK0r6aeQdkL7OWyQoDWJM-CRtn0S4O3qucwNA1XFVPt5fF8rysehSjLN4GH0AAueDBc9_BGx0fQMsmpRjUO71W0P-C4pY-eYvUu60u6ng2YELowM7Poak8xWOsvlGqYuXj2s4Tuj6hJPeD6vPoUDaxfFPjMijSkpfASxJvNbE8DpftoPrfiXIG-LDfGIXiJISgDzBgTllf3cw1lhSYq51WfqcBaWsIvXWGGbvnfqE2bA7nRwNUBkmxd9NC38-DAAySadaHIBjsIgv7VEKKp841cvTQ4bB-8Fp1d7pZOvMsq4GjaKCQNfjNcWL87KyyJ-GonLExJStrdNGxwS_9AYNA-6KEdtz-V9YRFzbkHl4406ueOody8O7jvucmoyKFTU1S2yJ5Wbd1gNYA-6wV_II78hbI6dXjTEGvdbRWIKkTktnD6pgDhHjkdS6uzsTcUYTkj60SxMujKv2xlRevDANdgFDB0-zKkv0ntRINr5_CHmnLbW3NYAAyGQ9wOgvfNEMno0EVLQU9F596lscKSXAl4djL1F_GSSn80lb0ujdu77Xh130yORuio6SSF9DAXg1wYI8O0Il2nyJg-0DWTyy6mCG4zPmzyS6yRH64o4kOGmZBuOJSFvcF2Qy0h0h0xBvYhN9fBJh8AcjuYP9TWB8s8Z3KKYOXYlPTPlbN4BaowBVfmzG6_aJaDvUsT1bk9IruW4ENtwf6OxXs0nqEwQEGBYWDAmcdS5hESe7JuVQ1O2bLkg2fYl63VznOUIrYW5hbHMI6pZ3EMsuJD5ITzULCl-WlX_qmduuAKnnFbSzua4Rv6ZUOk_GC-BCIfcnro0RTJTna2hl8M-YP0g05v68zDFl4x1s1xsvii8VF4p_t6EGaPY00iUgB__4uWwdIkuywTAaLgvdtWonA7aCvEZr6a04ZyUD7jf6Acd1cwxkCe2Ed-GVd9f6vQcuXUwAwnuK_gsWsqLfPfA_9U3mxMABZVXjuLwxZlxGW1rxdRQZUdqeQvIBLVt3ozMyqu4mQfs0r4gaLUFff_qHkckNvbvJwUDquokNysr0e1matigksVRDUUQc5aXvR8KeQZKUvjQLh5Rv_gvUmkBO2pQQUJCG3IPQqf6lU1Y_86sxHVegaoZ52jbbEq32NO9gQ-3LlMPvmm-FTmdfaBxNZZ2GVHgjLdvmshTd3XrdrRlqXc2dwFsLbIi6Efg6Zy6Vr8HeZiHWtJjiNT6jurXE0aNkq3SSWHEW6tNcn1BXToFUI7R4vozxEzwQG9e-acnS6OZsRie5dDmQ02CXSlJYu8s8TwyXEhy3vmaGDrtVIXlBGdb-6lAjspALKC4I6k_6uwiv492gFe7usw9mvHgIe9b5y2h0z1VUZ1lr152G1Fw_2R-1C6RxwUPZuD3ZVSw5LvO18VApN4_jDwD6l6i9QcCAGgEtz5rSp1SfbYXpTCFd5ulbZAh0JgU_OUnK4QlXZL7vdfs0cKU43IQaDAwg2zJjKodk87JDoe6YmDfrFWZ_qkPWdfbVtvKOMg2bMqJVU0LbKGH3H_MKnQVnHH7UkcdTfu7wwbYIdddQHQPEzuzOwBTg9nz46nSKfZCIQ3FES6gP7bBDuw3IhwzZq30hAS0XPspU8OQuvAQcUcpjSYlKkNvWvw1ZaGE-wJsA2UgyUDeQ_gUAmvjEqXTkomk5EDiDWg4R7TMi3bzbVUylLcNOopOi_X6Quij0dWoV6tZJqKq8z1BJUeV7Dl9dcnN24MTQ4YFMV3r59zAD4_DBWkMorwfllcFB1-i3mq2RdtErHFay7BATssuoSvaVhZbfcc6OsqE6UcZTUr7ctBCKIpg5EJTAZRgZcUTUQMQYaJmCgBi5QY4UIf9oxxd8URQKz-nT2G9vKrCTRC7h2J2aG3RaM4TVYzJQUADkbj5ejVMTELy2JjG_LQLMLzd_yR4VeSOfn3RVbo_P7A5P0bOp4ftma8Qe5kDC2L2H252tNr2gU82ozygJdqi_2ZB_ladw5fojKVMe2w1dBg_g-c5HmJlIxWp0N_dj8hDTS_zC2J6X6zIFkhW9JTSRgVzdDJd8oZEGNtTbAo__R74yEHll9L52bRu68NTxrT4cQ4RIbA5dQUl0QgNwRr67roltQeWXj1eS47Pe070ntnScAgTCF8431lM2XiK1iPP6fbi23SWE6oD4JQaaAQkeHoBqjqPcTeoPSHLmpKkZS55e6XPlxbQp_exrt8yLJv9fs7wrfG0egRzJwIRd_H8vxCg7f65EUIIAyUp8TTaHpYWQJMmmWtAa035TcuwzRtswUYcWLZZWbqBB90m9EM9huFAmF6xJypAfjWFRm0Mtwh7AgqTTEuw6cnNw5lzGQKJqnP2kCiZ6gVb97A67qQZMOs_zDp8E68RgEzDIm14JEAKrIs0nI3VqrNyy0DGzyvn6TWZUAYqUdUGjchOYc_tj3_cr7_Icu1VWG48SNIlXMKHi0k09efcyTzfaaTXQS5UdlenHvFg9j1WO6oyORpaGbA3L5XUNwH1yX6d9wN8
92
+ id: rs_0cc772278fa4f4140068efa9d096c0819c99fea06cc2948069
93
+ summary: []
94
+ type: reasoning
95
+ - content:
96
+ - annotations:
97
+ - end_index: 281
98
+ start_index: 188
99
+ title: Landslides and flooding cut off 300 communities in Mexico with dozens dead and missing
100
+ type: url_citation
101
+ url: https://apnews.com/article/5d036e18057361281e984b44402d3b1b?utm_source=openai
102
+ logprobs: []
103
+ text: Severe floods and landslides across Veracruz, Hidalgo, and Puebla have cut off hundreds of communities and
104
+ left dozens dead and many missing, prompting a major federal emergency response. ([apnews.com](https://apnews.com/article/5d036e18057361281e984b44402d3b1b?utm_source=openai))
105
+ type: output_text
106
+ id: msg_0cc772278fa4f4140068efa9e8d5c0819caea9f8f22692335d
107
+ role: assistant
108
+ status: completed
109
+ type: message
110
+ parallel_tool_calls: true
111
+ previous_response_id: null
112
+ prompt_cache_key: null
113
+ reasoning:
114
+ effort: medium
115
+ summary: null
116
+ safety_identifier: null
117
+ service_tier: default
118
+ status: completed
119
+ store: true
120
+ temperature: 1.0
121
+ text:
122
+ format:
123
+ type: text
124
+ verbosity: medium
125
+ tool_choice: auto
126
+ tools:
127
+ - filters: null
128
+ search_context_size: medium
129
+ type: web_search
130
+ user_location:
131
+ city: Mexico City
132
+ country: MX
133
+ region: null
134
+ timezone: null
135
+ type: approximate
136
+ top_logprobs: 0
137
+ top_p: 1.0
138
+ truncation: disabled
139
+ usage:
140
+ input_tokens: 12594
141
+ input_tokens_details:
142
+ cached_tokens: 3200
143
+ output_tokens: 1150
144
+ output_tokens_details:
145
+ reasoning_tokens: 1088
146
+ total_tokens: 13744
147
+ user: null
148
+ status:
149
+ code: 200
150
+ message: OK
151
+ version: 1
@@ -14,7 +14,7 @@ from datetime import datetime
14
14
  from functools import cached_property
15
15
  from pathlib import Path
16
16
  from types import ModuleType
17
- from typing import TYPE_CHECKING, Any, TypeAlias
17
+ from typing import TYPE_CHECKING, Any, TypeAlias, cast
18
18
 
19
19
  import httpx
20
20
  import pytest
@@ -463,21 +463,13 @@ async def vertex_provider(vertex_provider_auth: None): # pragma: lax no cover
463
463
  pytest.skip('Requires properly configured local google vertex config to pass')
464
464
 
465
465
  try:
466
- from google.genai import Client
467
-
468
- from pydantic_ai.providers.google import GoogleProvider
466
+ from pydantic_ai.providers.google import GoogleProvider, VertexAILocation
469
467
  except ImportError: # pragma: lax no cover
470
468
  pytest.skip('google is not installed')
471
469
 
472
470
  project = os.getenv('GOOGLE_PROJECT', 'pydantic-ai')
473
471
  location = os.getenv('GOOGLE_LOCATION', 'global')
474
- client = Client(vertexai=True, project=project, location=location)
475
-
476
- try:
477
- yield GoogleProvider(client=client)
478
- finally:
479
- client.aio._api_client._httpx_client.close() # type: ignore
480
- await client.aio._api_client._async_httpx_client.aclose() # type: ignore
472
+ yield GoogleProvider(project=project, location=cast(VertexAILocation, location))
481
473
 
482
474
 
483
475
  @pytest.fixture()
@@ -1555,6 +1555,16 @@ async def test_evaluate_async_logfire(
1555
1555
  'gen_ai.operation.name': {},
1556
1556
  'n_cases': {},
1557
1557
  'name': {},
1558
+ 'logfire.experiment.metadata': {
1559
+ 'type': 'object',
1560
+ 'properties': {
1561
+ 'averages': {
1562
+ 'type': 'object',
1563
+ 'title': 'ReportCaseAggregate',
1564
+ 'x-python-datatype': 'PydanticModel',
1565
+ }
1566
+ },
1567
+ },
1558
1568
  'task_name': {},
1559
1569
  },
1560
1570
  'type': 'object',
@@ -1563,6 +1573,18 @@ async def test_evaluate_async_logfire(
1563
1573
  'logfire.msg_template': 'evaluate {name}',
1564
1574
  'logfire.span_type': 'span',
1565
1575
  'n_cases': 2,
1576
+ 'logfire.experiment.metadata': {
1577
+ 'n_cases': 2,
1578
+ 'averages': {
1579
+ 'name': 'Averages',
1580
+ 'scores': {'confidence': 1.0},
1581
+ 'labels': {},
1582
+ 'metrics': {},
1583
+ 'assertions': 1.0,
1584
+ 'task_duration': 1.0,
1585
+ 'total_duration': 9.0,
1586
+ },
1587
+ },
1566
1588
  'name': 'mock_async_task',
1567
1589
  'task_name': 'mock_async_task',
1568
1590
  },
@@ -0,0 +1,66 @@
1
+ interactions:
2
+ - request:
3
+ body: '{"messages": [{"role": "user", "content": [{"text": "Hi"}]}], "system": [], "inferenceConfig": {}}'
4
+ headers:
5
+ amz-sdk-invocation-id:
6
+ - !!binary |
7
+ Zjg3NDYxYzEtZDQzZS00YThkLTkwNDMtNDcwOTNjMWZlMGM2
8
+ amz-sdk-request:
9
+ - !!binary |
10
+ YXR0ZW1wdD0x
11
+ content-length:
12
+ - '98'
13
+ content-type:
14
+ - !!binary |
15
+ YXBwbGljYXRpb24vanNvbg==
16
+ method: POST
17
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/openai.gpt-oss-120b-1%3A0/converse-stream
18
+ response:
19
+ body:
20
+ string: !!binary |
21
+ AAAAsgAAAFKKQLTFCzpldmVudC10eXBlBwAMbWVzc2FnZVN0YXJ0DTpjb250ZW50LXR5cGUHABBh
22
+ cHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsicCI6ImFiY2RlZmdoaWprbG1u
23
+ b3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowIiwicm9sZSI6ImFzc2lzdGFu
24
+ dCJ9QP+CaAAAAKIAAABXmsrXyAs6ZXZlbnQtdHlwZQcAEWNvbnRlbnRCbG9ja0RlbHRhDTpjb250
25
+ ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiY29udGVu
26
+ dEJsb2NrSW5kZXgiOjAsImRlbHRhIjp7InRleHQiOiIifSwicCI6ImFiY2RlZmdoaSJ9NTLrNAAA
27
+ ALkAAABW+v1BzQs6ZXZlbnQtdHlwZQcAEGNvbnRlbnRCbG9ja1N0b3ANOmNvbnRlbnQtdHlwZQcA
28
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJjb250ZW50QmxvY2tJbmRl
29
+ eCI6MCwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RV
30
+ VldYWVowIn2IAETUAAABWQAAAFducmUhCzpldmVudC10eXBlBwARY29udGVudEJsb2NrRGVsdGEN
31
+ OmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJj
32
+ b250ZW50QmxvY2tJbmRleCI6MSwiZGVsdGEiOnsicmVhc29uaW5nQ29udGVudCI6eyJ0ZXh0Ijoi
33
+ VGhlIHVzZXIganVzdCBzYXlzIFwiSGlcIi4gV2UgbmVlZCB0byByZXNwb25kIGFwcHJvcHJpYXRl
34
+ bHksIGZyaWVuZGx5IGdyZWV0aW5nLiBObyBzcGVjaWFsIGluc3RydWN0aW9ucy4gU2hvdWxkIGJl
35
+ IHNob3J0LiJ9fSwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5P
36
+ UFFSU1RVVldYIn2DKrHfAAAAsQAAAFbKjQoMCzpldmVudC10eXBlBwAQY29udGVudEJsb2NrU3Rv
37
+ cA06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
38
+ ImNvbnRlbnRCbG9ja0luZGV4IjoxLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
39
+ RUZHSElKS0xNTk9QUVJTIn1Cad1JAAAA5AAAAFdNeXohCzpldmVudC10eXBlBwARY29udGVudEJs
40
+ b2NrRGVsdGENOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
41
+ BWV2ZW50eyJjb250ZW50QmxvY2tJbmRleCI6MiwiZGVsdGEiOnsidGV4dCI6IkhlbGxvISBIb3cg
42
+ Y2FuIEkgaGVscCJ9LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
43
+ Tk9QUVJTVFVWV1hZWjAxIn2L4Y7bAAAAuwAAAFf3OiI7CzpldmVudC10eXBlBwARY29udGVudEJs
44
+ b2NrRGVsdGENOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
45
+ BWV2ZW50eyJjb250ZW50QmxvY2tJbmRleCI6MiwiZGVsdGEiOnsidGV4dCI6IiB5b3UgdG9kYXk/
46
+ In0sInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2dyJ9dKsF8AAAAI4AAABW6fwlWws6ZXZlbnQt
47
+ dHlwZQcAEGNvbnRlbnRCbG9ja1N0b3ANOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
48
+ Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJjb250ZW50QmxvY2tJbmRleCI6MiwicCI6ImFiY2RlZmdo
49
+ aWoifbla37UAAACDAAAAUY8IdEkLOmV2ZW50LXR5cGUHAAttZXNzYWdlU3RvcA06Y29udGVudC10
50
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7InAiOiJhYiIsInN0
51
+ b3BSZWFzb24iOiJlbmRfdHVybiJ9kFbppAAAAOQAAABOKRLS4Qs6ZXZlbnQtdHlwZQcACG1ldGFk
52
+ YXRhDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
53
+ dHsibWV0cmljcyI6eyJsYXRlbmN5TXMiOjc1M30sInAiOiJhYmNkZWZnaGlqa2xtbiIsInVzYWdl
54
+ Ijp7ImlucHV0VG9rZW5zIjo3MCwib3V0cHV0VG9rZW5zIjo0Mywic2VydmVyVG9vbFVzYWdlIjp7
55
+ fSwidG90YWxUb2tlbnMiOjExM319saJH4A==
56
+ headers:
57
+ connection:
58
+ - keep-alive
59
+ content-type:
60
+ - application/vnd.amazon.eventstream
61
+ transfer-encoding:
62
+ - chunked
63
+ status:
64
+ code: 200
65
+ message: OK
66
+ version: 1
@@ -32,7 +32,9 @@ from pydantic_ai import (
32
32
  )
33
33
  from pydantic_ai.agent import Agent
34
34
  from pydantic_ai.exceptions import ModelRetry
35
+ from pydantic_ai.messages import AgentStreamEvent
35
36
  from pydantic_ai.models import ModelRequestParameters
37
+ from pydantic_ai.run import AgentRunResult, AgentRunResultEvent
36
38
  from pydantic_ai.tools import ToolDefinition
37
39
  from pydantic_ai.usage import RequestUsage, RunUsage
38
40
 
@@ -1272,3 +1274,33 @@ async def test_bedrock_no_tool_choice(bedrock_provider: BedrockProvider):
1272
1274
  ]
1273
1275
  }
1274
1276
  )
1277
+
1278
+
1279
+ async def test_bedrock_model_stream_empty_text_delta(allow_model_requests: None, bedrock_provider: BedrockProvider):
1280
+ model = BedrockConverseModel(model_name='openai.gpt-oss-120b-1:0', provider=bedrock_provider)
1281
+ agent = Agent(model)
1282
+
1283
+ result: AgentRunResult | None = None
1284
+ events: list[AgentStreamEvent] = []
1285
+ async for event in agent.run_stream_events('Hi'):
1286
+ if isinstance(event, AgentRunResultEvent):
1287
+ result = event.result
1288
+ else:
1289
+ events.append(event)
1290
+
1291
+ assert result is not None
1292
+ # The response stream contains `{'contentBlockDelta': {'delta': {'text': ''}, 'contentBlockIndex': 0}}`, but our response should not have any empty text parts.
1293
+ assert not any(part.content == '' for part in result.response.parts if isinstance(part, TextPart))
1294
+ assert events == snapshot(
1295
+ [
1296
+ PartStartEvent(
1297
+ index=0,
1298
+ part=ThinkingPart(
1299
+ content='The user just says "Hi". We need to respond appropriately, friendly greeting. No special instructions. Should be short.'
1300
+ ),
1301
+ ),
1302
+ PartStartEvent(index=1, part=TextPart(content='Hello! How can I help')),
1303
+ FinalResultEvent(tool_name=None, tool_call_id=None),
1304
+ PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' you today?')),
1305
+ ]
1306
+ )
@@ -1,24 +1,17 @@
1
1
  from __future__ import annotations as _annotations
2
2
 
3
- from typing import Any
4
-
5
3
  import pytest
6
- from dirty_equals import IsListOrTuple
7
4
  from inline_snapshot import snapshot
8
5
 
9
6
  from pydantic_ai import (
10
7
  Agent,
11
- FinalResultEvent,
12
8
  ModelRequest,
13
9
  ModelResponse,
14
- PartDeltaEvent,
15
- PartStartEvent,
16
10
  TextPart,
17
- TextPartDelta,
18
11
  ThinkingPart,
19
- ThinkingPartDelta,
20
12
  UserPromptPart,
21
13
  )
14
+ from pydantic_ai.run import AgentRunResult, AgentRunResultEvent
22
15
  from pydantic_ai.usage import RequestUsage
23
16
 
24
17
  from ..conftest import IsDatetime, IsStr, try_import
@@ -71,27 +64,42 @@ async def test_deepseek_model_thinking_stream(allow_model_requests: None, deepse
71
64
  deepseek_model = OpenAIChatModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
72
65
  agent = Agent(model=deepseek_model)
73
66
 
74
- event_parts: list[Any] = []
75
- async with agent.iter(user_prompt='Hello') as agent_run:
76
- async for node in agent_run:
77
- if Agent.is_model_request_node(node) or Agent.is_call_tools_node(node):
78
- async with node.stream(agent_run.ctx) as request_stream:
79
- async for event in request_stream:
80
- event_parts.append(event)
67
+ result: AgentRunResult | None = None
68
+ async for event in agent.run_stream_events(user_prompt='How do I cross the street?'):
69
+ if isinstance(event, AgentRunResultEvent):
70
+ result = event.result
81
71
 
82
- assert event_parts == IsListOrTuple(
83
- positions={
84
- 0: snapshot(
85
- PartStartEvent(
86
- index=0, part=ThinkingPart(content='H', id='reasoning_content', provider_name='deepseek')
87
- )
72
+ assert result is not None
73
+ assert result.all_messages() == snapshot(
74
+ [
75
+ ModelRequest(
76
+ parts=[
77
+ UserPromptPart(
78
+ content='How do I cross the street?',
79
+ timestamp=IsDatetime(),
80
+ )
81
+ ]
82
+ ),
83
+ ModelResponse(
84
+ parts=[
85
+ ThinkingPart(
86
+ content=IsStr(),
87
+ id='reasoning_content',
88
+ provider_name='deepseek',
89
+ ),
90
+ TextPart(content='Hello there! 😊 How can I help you today?'),
91
+ ],
92
+ usage=RequestUsage(
93
+ input_tokens=6,
94
+ output_tokens=212,
95
+ details={'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 6, 'reasoning_tokens': 198},
96
+ ),
97
+ model_name='deepseek-reasoner',
98
+ timestamp=IsDatetime(),
99
+ provider_name='deepseek',
100
+ provider_details={'finish_reason': 'stop'},
101
+ provider_response_id='33be18fc-3842-486c-8c29-dd8e578f7f20',
102
+ finish_reason='stop',
88
103
  ),
89
- 1: snapshot(PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta='mm', provider_name='deepseek'))),
90
- 2: snapshot(PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=',', provider_name='deepseek'))),
91
- 198: snapshot(PartStartEvent(index=1, part=TextPart(content='Hello'))),
92
- 199: snapshot(FinalResultEvent(tool_name=None, tool_call_id=None)),
93
- 200: snapshot(PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' there'))),
94
- 201: snapshot(PartDeltaEvent(index=1, delta=TextPartDelta(content_delta='!'))),
95
- },
96
- length=211,
104
+ ]
97
105
  )
@@ -5160,7 +5160,6 @@ async def test_tool_use_failed_error_streaming(allow_model_requests: None, groq_
5160
5160
  ),
5161
5161
  ModelResponse(
5162
5162
  parts=[
5163
- TextPart(content=''),
5164
5163
  ThinkingPart(
5165
5164
  content="""\
5166
5165
  The user requests to call the tool with non-existent parameters to test error handling. We need to call the function "get_something_by_name" with wrong parameters. The function expects a single argument object with "name". Non-existent parameters means we could provide a wrong key, or missing name. Let's provide an object with wrong key "nonexistent": "value". That should cause error. So we call the function with {"nonexistent": "test"}.
@@ -5205,7 +5204,6 @@ We need to output the call.\
5205
5204
  ),
5206
5205
  ModelResponse(
5207
5206
  parts=[
5208
- TextPart(content=''),
5209
5207
  ThinkingPart(content='We need to call with correct param: name. Use a placeholder name.'),
5210
5208
  ToolCallPart(
5211
5209
  tool_name='get_something_by_name',
@@ -9,7 +9,6 @@ from typing import Any, Literal, cast
9
9
  from unittest.mock import Mock
10
10
 
11
11
  import pytest
12
- from dirty_equals import IsListOrTuple
13
12
  from inline_snapshot import snapshot
14
13
  from typing_extensions import TypedDict
15
14
 
@@ -18,19 +17,14 @@ from pydantic_ai import (
18
17
  AudioUrl,
19
18
  BinaryContent,
20
19
  DocumentUrl,
21
- FinalResultEvent,
22
20
  ImageUrl,
23
21
  ModelRequest,
24
22
  ModelResponse,
25
23
  ModelRetry,
26
- PartDeltaEvent,
27
- PartStartEvent,
28
24
  RetryPromptPart,
29
25
  SystemPromptPart,
30
26
  TextPart,
31
- TextPartDelta,
32
27
  ThinkingPart,
33
- ThinkingPartDelta,
34
28
  ToolCallPart,
35
29
  ToolReturnPart,
36
30
  UserPromptPart,
@@ -38,6 +32,7 @@ from pydantic_ai import (
38
32
  )
39
33
  from pydantic_ai.exceptions import ModelHTTPError
40
34
  from pydantic_ai.result import RunUsage
35
+ from pydantic_ai.run import AgentRunResult, AgentRunResultEvent
41
36
  from pydantic_ai.settings import ModelSettings
42
37
  from pydantic_ai.tools import RunContext
43
38
  from pydantic_ai.usage import RequestUsage
@@ -978,35 +973,32 @@ async def test_hf_model_thinking_part_iter(allow_model_requests: None, huggingfa
978
973
  )
979
974
  agent = Agent(m)
980
975
 
981
- event_parts: list[Any] = []
982
- async with agent.iter(user_prompt='How do I cross the street?') as agent_run:
983
- async for node in agent_run:
984
- if Agent.is_model_request_node(node) or Agent.is_call_tools_node(node):
985
- async with node.stream(agent_run.ctx) as request_stream:
986
- async for event in request_stream:
987
- event_parts.append(event)
988
-
989
- assert event_parts == snapshot(
990
- IsListOrTuple(
991
- positions={
992
- 0: PartStartEvent(index=0, part=ThinkingPart(content='')),
993
- 1: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta='\n')),
994
- 2: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta='Okay')),
995
- 3: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=',')),
996
- 4: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=' the')),
997
- 5: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=' user')),
998
- 6: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=' is')),
999
- 7: PartDeltaEvent(index=0, delta=ThinkingPartDelta(content_delta=' asking')),
1000
- 413: PartStartEvent(index=1, part=TextPart(content='Cross')),
1001
- 414: FinalResultEvent(tool_name=None, tool_call_id=None),
1002
- 415: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta='ing')),
1003
- 416: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' the')),
1004
- 417: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' street')),
1005
- 418: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' safely')),
1006
- 419: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' requires')),
1007
- 420: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta=' attent')),
1008
- 421: PartDeltaEvent(index=1, delta=TextPartDelta(content_delta='iveness')),
1009
- },
1010
- length=1062,
1011
- )
976
+ result: AgentRunResult | None = None
977
+ async for event in agent.run_stream_events(user_prompt='How do I cross the street?'):
978
+ if isinstance(event, AgentRunResultEvent):
979
+ result = event.result
980
+
981
+ assert result is not None
982
+ assert result.all_messages() == snapshot(
983
+ [
984
+ ModelRequest(
985
+ parts=[
986
+ UserPromptPart(
987
+ content='How do I cross the street?',
988
+ timestamp=IsDatetime(),
989
+ )
990
+ ]
991
+ ),
992
+ ModelResponse(
993
+ parts=[
994
+ ThinkingPart(content=IsStr()),
995
+ TextPart(content=IsStr()),
996
+ ],
997
+ model_name='Qwen/Qwen3-235B-A22B',
998
+ timestamp=IsDatetime(),
999
+ provider_name='huggingface',
1000
+ provider_details={'finish_reason': 'stop'},
1001
+ provider_response_id='chatcmpl-357f347a3f5d4897b36a128fb4e4cf7b',
1002
+ ),
1003
+ ]
1012
1004
  )