pydantic-ai 0.5.0__tar.gz → 0.6.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 (346) hide show
  1. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/Makefile +2 -5
  2. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/PKG-INFO +3 -3
  3. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/pyproject.toml +6 -0
  4. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/conftest.py +6 -6
  5. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_dataset.py +89 -89
  6. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_graph.py +0 -33
  7. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_fallback.py +11 -1
  8. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_gemini.py +24 -17
  9. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_gemini_vertex.py +3 -0
  10. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_google.py +5 -3
  11. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_openai.py +3 -3
  12. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_google_gla.py +5 -0
  13. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_google_vertex.py +6 -0
  14. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_provider_names.py +9 -5
  15. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_agent.py +1 -56
  16. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_examples.py +1 -6
  17. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_live.py +17 -11
  18. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_streaming.py +1 -1
  19. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/typed_agent.py +1 -0
  20. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/.gitignore +0 -0
  21. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/LICENSE +0 -0
  22. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/README.md +0 -0
  23. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/__init__.py +0 -0
  24. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/assets/dummy.pdf +0 -0
  25. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/assets/kiwi.png +0 -0
  26. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/assets/marcelo.mp3 +0 -0
  27. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/assets/product_name.txt +0 -0
  28. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/assets/small_video.mp4 +0 -0
  29. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  30. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  31. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  32. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  33. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  34. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  35. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  36. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  37. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  38. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  39. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  40. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  41. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  42. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  43. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  44. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  45. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  46. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  47. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  48. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  49. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  50. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  51. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/__init__.py +0 -0
  52. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_evaluator_base.py +0 -0
  53. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_evaluator_common.py +0 -0
  54. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_evaluator_context.py +0 -0
  55. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_evaluator_spec.py +0 -0
  56. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_evaluators.py +0 -0
  57. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_llm_as_a_judge.py +0 -0
  58. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_otel.py +0 -0
  59. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_render_numbers.py +0 -0
  60. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_reporting.py +0 -0
  61. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_reports.py +0 -0
  62. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/test_utils.py +0 -0
  63. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/evals/utils.py +0 -0
  64. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/example_modules/README.md +0 -0
  65. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/example_modules/bank_database.py +0 -0
  66. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/example_modules/fake_database.py +0 -0
  67. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/example_modules/mcp_server.py +0 -0
  68. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/example_modules/weather_service.py +0 -0
  69. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/ext/__init__.py +0 -0
  70. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/ext/test_langchain.py +0 -0
  71. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/__init__.py +0 -0
  72. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_file_persistence.py +0 -0
  73. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_mermaid.py +0 -0
  74. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_persistence.py +0 -0
  75. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_state.py +0 -0
  76. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/graph/test_utils.py +0 -0
  77. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/import_examples.py +0 -0
  78. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/json_body_serializer.py +0 -0
  79. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/mcp_server.py +0 -0
  80. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/__init__.py +0 -0
  81. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  82. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  83. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  84. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  85. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  86. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  87. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  88. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  89. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  90. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  91. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  92. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  93. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  94. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  95. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  96. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  97. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  98. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  99. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  100. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  101. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  102. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  103. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  104. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  105. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  106. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  107. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  108. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  109. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  110. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
  111. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  112. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  113. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  114. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  115. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  116. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  117. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  118. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  119. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  120. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  121. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  122. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  123. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  124. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  125. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  126. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  127. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  128. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  129. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  130. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  131. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  132. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  133. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  134. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  135. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  136. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  137. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  138. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  139. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  140. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  141. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  142. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  143. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  144. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  145. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  146. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  147. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  148. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  149. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  150. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  151. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  152. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  153. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  154. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  155. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  156. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  157. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  158. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  159. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  160. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  161. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  162. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  163. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  164. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  165. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  166. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  167. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  168. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  169. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  170. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  171. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  172. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  173. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  174. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  175. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  176. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  177. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  178. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  179. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  180. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  181. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  182. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  183. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  184. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  185. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  186. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  187. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  188. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  189. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  190. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  191. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  192. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  193. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  194. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  195. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  196. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  197. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  198. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  199. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  200. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  201. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  202. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  203. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  204. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  205. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  206. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  207. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  208. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  209. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  210. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  211. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  212. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  213. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  214. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  215. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  216. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  217. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  218. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  219. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  220. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  221. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  222. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  223. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  224. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  225. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  226. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  227. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  228. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  229. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  230. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  231. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  232. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  233. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  234. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  235. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  236. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  237. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  238. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  239. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  240. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  241. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  242. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  243. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  244. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  245. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  246. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  247. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
  248. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  249. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  250. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  251. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  252. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  253. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  254. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  255. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
  256. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  257. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  258. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  259. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  260. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  261. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  262. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  263. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  264. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  265. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  266. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  267. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  268. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  269. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  270. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  271. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  272. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  273. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  274. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  275. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  276. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  277. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  278. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  279. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  280. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  281. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  282. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  283. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  284. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  285. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  286. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  287. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/mock_async_stream.py +0 -0
  288. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_anthropic.py +0 -0
  289. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_bedrock.py +0 -0
  290. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_cohere.py +0 -0
  291. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_deepseek.py +0 -0
  292. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_download_item.py +0 -0
  293. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_groq.py +0 -0
  294. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_huggingface.py +0 -0
  295. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_instrumented.py +0 -0
  296. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_mcp_sampling.py +0 -0
  297. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_mistral.py +0 -0
  298. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model.py +0 -0
  299. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model_function.py +0 -0
  300. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model_names.py +0 -0
  301. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model_request_parameters.py +0 -0
  302. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model_settings.py +0 -0
  303. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_model_test.py +0 -0
  304. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/models/test_openai_responses.py +0 -0
  305. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/__init__.py +0 -0
  306. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  307. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  308. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  309. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  310. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_anthropic.py +0 -0
  311. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_azure.py +0 -0
  312. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_bedrock.py +0 -0
  313. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_cohere.py +0 -0
  314. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_deepseek.py +0 -0
  315. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_fireworks.py +0 -0
  316. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_github.py +0 -0
  317. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_grok.py +0 -0
  318. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_groq.py +0 -0
  319. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_heroku.py +0 -0
  320. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_huggingface.py +0 -0
  321. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_mistral.py +0 -0
  322. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_moonshotai.py +0 -0
  323. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_openai.py +0 -0
  324. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_openrouter.py +0 -0
  325. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_together.py +0 -0
  326. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/providers/test_vercel.py +0 -0
  327. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_a2a.py +0 -0
  328. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_ag_ui.py +0 -0
  329. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_cli.py +0 -0
  330. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_deps.py +0 -0
  331. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_direct.py +0 -0
  332. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_format_as_xml.py +0 -0
  333. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_history_processor.py +0 -0
  334. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_json_body_serializer.py +0 -0
  335. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_logfire.py +0 -0
  336. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_mcp.py +0 -0
  337. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_messages.py +0 -0
  338. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_parts_manager.py +0 -0
  339. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_settings.py +0 -0
  340. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_tenacity.py +0 -0
  341. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_thinking_part.py +0 -0
  342. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_tools.py +0 -0
  343. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_toolsets.py +0 -0
  344. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_usage_limits.py +0 -0
  345. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/test_utils.py +0 -0
  346. {pydantic_ai-0.5.0 → pydantic_ai-0.6.0}/tests/typed_graph.py +0 -0
@@ -60,13 +60,10 @@ typecheck-both: typecheck-pyright typecheck-mypy
60
60
 
61
61
  .PHONY: test
62
62
  test: ## Run tests and collect coverage data
63
- uv run coverage run -m pytest
63
+ COVERAGE_PROCESS_START=./pyproject.toml uv run coverage run -m pytest -n auto --dist=loadgroup
64
+ @uv run coverage combine
64
65
  @uv run coverage report
65
66
 
66
- .PHONY: test-fast
67
- test-fast: ## Same as test except no coverage and 4x faster depending on hardware
68
- uv run pytest -n auto --dist=loadgroup
69
-
70
67
  .PHONY: test-all-python
71
68
  test-all-python: ## Run tests on Python 3.9 to 3.13
72
69
  UV_PROJECT_ENVIRONMENT=.venv39 uv run --python 3.9 --all-extras --all-packages coverage run -p -m pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.5.0
3
+ Version: 0.6.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
@@ -28,11 +28,11 @@ Classifier: Topic :: Internet
28
28
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Requires-Python: >=3.9
31
- Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,vertexai]==0.5.0
31
+ Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,vertexai]==0.6.0
32
32
  Provides-Extra: a2a
33
33
  Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
34
34
  Provides-Extra: examples
35
- Requires-Dist: pydantic-ai-examples==0.5.0; extra == 'examples'
35
+ Requires-Dist: pydantic-ai-examples==0.6.0; extra == 'examples'
36
36
  Provides-Extra: logfire
37
37
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
38
38
  Description-Content-Type: text/markdown
@@ -92,6 +92,7 @@ docs = [
92
92
  "mkdocs-llmstxt>=0.2.0",
93
93
  "mkdocs-material[imaging]>=9.5.45",
94
94
  "mkdocstrings-python>=1.12.2",
95
+ "griffe-warnings-deprecated>=1.1.0",
95
96
  ]
96
97
  docs-upload = ["algoliasearch>=4.12.0", "pydantic>=2.10.1"]
97
98
 
@@ -215,6 +216,10 @@ filterwarnings = [
215
216
 
216
217
  # https://coverage.readthedocs.io/en/latest/config.html#run
217
218
  [tool.coverage.run]
219
+ parallel = true
220
+ concurrency = ["multiprocessing", "thread"]
221
+ # We use a subdirectory for coverage data to avoid noisy coverage data files.
222
+ data_file = ".coverage/.coverage"
218
223
  # required to avoid warnings about files created by create_module fixture
219
224
  include = [
220
225
  "pydantic_ai_slim/**/*.py",
@@ -245,6 +250,7 @@ source = [
245
250
 
246
251
  # https://coverage.readthedocs.io/en/latest/config.html#report
247
252
  [tool.coverage.report]
253
+ fail_under = 100
248
254
  skip_covered = true
249
255
  show_missing = true
250
256
  ignore_errors = true
@@ -251,7 +251,7 @@ def pytest_recording_configure(config: Any, vcr: VCR):
251
251
  def mock_vcr_aiohttp_content(mocker: MockerFixture):
252
252
  try:
253
253
  from vcr.stubs import aiohttp_stubs
254
- except ImportError:
254
+ except ImportError: # pragma: lax no cover
255
255
  return
256
256
 
257
257
  # google-genai calls `self.response_stream.content.readline()` where `self.response_stream` is a `MockClientResponse`,
@@ -416,9 +416,9 @@ def vertex_provider_auth(mocker: MockerFixture) -> None: # pragma: lax no cover
416
416
 
417
417
 
418
418
  @pytest.fixture()
419
- async def vertex_provider():
419
+ async def vertex_provider(): # pragma: lax no cover
420
420
  # NOTE: You need to comment out this line to rewrite the cassettes locally.
421
- if not os.getenv('CI', False): # pragma: lax no cover
421
+ if not os.getenv('CI', False):
422
422
  pytest.skip('Requires properly configured local google vertex config to pass')
423
423
 
424
424
  try:
@@ -478,10 +478,10 @@ def model(
478
478
 
479
479
  return CohereModel('command-r-plus', provider=CohereProvider(api_key=co_api_key))
480
480
  elif request.param == 'gemini':
481
- from pydantic_ai.models.gemini import GeminiModel
482
- from pydantic_ai.providers.google_gla import GoogleGLAProvider
481
+ from pydantic_ai.models.gemini import GeminiModel # type: ignore[reportDeprecated]
482
+ from pydantic_ai.providers.google_gla import GoogleGLAProvider # type: ignore[reportDeprecated]
483
483
 
484
- return GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key=gemini_api_key))
484
+ return GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key=gemini_api_key)) # type: ignore[reportDeprecated]
485
485
  elif request.param == 'google':
486
486
  from pydantic_ai.models.google import GoogleModel
487
487
  from pydantic_ai.providers.google import GoogleProvider
@@ -7,11 +7,11 @@ from pathlib import Path
7
7
  from typing import Any
8
8
 
9
9
  import pytest
10
- from dirty_equals import HasRepr, IsNumber
10
+ from dirty_equals import HasRepr, IsNumber, IsPartialDict
11
11
  from inline_snapshot import snapshot
12
12
  from pydantic import BaseModel, TypeAdapter
13
13
 
14
- from ..conftest import IsStr, try_import
14
+ from ..conftest import try_import
15
15
  from .utils import render_table
16
16
 
17
17
  with try_import() as imports_successful:
@@ -1159,7 +1159,7 @@ async def test_evaluate_async_logfire(
1159
1159
  example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
1160
1160
  simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
1161
1161
  capfire: CaptureLogfire,
1162
- ):
1162
+ ): # pragma: lax no cover
1163
1163
  """Test evaluating a dataset."""
1164
1164
  example_dataset.add_evaluator(simple_evaluator())
1165
1165
 
@@ -1197,90 +1197,90 @@ async def test_evaluate_async_logfire(
1197
1197
  'parent': None,
1198
1198
  'start_time': 1000000000,
1199
1199
  },
1200
- {
1201
- 'attributes': {
1202
- 'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1203
- 'attributes': '{}',
1204
- 'case_name': 'case1',
1205
- 'code.filepath': IsStr(),
1206
- 'code.lineno': 123,
1207
- 'expected_output': '{"answer":"4","confidence":1.0}',
1208
- 'inputs': '{"query":"What is 2+2?"}',
1209
- 'labels': '{}',
1210
- 'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
1211
- 'logfire.msg': 'case: case1',
1212
- 'logfire.msg_template': 'case: {case_name}',
1213
- 'logfire.span_type': 'span',
1214
- 'metadata': '{"difficulty":"easy","category":"general"}',
1215
- 'metrics': '{}',
1216
- 'output': '{"answer":"4","confidence":1.0}',
1217
- 'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1218
- 'task_duration': 1.0,
1219
- 'task_name': 'mock_async_task',
1220
- },
1221
- 'context': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
1222
- 'end_time': 8000000000,
1223
- 'name': 'case: {case_name}',
1224
- 'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
1225
- 'start_time': 2000000000,
1226
- },
1227
- {
1228
- 'attributes': {
1229
- 'code.filepath': IsStr(),
1230
- 'code.lineno': 123,
1231
- 'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
1232
- 'logfire.msg': 'execute mock_async_task',
1233
- 'logfire.msg_template': 'execute {task}',
1234
- 'logfire.span_type': 'span',
1235
- 'task': 'mock_async_task',
1236
- },
1237
- 'context': {'is_remote': False, 'span_id': 5, 'trace_id': 1},
1238
- 'end_time': 4000000000,
1239
- 'name': 'execute {task}',
1240
- 'parent': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
1241
- 'start_time': 3000000000,
1242
- },
1243
- {
1244
- 'attributes': {
1245
- 'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1246
- 'attributes': '{}',
1247
- 'case_name': 'case2',
1248
- 'code.filepath': IsStr(),
1249
- 'code.lineno': 123,
1250
- 'expected_output': '{"answer":"Paris","confidence":1.0}',
1251
- 'inputs': '{"query":"What is the capital of France?"}',
1252
- 'labels': '{}',
1253
- 'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
1254
- 'logfire.msg': 'case: case2',
1255
- 'logfire.msg_template': 'case: {case_name}',
1256
- 'logfire.span_type': 'span',
1257
- 'metadata': '{"difficulty":"medium","category":"geography"}',
1258
- 'metrics': '{}',
1259
- 'output': '{"answer":"Paris","confidence":1.0}',
1260
- 'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1261
- 'task_duration': 1.0,
1262
- 'task_name': 'mock_async_task',
1263
- },
1264
- 'context': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
1265
- 'end_time': 9000000000,
1266
- 'name': 'case: {case_name}',
1267
- 'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
1268
- 'start_time': 5000000000,
1269
- },
1270
- {
1271
- 'attributes': {
1272
- 'code.filepath': IsStr(),
1273
- 'code.lineno': 123,
1274
- 'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
1275
- 'logfire.msg': 'execute mock_async_task',
1276
- 'logfire.msg_template': 'execute {task}',
1277
- 'logfire.span_type': 'span',
1278
- 'task': 'mock_async_task',
1279
- },
1280
- 'context': {'is_remote': False, 'span_id': 9, 'trace_id': 1},
1281
- 'end_time': 7000000000,
1282
- 'name': 'execute {task}',
1283
- 'parent': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
1284
- 'start_time': 6000000000,
1285
- },
1200
+ IsPartialDict(
1201
+ {
1202
+ 'attributes': {
1203
+ 'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1204
+ 'attributes': '{}',
1205
+ 'case_name': 'case1',
1206
+ 'expected_output': '{"answer":"4","confidence":1.0}',
1207
+ 'inputs': '{"query":"What is 2+2?"}',
1208
+ 'labels': '{}',
1209
+ 'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
1210
+ 'logfire.msg': 'case: case1',
1211
+ 'logfire.msg_template': 'case: {case_name}',
1212
+ 'logfire.span_type': 'span',
1213
+ 'metadata': '{"difficulty":"easy","category":"general"}',
1214
+ 'metrics': '{}',
1215
+ 'output': '{"answer":"4","confidence":1.0}',
1216
+ 'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1217
+ 'task_duration': 1.0,
1218
+ 'task_name': 'mock_async_task',
1219
+ },
1220
+ 'context': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
1221
+ 'end_time': 8000000000,
1222
+ 'name': 'case: {case_name}',
1223
+ 'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
1224
+ 'start_time': 2000000000,
1225
+ }
1226
+ ),
1227
+ IsPartialDict(
1228
+ {
1229
+ 'attributes': {
1230
+ 'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
1231
+ 'logfire.msg': 'execute mock_async_task',
1232
+ 'logfire.msg_template': 'execute {task}',
1233
+ 'logfire.span_type': 'span',
1234
+ 'task': 'mock_async_task',
1235
+ },
1236
+ 'context': {'is_remote': False, 'span_id': 5, 'trace_id': 1},
1237
+ 'end_time': 4000000000,
1238
+ 'name': 'execute {task}',
1239
+ 'parent': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
1240
+ 'start_time': 3000000000,
1241
+ }
1242
+ ),
1243
+ IsPartialDict(
1244
+ {
1245
+ 'attributes': {
1246
+ 'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1247
+ 'attributes': '{}',
1248
+ 'case_name': 'case2',
1249
+ 'expected_output': '{"answer":"Paris","confidence":1.0}',
1250
+ 'inputs': '{"query":"What is the capital of France?"}',
1251
+ 'labels': '{}',
1252
+ 'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
1253
+ 'logfire.msg': 'case: case2',
1254
+ 'logfire.msg_template': 'case: {case_name}',
1255
+ 'logfire.span_type': 'span',
1256
+ 'metadata': '{"difficulty":"medium","category":"geography"}',
1257
+ 'metrics': '{}',
1258
+ 'output': '{"answer":"Paris","confidence":1.0}',
1259
+ 'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
1260
+ 'task_duration': 1.0,
1261
+ 'task_name': 'mock_async_task',
1262
+ },
1263
+ 'context': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
1264
+ 'end_time': 9000000000,
1265
+ 'name': 'case: {case_name}',
1266
+ 'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
1267
+ 'start_time': 5000000000,
1268
+ }
1269
+ ),
1270
+ IsPartialDict(
1271
+ {
1272
+ 'attributes': {
1273
+ 'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
1274
+ 'logfire.msg': 'execute mock_async_task',
1275
+ 'logfire.msg_template': 'execute {task}',
1276
+ 'logfire.span_type': 'span',
1277
+ 'task': 'mock_async_task',
1278
+ },
1279
+ 'context': {'is_remote': False, 'span_id': 9, 'trace_id': 1},
1280
+ 'end_time': 7000000000,
1281
+ 'name': 'execute {task}',
1282
+ 'parent': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
1283
+ 'start_time': 6000000000,
1284
+ }
1285
+ ),
1286
1286
  ]
@@ -401,39 +401,6 @@ async def test_iter_next_error(mock_snapshot_id: object):
401
401
  await run.next()
402
402
 
403
403
 
404
- async def test_next(mock_snapshot_id: object):
405
- @dataclass
406
- class Foo(BaseNode):
407
- async def run(self, ctx: GraphRunContext) -> Bar:
408
- return Bar()
409
-
410
- @dataclass
411
- class Bar(BaseNode):
412
- async def run(self, ctx: GraphRunContext) -> Foo:
413
- return Foo() # pragma: no cover
414
-
415
- g = Graph(nodes=(Foo, Bar))
416
- assert g.name is None
417
- sp = FullStatePersistence()
418
- with pytest.warns(DeprecationWarning, match='`next` is deprecated, use `async with graph.iter(...)'):
419
- n = await g.next(Foo(), persistence=sp) # pyright: ignore[reportDeprecated]
420
- assert n == Bar()
421
- assert g.name == 'g'
422
- assert sp.history == snapshot(
423
- [
424
- NodeSnapshot(
425
- state=None,
426
- node=Foo(),
427
- start_ts=IsNow(tz=timezone.utc),
428
- duration=IsFloat(),
429
- status='success',
430
- id='Foo:1',
431
- ),
432
- NodeSnapshot(state=None, node=Bar(), id='Bar:2'),
433
- ]
434
- )
435
-
436
-
437
404
  async def test_deps(mock_snapshot_id: object):
438
405
  @dataclass
439
406
  class Deps:
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import sys
4
4
  from collections.abc import AsyncIterator
5
5
  from datetime import timezone
6
+ from typing import Any
6
7
 
7
8
  import pytest
8
9
  from inline_snapshot import snapshot
@@ -247,6 +248,14 @@ def test_all_failed() -> None:
247
248
  assert exceptions[0].body == {'error': 'test error'}
248
249
 
249
250
 
251
+ def add_missing_response_model(spans: list[dict[str, Any]]) -> list[dict[str, Any]]:
252
+ for span in spans:
253
+ attrs = span.setdefault('attributes', {})
254
+ if 'gen_ai.request.model' in attrs:
255
+ attrs.setdefault('gen_ai.response.model', attrs['gen_ai.request.model'])
256
+ return spans
257
+
258
+
250
259
  @pytest.mark.skipif(not logfire_imports_successful(), reason='logfire not installed')
251
260
  def test_all_failed_instrumented(capfire: CaptureLogfire) -> None:
252
261
  fallback_model = FallbackModel(failure_model, failure_model)
@@ -260,7 +269,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None:
260
269
  assert exceptions[0].status_code == 500
261
270
  assert exceptions[0].model_name == 'test-function-model'
262
271
  assert exceptions[0].body == {'error': 'test error'}
263
- assert capfire.exporter.exported_spans_as_dict() == snapshot(
272
+ assert add_missing_response_model(capfire.exporter.exported_spans_as_dict()) == snapshot(
264
273
  [
265
274
  {
266
275
  'name': 'chat fallback:function:failure_response:,function:failure_response:',
@@ -277,6 +286,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None:
277
286
  'logfire.span_type': 'span',
278
287
  'logfire.msg': 'chat fallback:function:failure_response:,function:failure_response:',
279
288
  'logfire.level_num': 17,
289
+ 'gen_ai.response.model': 'fallback:function:failure_response:,function:failure_response:',
280
290
  },
281
291
  'events': [
282
292
  {
@@ -1,4 +1,5 @@
1
1
  # pyright: reportPrivateUsage=false
2
+ # pyright: reportDeprecated=false
2
3
  from __future__ import annotations as _annotations
3
4
 
4
5
  import datetime
@@ -60,7 +61,11 @@ from pydantic_ai.tools import ToolDefinition
60
61
 
61
62
  from ..conftest import ClientWithHandler, IsDatetime, IsInstance, IsNow, IsStr, TestEnv, try_import
62
63
 
63
- pytestmark = pytest.mark.anyio
64
+ pytestmark = [
65
+ pytest.mark.anyio,
66
+ pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
67
+ pytest.mark.filterwarnings('ignore:`GoogleGLAProvider` is deprecated.:DeprecationWarning'),
68
+ ]
64
69
 
65
70
 
66
71
  async def test_model_simple(allow_model_requests: None):
@@ -360,24 +365,25 @@ async def test_json_def_enum(allow_model_requests: None):
360
365
 
361
366
  # This tests that the enum values are properly converted to strings for Gemini
362
367
  assert m._get_tools(mrp) == snapshot(
363
- _GeminiTools(
364
- function_declarations=[
365
- _GeminiFunction(
366
- name='result',
367
- description='This is the tool for the final Result',
368
- parameters={
368
+ {
369
+ 'function_declarations': [
370
+ {
371
+ 'name': 'result',
372
+ 'description': 'This is the tool for the final Result',
373
+ 'parameters': {
369
374
  'properties': {
370
375
  'progress': {
371
376
  'items': {'enum': ['100', '80', '60', '40', '20'], 'type': 'string'},
372
377
  'type': 'array',
373
378
  'nullable': True,
379
+ 'default': None,
374
380
  }
375
381
  },
376
382
  'type': 'object',
377
383
  },
378
- )
384
+ }
379
385
  ]
380
- )
386
+ }
381
387
  )
382
388
 
383
389
 
@@ -406,12 +412,12 @@ async def test_json_def_replaced_any_of(allow_model_requests: None):
406
412
  )
407
413
  mrp = m.customize_request_parameters(mrp)
408
414
  assert m._get_tools(mrp) == snapshot(
409
- _GeminiTools(
410
- function_declarations=[
411
- _GeminiFunction(
412
- name='result',
413
- description='This is the tool for the final Result',
414
- parameters={
415
+ {
416
+ 'function_declarations': [
417
+ {
418
+ 'name': 'result',
419
+ 'description': 'This is the tool for the final Result',
420
+ 'parameters': {
415
421
  'properties': {
416
422
  'op_location': {
417
423
  'properties': {
@@ -421,13 +427,14 @@ async def test_json_def_replaced_any_of(allow_model_requests: None):
421
427
  'required': ['lat', 'lng'],
422
428
  'nullable': True,
423
429
  'type': 'object',
430
+ 'default': None,
424
431
  }
425
432
  },
426
433
  'type': 'object',
427
434
  },
428
- )
435
+ }
429
436
  ]
430
- )
437
+ }
431
438
  )
432
439
 
433
440
 
@@ -1,3 +1,4 @@
1
+ # pyright: reportDeprecated=false
1
2
  import os
2
3
  from dataclasses import dataclass
3
4
  from typing import Union
@@ -32,6 +33,8 @@ with try_import() as imports_successful:
32
33
  pytestmark = [
33
34
  pytest.mark.skipif(not imports_successful(), reason='google-auth not installed'),
34
35
  pytest.mark.anyio,
36
+ pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
37
+ pytest.mark.filterwarnings('ignore:`GoogleVertexProvider` is deprecated.:DeprecationWarning'),
35
38
  ]
36
39
 
37
40
 
@@ -318,7 +318,9 @@ async def test_google_model_gla_labels_raises_value_error(allow_model_requests:
318
318
  await agent.run('What is the capital of France?')
319
319
 
320
320
 
321
- async def test_google_model_vertex_provider(allow_model_requests: None, vertex_provider: GoogleProvider):
321
+ async def test_google_model_vertex_provider(
322
+ allow_model_requests: None, vertex_provider: GoogleProvider
323
+ ): # pragma: lax no cover
322
324
  model = GoogleModel('gemini-2.0-flash', provider=vertex_provider)
323
325
  agent = Agent(model=model, system_prompt='You are a helpful chatbot.')
324
326
  result = await agent.run('What is the capital of France?')
@@ -774,7 +776,7 @@ async def test_google_url_input(
774
776
  expected_output: str,
775
777
  allow_model_requests: None,
776
778
  vertex_provider: GoogleProvider,
777
- ) -> None:
779
+ ) -> None: # pragma: lax no cover
778
780
  m = GoogleModel('gemini-2.0-flash', provider=vertex_provider)
779
781
  agent = Agent(m)
780
782
  result = await agent.run(['What is the main content of this URL?', url])
@@ -806,7 +808,7 @@ async def test_google_url_input(
806
808
  not os.getenv('CI', False), reason='Requires properly configured local google vertex config to pass'
807
809
  )
808
810
  @pytest.mark.vcr()
809
- async def test_google_url_input_force_download(allow_model_requests: None) -> None:
811
+ async def test_google_url_input_force_download(allow_model_requests: None) -> None: # pragma: lax no cover
810
812
  provider = GoogleProvider(project='pydantic-ai', location='us-central1')
811
813
  m = GoogleModel('gemini-2.0-flash', provider=provider)
812
814
  agent = Agent(m)
@@ -37,12 +37,10 @@ from pydantic_ai.messages import (
37
37
  UserPromptPart,
38
38
  )
39
39
  from pydantic_ai.models import ModelRequestParameters
40
- from pydantic_ai.models.gemini import GeminiModel
41
40
  from pydantic_ai.output import NativeOutput, PromptedOutput, TextOutput, ToolOutput
42
41
  from pydantic_ai.profiles import ModelProfile
43
42
  from pydantic_ai.profiles._json_schema import InlineDefsJsonSchemaTransformer
44
43
  from pydantic_ai.profiles.openai import OpenAIModelProfile, openai_model_profile
45
- from pydantic_ai.providers.google_gla import GoogleGLAProvider
46
44
  from pydantic_ai.result import Usage
47
45
  from pydantic_ai.settings import ModelSettings
48
46
  from pydantic_ai.tools import ToolDefinition
@@ -65,6 +63,7 @@ with try_import() as imports_successful:
65
63
  from openai.types.chat.chat_completion_token_logprob import ChatCompletionTokenLogprob
66
64
  from openai.types.completion_usage import CompletionUsage, PromptTokensDetails
67
65
 
66
+ from pydantic_ai.models.google import GoogleModel
68
67
  from pydantic_ai.models.openai import (
69
68
  OpenAIModel,
70
69
  OpenAIModelSettings,
@@ -73,6 +72,7 @@ with try_import() as imports_successful:
73
72
  OpenAISystemPromptRole,
74
73
  )
75
74
  from pydantic_ai.profiles.openai import OpenAIJsonSchemaTransformer
75
+ from pydantic_ai.providers.google import GoogleProvider
76
76
  from pydantic_ai.providers.openai import OpenAIProvider
77
77
 
78
78
  # note: we use Union here so that casting works with Python 3.9
@@ -1016,7 +1016,7 @@ async def test_max_completion_tokens(allow_model_requests: None, model_name: str
1016
1016
 
1017
1017
 
1018
1018
  async def test_multiple_agent_tool_calls(allow_model_requests: None, gemini_api_key: str, openai_api_key: str):
1019
- gemini_model = GeminiModel('gemini-2.0-flash-exp', provider=GoogleGLAProvider(api_key=gemini_api_key))
1019
+ gemini_model = GoogleModel('gemini-2.0-flash-exp', provider=GoogleProvider(api_key=gemini_api_key))
1020
1020
  openai_model = OpenAIModel('gpt-4o-mini', provider=OpenAIProvider(api_key=openai_api_key))
1021
1021
 
1022
1022
  agent = Agent(model=gemini_model)
@@ -1,3 +1,4 @@
1
+ # pyright: reportDeprecated=false
1
2
  import re
2
3
 
3
4
  import pytest
@@ -7,6 +8,10 @@ from pydantic_ai.providers.google_gla import GoogleGLAProvider
7
8
 
8
9
  from ..conftest import TestEnv
9
10
 
11
+ pytestmark = [
12
+ pytest.mark.filterwarnings('ignore:`GoogleGLAProvider` is deprecated.:DeprecationWarning'),
13
+ ]
14
+
10
15
 
11
16
  def test_api_key_arg(env: TestEnv):
12
17
  env.set('GEMINI_API_KEY', 'via-env-var')
@@ -1,7 +1,9 @@
1
+ # pyright: reportDeprecated=false
1
2
  from __future__ import annotations as _annotations
2
3
 
3
4
  import json
4
5
  import os
6
+ import sys
5
7
  from dataclasses import dataclass
6
8
  from pathlib import Path
7
9
  from unittest.mock import patch
@@ -24,6 +26,8 @@ with try_import() as imports_successful:
24
26
  pytestmark = [
25
27
  pytest.mark.skipif(not imports_successful(), reason='google-genai not installed'),
26
28
  pytest.mark.anyio(),
29
+ pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
30
+ pytest.mark.filterwarnings('ignore:`GoogleVertexProvider` is deprecated.:DeprecationWarning'),
27
31
  ]
28
32
 
29
33
 
@@ -68,6 +72,7 @@ async def mock_refresh_token():
68
72
  return 'my-token'
69
73
 
70
74
 
75
+ @pytest.mark.skipif(sys.version_info < (3, 10), reason='Flaky test in 3.9')
71
76
  async def test_google_vertex_provider_service_account_file(
72
77
  monkeypatch: pytest.MonkeyPatch, tmp_path: Path, allow_model_requests: None
73
78
  ):
@@ -81,6 +86,7 @@ async def test_google_vertex_provider_service_account_file(
81
86
  assert getattr(provider.client.auth, 'project_id') == 'my-project-id'
82
87
 
83
88
 
89
+ @pytest.mark.skipif(sys.version_info < (3, 10), reason='Flaky test in 3.9')
84
90
  async def test_google_vertex_provider_service_account_file_info(
85
91
  monkeypatch: pytest.MonkeyPatch, allow_model_requests: None
86
92
  ):