pydantic-ai 0.3.7__tar.gz → 0.4.1__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 (317) hide show
  1. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/PKG-INFO +5 -3
  2. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/pyproject.toml +3 -1
  3. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_dataset.py +61 -10
  4. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_otel.py +4 -3
  5. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_reports.py +4 -2
  6. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/fasta2a/test_applications.py +2 -1
  7. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_bedrock.py +3 -3
  8. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_gemini.py +36 -27
  9. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_openai.py +10 -7
  10. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_openai_responses.py +3 -3
  11. pydantic_ai-0.4.1/tests/test_a2a.py +990 -0
  12. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_direct.py +1 -3
  13. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_logfire.py +1 -1
  14. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_mcp.py +1 -0
  15. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_messages.py +4 -0
  16. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_tools.py +5 -10
  17. pydantic_ai-0.3.7/tests/test_a2a.py +0 -352
  18. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/.gitignore +0 -0
  19. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/LICENSE +0 -0
  20. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/Makefile +0 -0
  21. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/README.md +0 -0
  22. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/__init__.py +0 -0
  23. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/dummy.pdf +0 -0
  24. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/kiwi.png +0 -0
  25. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/marcelo.mp3 +0 -0
  26. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/small_video.mp4 +0 -0
  27. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  28. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  29. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  30. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  31. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  32. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  33. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  34. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  35. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  36. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  37. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  38. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  39. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  40. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  41. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  42. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  43. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  44. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  45. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/conftest.py +0 -0
  46. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/__init__.py +0 -0
  47. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_base.py +0 -0
  48. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_common.py +0 -0
  49. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_context.py +0 -0
  50. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_spec.py +0 -0
  51. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluators.py +0 -0
  52. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_llm_as_a_judge.py +0 -0
  53. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_render_numbers.py +0 -0
  54. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_reporting.py +0 -0
  55. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_utils.py +0 -0
  56. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/utils.py +0 -0
  57. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/README.md +0 -0
  58. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/bank_database.py +0 -0
  59. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/fake_database.py +0 -0
  60. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/mcp_server.py +0 -0
  61. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/weather_service.py +0 -0
  62. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/ext/__init__.py +0 -0
  63. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/ext/test_langchain.py +0 -0
  64. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/fasta2a/__init__.py +0 -0
  65. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/__init__.py +0 -0
  66. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_file_persistence.py +0 -0
  67. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_graph.py +0 -0
  68. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_mermaid.py +0 -0
  69. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_persistence.py +0 -0
  70. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_state.py +0 -0
  71. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_utils.py +0 -0
  72. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/import_examples.py +0 -0
  73. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/json_body_serializer.py +0 -0
  74. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/mcp_server.py +0 -0
  75. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/__init__.py +0 -0
  76. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  77. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  78. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  79. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  80. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  81. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  82. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  83. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  84. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  85. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  86. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  87. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  88. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  89. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  90. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  91. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  92. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  93. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  94. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  95. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  96. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  97. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  98. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  99. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  100. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  101. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  102. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  103. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  104. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  105. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
  106. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  107. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  108. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  109. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  110. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  111. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  112. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  113. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  114. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  115. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  116. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  117. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  118. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  119. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  120. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  121. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  122. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  123. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  124. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  125. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  126. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  127. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  128. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  129. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  130. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  131. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  132. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  133. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  134. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  135. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  136. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  137. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  138. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  139. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  140. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  141. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  142. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  143. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  144. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  145. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  146. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  147. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  148. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  149. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  150. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  151. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  152. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  153. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  154. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  155. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  156. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  157. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  158. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  159. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  160. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  161. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  162. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  163. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  164. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  165. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  166. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  167. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  168. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  169. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  170. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  171. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  172. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  173. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  174. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  175. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  176. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  177. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  178. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  179. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  180. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  181. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  182. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  183. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  184. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  185. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  186. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  187. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  188. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  189. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  190. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  191. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  192. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  193. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  194. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  195. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  196. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  197. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  198. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  199. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  200. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  201. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  202. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  203. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  204. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  205. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  206. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  207. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  208. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  209. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  210. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  211. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  212. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  213. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  214. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  215. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  216. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  217. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  218. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  219. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  220. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  221. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  222. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  223. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  224. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  225. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
  226. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  227. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  228. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  229. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  230. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  231. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  232. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  233. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
  234. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  235. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  236. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  237. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  238. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  239. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  240. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  241. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  242. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  243. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  244. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  245. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  246. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  247. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  248. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  249. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  250. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  251. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  252. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  253. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  254. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  255. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  256. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  257. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  258. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  259. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  260. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  261. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  262. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  263. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/mock_async_stream.py +0 -0
  264. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_anthropic.py +0 -0
  265. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_cohere.py +0 -0
  266. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_deepseek.py +0 -0
  267. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_download_item.py +0 -0
  268. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_fallback.py +0 -0
  269. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_gemini_vertex.py +0 -0
  270. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_google.py +0 -0
  271. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_groq.py +0 -0
  272. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_instrumented.py +0 -0
  273. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_mcp_sampling.py +0 -0
  274. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_mistral.py +0 -0
  275. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model.py +0 -0
  276. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_function.py +0 -0
  277. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_names.py +0 -0
  278. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_request_parameters.py +0 -0
  279. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_test.py +0 -0
  280. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/__init__.py +0 -0
  281. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  282. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  283. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  284. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  285. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_anthropic.py +0 -0
  286. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_azure.py +0 -0
  287. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_bedrock.py +0 -0
  288. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_cohere.py +0 -0
  289. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_deepseek.py +0 -0
  290. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_fireworks.py +0 -0
  291. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_github.py +0 -0
  292. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_google_gla.py +0 -0
  293. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_google_vertex.py +0 -0
  294. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_grok.py +0 -0
  295. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_groq.py +0 -0
  296. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_heroku.py +0 -0
  297. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_mistral.py +0 -0
  298. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_openai.py +0 -0
  299. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_openrouter.py +0 -0
  300. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_provider_names.py +0 -0
  301. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_together.py +0 -0
  302. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_agent.py +0 -0
  303. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_cli.py +0 -0
  304. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_deps.py +0 -0
  305. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_examples.py +0 -0
  306. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_format_as_xml.py +0 -0
  307. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_history_processor.py +0 -0
  308. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_json_body_serializer.py +0 -0
  309. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_live.py +0 -0
  310. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_parts_manager.py +0 -0
  311. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_settings.py +0 -0
  312. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_streaming.py +0 -0
  313. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_thinking_part.py +0 -0
  314. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_usage_limits.py +0 -0
  315. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_utils.py +0 -0
  316. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/typed_agent.py +0 -0
  317. {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.3.7
3
+ Version: 0.4.1
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,9 +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[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.3.7
31
+ Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.4.1
32
+ Provides-Extra: a2a
33
+ Requires-Dist: fasta2a==0.4.1; extra == 'a2a'
32
34
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.3.7; extra == 'examples'
35
+ Requires-Dist: pydantic-ai-examples==0.4.1; extra == 'examples'
34
36
  Provides-Extra: logfire
35
37
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
36
38
  Description-Content-Type: text/markdown
@@ -46,12 +46,13 @@ requires-python = ">=3.9"
46
46
 
47
47
  [tool.hatch.metadata.hooks.uv-dynamic-versioning]
48
48
  dependencies = [
49
- "pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,cli,mcp,evals,a2a]=={{ version }}",
49
+ "pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,cli,mcp,evals]=={{ version }}",
50
50
  ]
51
51
 
52
52
  [tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies]
53
53
  examples = ["pydantic-ai-examples=={{ version }}"]
54
54
  logfire = ["logfire>=3.11.0"]
55
+ a2a = ["fasta2a=={{ version }}"]
55
56
 
56
57
  [project.urls]
57
58
  Homepage = "https://ai.pydantic.dev"
@@ -84,6 +85,7 @@ members = [
84
85
  # dev dependencies are defined in `pydantic-ai-slim/pyproject.toml` to allow for minimal testing
85
86
  lint = ["mypy>=1.11.2", "pyright>=1.1.390", "ruff>=0.6.9"]
86
87
  docs = [
88
+ "pydantic-ai[a2a]",
87
89
  "black>=24.10.0",
88
90
  "mkdocs>=1.6.1",
89
91
  "mkdocs-glightbox>=0.4.0",
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations as _annotations
2
2
 
3
- import asyncio
4
3
  import json
5
4
  import sys
6
5
  from dataclasses import dataclass
@@ -8,7 +7,7 @@ from pathlib import Path
8
7
  from typing import Any
9
8
 
10
9
  import pytest
11
- from dirty_equals import HasRepr
10
+ from dirty_equals import HasRepr, IsNumber
12
11
  from inline_snapshot import snapshot
13
12
  from pydantic import BaseModel
14
13
 
@@ -33,7 +32,7 @@ with try_import() as imports_successful:
33
32
  def evaluate(self, ctx: EvaluatorContext[object, object, object]) -> EvaluatorOutput:
34
33
  return self.output
35
34
 
36
- from pydantic_evals.reporting import ReportCase
35
+ from pydantic_evals.reporting import ReportCase, ReportCaseAdapter
37
36
 
38
37
  pytestmark = [pytest.mark.skipif(not imports_successful(), reason='pydantic-evals not installed'), pytest.mark.anyio]
39
38
 
@@ -178,25 +177,25 @@ async def test_add_evaluator(
178
177
  }
179
178
 
180
179
 
181
- async def test_evaluate(
180
+ async def test_evaluate_async(
182
181
  example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
183
182
  simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
184
183
  ):
185
184
  """Test evaluating a dataset."""
186
185
  example_dataset.add_evaluator(simple_evaluator())
187
186
 
188
- async def mock_task(inputs: TaskInput) -> TaskOutput:
187
+ async def mock_async_task(inputs: TaskInput) -> TaskOutput:
189
188
  if inputs.query == 'What is 2+2?':
190
189
  return TaskOutput(answer='4')
191
190
  elif inputs.query == 'What is the capital of France?':
192
191
  return TaskOutput(answer='Paris')
193
192
  return TaskOutput(answer='Unknown') # pragma: no cover
194
193
 
195
- report = await example_dataset.evaluate(mock_task)
194
+ report = await example_dataset.evaluate(mock_async_task)
196
195
 
197
196
  assert report is not None
198
197
  assert len(report.cases) == 2
199
- assert report.cases[0].model_dump() == snapshot(
198
+ assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
200
199
  {
201
200
  'assertions': {
202
201
  'correct': {
@@ -230,6 +229,58 @@ async def test_evaluate(
230
229
  )
231
230
 
232
231
 
232
+ async def test_evaluate_sync(
233
+ example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
234
+ simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
235
+ ):
236
+ """Test evaluating a dataset."""
237
+ example_dataset.add_evaluator(simple_evaluator())
238
+
239
+ def mock_sync_task(inputs: TaskInput) -> TaskOutput:
240
+ if inputs.query == 'What is 2+2?':
241
+ return TaskOutput(answer='4')
242
+ elif inputs.query == 'What is the capital of France?':
243
+ return TaskOutput(answer='Paris')
244
+ return TaskOutput(answer='Unknown') # pragma: no cover
245
+
246
+ report = await example_dataset.evaluate(mock_sync_task)
247
+
248
+ assert report is not None
249
+ assert len(report.cases) == 2
250
+ assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
251
+ {
252
+ 'assertions': {
253
+ 'correct': {
254
+ 'name': 'correct',
255
+ 'reason': None,
256
+ 'source': {'name': 'SimpleEvaluator', 'arguments': None},
257
+ 'value': True,
258
+ }
259
+ },
260
+ 'attributes': {},
261
+ 'expected_output': {'answer': '4', 'confidence': 1.0},
262
+ 'inputs': {'query': 'What is 2+2?'},
263
+ 'labels': {},
264
+ 'metadata': {'category': 'general', 'difficulty': 'easy'},
265
+ 'metrics': {},
266
+ 'name': 'case1',
267
+ 'output': {'answer': '4', 'confidence': 1.0},
268
+ 'scores': {
269
+ 'confidence': {
270
+ 'name': 'confidence',
271
+ 'reason': None,
272
+ 'source': {'name': 'SimpleEvaluator', 'arguments': None},
273
+ 'value': 1.0,
274
+ }
275
+ },
276
+ 'span_id': '0000000000000003',
277
+ 'task_duration': IsNumber(), # the runtime behavior is not deterministic due to threading
278
+ 'total_duration': IsNumber(), # the runtime behavior is not deterministic due to threading
279
+ 'trace_id': '00000000000000000000000000000001',
280
+ }
281
+ )
282
+
283
+
233
284
  async def test_evaluate_with_concurrency(
234
285
  example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
235
286
  simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
@@ -248,7 +299,7 @@ async def test_evaluate_with_concurrency(
248
299
 
249
300
  assert report is not None
250
301
  assert len(report.cases) == 2
251
- assert report.cases[0].model_dump() == snapshot(
302
+ assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
252
303
  {
253
304
  'assertions': {
254
305
  'correct': {
@@ -828,8 +879,8 @@ async def test_dataset_evaluate_with_sync_task(example_dataset: Dataset[TaskInpu
828
879
  def sync_task(inputs: TaskInput) -> TaskOutput:
829
880
  return TaskOutput(answer=inputs.query.upper())
830
881
 
831
- report = await example_dataset.evaluate(lambda x: asyncio.sleep(0, sync_task(x)))
832
- assert report.name == '<lambda>'
882
+ report = await example_dataset.evaluate(sync_task)
883
+ assert report.name == 'sync_task'
833
884
  assert len(report.cases) == 2
834
885
 
835
886
 
@@ -65,9 +65,10 @@ async def test_context_subtree_concurrent():
65
65
  task1_root = tree1.roots[0]
66
66
  assert len(task1_root.children) == 2, 'task1 should have exactly two children'
67
67
  task1_child_names = {child.name for child in task1_root.children}
68
- assert task1_child_names == {'task1_child1', 'task1_child2'}, (
69
- "task1's children should be task1_child1 and task1_child2"
70
- )
68
+ assert task1_child_names == {
69
+ 'task1_child1',
70
+ 'task1_child2',
71
+ }, "task1's children should be task1_child1 and task1_child2"
71
72
 
72
73
  # Verify that tree2 only contains spans from task2
73
74
  assert len(tree2.roots) == 1, 'tree2 should have exactly one root span'
@@ -12,9 +12,11 @@ with try_import() as imports_successful:
12
12
  from pydantic_evals.evaluators import EvaluationResult, Evaluator, EvaluatorContext
13
13
  from pydantic_evals.reporting import (
14
14
  EvaluationReport,
15
+ EvaluationReportAdapter,
15
16
  RenderNumberConfig,
16
17
  RenderValueConfig,
17
18
  ReportCase,
19
+ ReportCaseAdapter,
18
20
  ReportCaseAggregate,
19
21
  )
20
22
 
@@ -157,7 +159,7 @@ async def test_report_case_aggregate():
157
159
  async def test_report_serialization(sample_report: EvaluationReport):
158
160
  """Test serializing a report to dict."""
159
161
  # Serialize the report
160
- serialized = sample_report.model_dump()
162
+ serialized = EvaluationReportAdapter.dump_python(sample_report)
161
163
 
162
164
  # Check the serialized structure
163
165
  assert 'cases' in serialized
@@ -202,7 +204,7 @@ async def test_report_with_error(mock_evaluator: Evaluator[TaskInput, TaskOutput
202
204
  name='error_report',
203
205
  )
204
206
 
205
- assert report.cases[0].model_dump() == snapshot(
207
+ assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
206
208
  {
207
209
  'assertions': {
208
210
  'error_evaluator': {
@@ -34,12 +34,13 @@ async def test_agent_card():
34
34
  assert response.json() == snapshot(
35
35
  {
36
36
  'name': 'Agent',
37
+ 'description': 'FastA2A Agent',
37
38
  'url': 'http://localhost:8000',
38
39
  'version': '1.0.0',
40
+ 'protocolVersion': '0.2.5',
39
41
  'skills': [],
40
42
  'defaultInputModes': ['application/json'],
41
43
  'defaultOutputModes': ['application/json'],
42
44
  'capabilities': {'streaming': False, 'pushNotifications': False, 'stateTransitionHistory': False},
43
- 'authentication': {'schemes': []},
44
45
  }
45
46
  )
@@ -1443,9 +1443,9 @@ async def test_bedrock_mistral_tool_result_format(bedrock_provider: BedrockProvi
1443
1443
 
1444
1444
  async def test_bedrock_anthropic_no_tool_choice(bedrock_provider: BedrockProvider):
1445
1445
  my_tool = ToolDefinition(
1446
- 'my_tool',
1447
- 'This is my tool',
1448
- {'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
1446
+ name='my_tool',
1447
+ description='This is my tool',
1448
+ parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
1449
1449
  )
1450
1450
  mrp = ModelRequestParameters(output_mode='tool', function_tools=[my_tool], allow_text_output=False, output_tools=[])
1451
1451
 
@@ -83,14 +83,18 @@ async def test_model_tools(allow_model_requests: None):
83
83
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
84
84
  tools = [
85
85
  ToolDefinition(
86
- 'foo',
87
- 'This is foo',
88
- {'type': 'object', 'title': 'Foo', 'properties': {'bar': {'type': 'number', 'title': 'Bar'}}},
86
+ name='foo',
87
+ description='This is foo',
88
+ parameters_json_schema={
89
+ 'type': 'object',
90
+ 'title': 'Foo',
91
+ 'properties': {'bar': {'type': 'number', 'title': 'Bar'}},
92
+ },
89
93
  ),
90
94
  ToolDefinition(
91
- 'apple',
92
- 'This is apple',
93
- {
95
+ name='apple',
96
+ description='This is apple',
97
+ parameters_json_schema={
94
98
  'type': 'object',
95
99
  'properties': {
96
100
  'banana': {'type': 'array', 'title': 'Banana', 'items': {'type': 'number', 'title': 'Bar'}}
@@ -99,9 +103,14 @@ async def test_model_tools(allow_model_requests: None):
99
103
  ),
100
104
  ]
101
105
  output_tool = ToolDefinition(
102
- 'result',
103
- 'This is the tool for the final Result',
104
- {'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}, 'required': ['spam']},
106
+ name='result',
107
+ description='This is the tool for the final Result',
108
+ parameters_json_schema={
109
+ 'type': 'object',
110
+ 'title': 'Result',
111
+ 'properties': {'spam': {'type': 'number'}},
112
+ 'required': ['spam'],
113
+ },
105
114
  )
106
115
 
107
116
  mrp = ModelRequestParameters(
@@ -148,9 +157,9 @@ async def test_model_tools(allow_model_requests: None):
148
157
  async def test_require_response_tool(allow_model_requests: None):
149
158
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
150
159
  output_tool = ToolDefinition(
151
- 'result',
152
- 'This is the tool for the final Result',
153
- {'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
160
+ name='result',
161
+ description='This is the tool for the final Result',
162
+ parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
154
163
  )
155
164
  mrp = ModelRequestParameters(
156
165
  function_tools=[],
@@ -235,9 +244,9 @@ async def test_json_def_replaced(allow_model_requests: None):
235
244
 
236
245
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
237
246
  output_tool = ToolDefinition(
238
- 'result',
239
- 'This is the tool for the final Result',
240
- json_schema,
247
+ name='result',
248
+ description='This is the tool for the final Result',
249
+ parameters_json_schema=json_schema,
241
250
  )
242
251
  mrp = ModelRequestParameters(
243
252
  function_tools=[],
@@ -320,9 +329,9 @@ async def test_json_def_enum(allow_model_requests: None):
320
329
  )
321
330
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
322
331
  output_tool = ToolDefinition(
323
- 'result',
324
- 'This is the tool for the final Result',
325
- json_schema,
332
+ name='result',
333
+ description='This is the tool for the final Result',
334
+ parameters_json_schema=json_schema,
326
335
  )
327
336
  mrp = ModelRequestParameters(
328
337
  function_tools=[],
@@ -368,9 +377,9 @@ async def test_json_def_replaced_any_of(allow_model_requests: None):
368
377
 
369
378
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
370
379
  output_tool = ToolDefinition(
371
- 'result',
372
- 'This is the tool for the final Result',
373
- json_schema,
380
+ name='result',
381
+ description='This is the tool for the final Result',
382
+ parameters_json_schema=json_schema,
374
383
  )
375
384
  mrp = ModelRequestParameters(
376
385
  function_tools=[],
@@ -437,9 +446,9 @@ async def test_json_def_recursive(allow_model_requests: None):
437
446
 
438
447
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
439
448
  output_tool = ToolDefinition(
440
- 'result',
441
- 'This is the tool for the final Result',
442
- json_schema,
449
+ name='result',
450
+ description='This is the tool for the final Result',
451
+ parameters_json_schema=json_schema,
443
452
  )
444
453
  with pytest.raises(UserError, match=r'Recursive `\$ref`s in JSON Schema are not supported by Gemini'):
445
454
  mrp = ModelRequestParameters(
@@ -476,9 +485,9 @@ async def test_json_def_date(allow_model_requests: None):
476
485
 
477
486
  m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
478
487
  output_tool = ToolDefinition(
479
- 'result',
480
- 'This is the tool for the final Result',
481
- json_schema,
488
+ name='result',
489
+ description='This is the tool for the final Result',
490
+ parameters_json_schema=json_schema,
482
491
  )
483
492
  mrp = ModelRequestParameters(
484
493
  function_tools=[],
@@ -1095,7 +1095,10 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
1095
1095
  '$defs': {
1096
1096
  'MyDefaultRecursiveDc': {
1097
1097
  'properties': {
1098
- 'field': {'anyOf': [{'$ref': '#/$defs/MyDefaultRecursiveDc'}, {'type': 'null'}]}
1098
+ 'field': {
1099
+ 'anyOf': [{'$ref': '#/$defs/MyDefaultRecursiveDc'}, {'type': 'null'}],
1100
+ 'default': None,
1101
+ }
1099
1102
  },
1100
1103
  'type': 'object',
1101
1104
  },
@@ -1213,7 +1216,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
1213
1216
  {
1214
1217
  '$defs': {
1215
1218
  'MyDefaultDc': {
1216
- 'properties': {'x': {'type': 'integer'}},
1219
+ 'properties': {'x': {'default': 1, 'type': 'integer'}},
1217
1220
  'type': 'object',
1218
1221
  }
1219
1222
  },
@@ -1253,7 +1256,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
1253
1256
  {
1254
1257
  '$defs': {
1255
1258
  'MyDefaultDc': {
1256
- 'properties': {'x': {'type': 'integer'}},
1259
+ 'properties': {'x': {'default': 1, 'type': 'integer'}},
1257
1260
  'type': 'object',
1258
1261
  }
1259
1262
  },
@@ -1293,7 +1296,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
1293
1296
  {
1294
1297
  '$defs': {
1295
1298
  'MyDefaultDc': {
1296
- 'properties': {'x': {'type': 'integer'}},
1299
+ 'properties': {'x': {'default': 1, 'type': 'integer'}},
1297
1300
  'type': 'object',
1298
1301
  }
1299
1302
  },
@@ -1913,9 +1916,9 @@ def test_openai_model_profile_from_provider():
1913
1916
 
1914
1917
  def test_model_profile_strict_not_supported():
1915
1918
  my_tool = ToolDefinition(
1916
- 'my_tool',
1917
- 'This is my tool',
1918
- {'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
1919
+ name='my_tool',
1920
+ description='This is my tool',
1921
+ parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
1919
1922
  strict=True,
1920
1923
  )
1921
1924
 
@@ -473,9 +473,9 @@ async def test_openai_responses_model_instructions(allow_model_requests: None, o
473
473
 
474
474
  def test_model_profile_strict_not_supported():
475
475
  my_tool = ToolDefinition(
476
- 'my_tool',
477
- 'This is my tool',
478
- {'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
476
+ name='my_tool',
477
+ description='This is my tool',
478
+ parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
479
479
  strict=True,
480
480
  )
481
481