pydantic-ai 0.3.3__tar.gz → 0.3.4__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 (313) hide show
  1. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/PKG-INFO +3 -3
  2. pydantic_ai-0.3.4/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +171 -0
  3. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_anthropic.py +21 -5
  4. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_instrumented.py +85 -0
  5. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_logfire.py +32 -0
  6. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/.gitignore +0 -0
  7. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/LICENSE +0 -0
  8. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/Makefile +0 -0
  9. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/README.md +0 -0
  10. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/pyproject.toml +0 -0
  11. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/__init__.py +0 -0
  12. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/assets/dummy.pdf +0 -0
  13. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/assets/kiwi.png +0 -0
  14. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/assets/marcelo.mp3 +0 -0
  15. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/assets/small_video.mp4 +0 -0
  16. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  17. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  18. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  19. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  20. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  21. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  22. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  23. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  24. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  25. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  26. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  27. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  28. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  29. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  30. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  31. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  32. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  33. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  34. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/conftest.py +0 -0
  35. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/__init__.py +0 -0
  36. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_dataset.py +0 -0
  37. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_evaluator_base.py +0 -0
  38. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_evaluator_common.py +0 -0
  39. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_evaluator_context.py +0 -0
  40. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_evaluator_spec.py +0 -0
  41. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_evaluators.py +0 -0
  42. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_llm_as_a_judge.py +0 -0
  43. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_otel.py +0 -0
  44. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_render_numbers.py +0 -0
  45. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_reporting.py +0 -0
  46. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_reports.py +0 -0
  47. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/test_utils.py +0 -0
  48. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/evals/utils.py +0 -0
  49. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/example_modules/README.md +0 -0
  50. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/example_modules/bank_database.py +0 -0
  51. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/example_modules/fake_database.py +0 -0
  52. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/example_modules/mcp_server.py +0 -0
  53. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/example_modules/weather_service.py +0 -0
  54. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/ext/__init__.py +0 -0
  55. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/ext/test_langchain.py +0 -0
  56. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/fasta2a/__init__.py +0 -0
  57. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/fasta2a/test_applications.py +0 -0
  58. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/__init__.py +0 -0
  59. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_file_persistence.py +0 -0
  60. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_graph.py +0 -0
  61. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_mermaid.py +0 -0
  62. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_persistence.py +0 -0
  63. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_state.py +0 -0
  64. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/graph/test_utils.py +0 -0
  65. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/import_examples.py +0 -0
  66. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/json_body_serializer.py +0 -0
  67. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/mcp_server.py +0 -0
  68. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/__init__.py +0 -0
  69. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  70. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  71. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  72. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  73. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  74. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  75. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  76. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  77. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  78. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  79. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  80. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  81. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  82. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  83. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  84. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  85. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  86. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  87. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  88. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  89. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  90. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  91. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  92. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  93. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  94. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  95. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  96. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  97. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
  98. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  99. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  100. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  101. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  102. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  103. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  104. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  105. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  106. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  107. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  108. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  109. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  110. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  111. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  112. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  113. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  114. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  115. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  116. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  117. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  118. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  119. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  120. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  121. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  122. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  123. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  124. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  125. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  126. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  127. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  128. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  129. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  130. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  131. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  132. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  133. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  134. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  135. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  136. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  137. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  138. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  139. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  140. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  141. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  142. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  143. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  144. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  145. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  146. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  147. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  148. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  149. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  150. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  151. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  152. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  153. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  154. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  155. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  156. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  157. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  158. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  159. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  160. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  161. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  162. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  163. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  164. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  165. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  166. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  167. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  168. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  169. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  170. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  171. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  172. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  173. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  174. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  175. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  176. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  177. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  178. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  179. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  180. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  181. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  182. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  183. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  184. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  185. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  186. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  187. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  188. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  189. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  190. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  191. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  192. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  193. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  194. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  195. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  196. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  197. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  198. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  199. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  200. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  201. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  202. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  203. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  204. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  205. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  206. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  207. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  208. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  209. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  210. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  211. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  212. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  213. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  214. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  215. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
  216. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  217. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  218. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  219. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  220. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  221. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  222. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  223. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
  224. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  225. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  226. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  227. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  228. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  229. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  230. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  231. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  232. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  233. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  234. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  235. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  236. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  237. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  238. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  239. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  240. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  241. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  242. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  243. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  244. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  245. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  246. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  247. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  248. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  249. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  250. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  251. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  252. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  253. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/mock_async_stream.py +0 -0
  254. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_bedrock.py +0 -0
  255. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_cohere.py +0 -0
  256. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_deepseek.py +0 -0
  257. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_download_item.py +0 -0
  258. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_fallback.py +0 -0
  259. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_gemini.py +0 -0
  260. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_gemini_vertex.py +0 -0
  261. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_google.py +0 -0
  262. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_groq.py +0 -0
  263. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_mcp_sampling.py +0 -0
  264. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_mistral.py +0 -0
  265. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_model.py +0 -0
  266. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_model_function.py +0 -0
  267. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_model_names.py +0 -0
  268. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_model_request_parameters.py +0 -0
  269. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_model_test.py +0 -0
  270. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_openai.py +0 -0
  271. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/models/test_openai_responses.py +0 -0
  272. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/__init__.py +0 -0
  273. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  274. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  275. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  276. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  277. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_anthropic.py +0 -0
  278. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_azure.py +0 -0
  279. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_bedrock.py +0 -0
  280. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_cohere.py +0 -0
  281. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_deepseek.py +0 -0
  282. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_fireworks.py +0 -0
  283. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_google_gla.py +0 -0
  284. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_google_vertex.py +0 -0
  285. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_grok.py +0 -0
  286. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_groq.py +0 -0
  287. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_heroku.py +0 -0
  288. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_mistral.py +0 -0
  289. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_openai.py +0 -0
  290. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_openrouter.py +0 -0
  291. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_provider_names.py +0 -0
  292. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/providers/test_together.py +0 -0
  293. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_a2a.py +0 -0
  294. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_agent.py +0 -0
  295. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_cli.py +0 -0
  296. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_deps.py +0 -0
  297. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_direct.py +0 -0
  298. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_examples.py +0 -0
  299. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_format_as_xml.py +0 -0
  300. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_history_processor.py +0 -0
  301. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_json_body_serializer.py +0 -0
  302. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_live.py +0 -0
  303. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_mcp.py +0 -0
  304. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_messages.py +0 -0
  305. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_parts_manager.py +0 -0
  306. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_settings.py +0 -0
  307. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_streaming.py +0 -0
  308. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_thinking_part.py +0 -0
  309. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_tools.py +0 -0
  310. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_usage_limits.py +0 -0
  311. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/test_utils.py +0 -0
  312. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/tests/typed_agent.py +0 -0
  313. {pydantic_ai-0.3.3 → pydantic_ai-0.3.4}/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.3
3
+ Version: 0.3.4
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,9 @@ 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.3
31
+ Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.3.4
32
32
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.3.3; extra == 'examples'
33
+ Requires-Dist: pydantic-ai-examples==0.3.4; extra == 'examples'
34
34
  Provides-Extra: logfire
35
35
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
36
36
  Description-Content-Type: text/markdown
@@ -0,0 +1,171 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - application/json
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '388'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.anthropic.com
16
+ method: POST
17
+ parsed_body:
18
+ max_tokens: 4096
19
+ messages:
20
+ - content:
21
+ - text: What is the largest city in the user country?
22
+ type: text
23
+ role: user
24
+ model: claude-sonnet-4-0
25
+ stream: false
26
+ thinking:
27
+ budget_tokens: 3000
28
+ type: enabled
29
+ tool_choice:
30
+ type: auto
31
+ tools:
32
+ - description: ''
33
+ input_schema:
34
+ additionalProperties: false
35
+ properties: {}
36
+ type: object
37
+ name: get_user_country
38
+ uri: https://api.anthropic.com/v1/messages?beta=true
39
+ response:
40
+ headers:
41
+ connection:
42
+ - keep-alive
43
+ content-length:
44
+ - '1690'
45
+ content-type:
46
+ - application/json
47
+ strict-transport-security:
48
+ - max-age=31536000; includeSubDomains; preload
49
+ transfer-encoding:
50
+ - chunked
51
+ parsed_body:
52
+ content:
53
+ - signature: EqIECkYIBBgCKkC3YeluAxT1ZvKgL7zILjOUS+XrvAMrNCGhYQkSWCLo5jQ4hXNnnht77qVzdcdMu0YoXmEM/vTGZ2ibi8FSim41EgyvPwDsa4PKH+ZFuzEaDDNjzy/pLEbhbHFgqSIwEba/zTH5lZ6umMgWI/XKQwINUpqIRf2n6DCPpppSbV1VaZJRepT+hCJbPriicNDMKokDakK6RapHz23G6iWyJON4/PLfhUgjLgAxjk8kuVM3pH/i/m2ZpYndCJoIDX2q/UffytbMl8tb4h1bQW7XqOCERGHoF6yXiqgYs+aFaUBRqM6NvWXzPBqSUkX2zvr4FP0fEKbiAawu7JuBGXq5TuXlpRlJKEimlGDySFb5o4mW6jd60NTZaO5ULCdZUleBfnDsosHqDMJohUKyIE5kNEamEw4ZAjdGi3IkJ79L3CBaWUvnRh4e4z2UMqpztFKHvozcziMl0D1dhLI1omF+9RA8ZZYeA+vA2jgIQz6UlSe7rmcZYM0msrLZGNqu5FNYTuU+OMbYsLC6CkRnT6gvcG/7W7QlKFDYY5fpq72LoSyMrXSKJKKlA9q3PEcDvKfGOau3rxjrmEQY9y9WU+Sl/pUHMVME/VfgAPKPPGKiDiMkOa87LqN2FN1mmNVIP9H8c2sSdWmRtssR8t0EKqP2844kTEZKyJImGT/OsSUVuAMeaZkZlEbBXHowqHO5nL0UEdNPPjqwA634CEA/GAE=
54
+ thinking: |-
55
+ The user is asking about the largest city in "the user country". To answer this question, I need to first determine what country the user is in. I have a function called "get_user_country" that can help me find out the user's country. Once I have that information, I can then tell them what the largest city in that country is.
56
+
57
+ Let me call the get_user_country function first.
58
+ type: thinking
59
+ - text: I'll help you find the largest city in your country. Let me first determine which country you're in.
60
+ type: text
61
+ - id: toolu_01S1p6wo8sLNhu2gNHJMRk7D
62
+ input: {}
63
+ name: get_user_country
64
+ type: tool_use
65
+ id: msg_0171WD3hcwFRMzBbm5CNZ8sR
66
+ model: claude-sonnet-4-20250514
67
+ role: assistant
68
+ stop_reason: tool_use
69
+ stop_sequence: null
70
+ type: message
71
+ usage:
72
+ cache_creation_input_tokens: 0
73
+ cache_read_input_tokens: 0
74
+ input_tokens: 397
75
+ output_tokens: 157
76
+ service_tier: standard
77
+ status:
78
+ code: 200
79
+ message: OK
80
+ - request:
81
+ headers:
82
+ accept:
83
+ - application/json
84
+ accept-encoding:
85
+ - gzip, deflate
86
+ connection:
87
+ - keep-alive
88
+ content-length:
89
+ - '1944'
90
+ content-type:
91
+ - application/json
92
+ host:
93
+ - api.anthropic.com
94
+ method: POST
95
+ parsed_body:
96
+ max_tokens: 4096
97
+ messages:
98
+ - content:
99
+ - text: What is the largest city in the user country?
100
+ type: text
101
+ role: user
102
+ - content:
103
+ - signature: EqIECkYIBBgCKkC3YeluAxT1ZvKgL7zILjOUS+XrvAMrNCGhYQkSWCLo5jQ4hXNnnht77qVzdcdMu0YoXmEM/vTGZ2ibi8FSim41EgyvPwDsa4PKH+ZFuzEaDDNjzy/pLEbhbHFgqSIwEba/zTH5lZ6umMgWI/XKQwINUpqIRf2n6DCPpppSbV1VaZJRepT+hCJbPriicNDMKokDakK6RapHz23G6iWyJON4/PLfhUgjLgAxjk8kuVM3pH/i/m2ZpYndCJoIDX2q/UffytbMl8tb4h1bQW7XqOCERGHoF6yXiqgYs+aFaUBRqM6NvWXzPBqSUkX2zvr4FP0fEKbiAawu7JuBGXq5TuXlpRlJKEimlGDySFb5o4mW6jd60NTZaO5ULCdZUleBfnDsosHqDMJohUKyIE5kNEamEw4ZAjdGi3IkJ79L3CBaWUvnRh4e4z2UMqpztFKHvozcziMl0D1dhLI1omF+9RA8ZZYeA+vA2jgIQz6UlSe7rmcZYM0msrLZGNqu5FNYTuU+OMbYsLC6CkRnT6gvcG/7W7QlKFDYY5fpq72LoSyMrXSKJKKlA9q3PEcDvKfGOau3rxjrmEQY9y9WU+Sl/pUHMVME/VfgAPKPPGKiDiMkOa87LqN2FN1mmNVIP9H8c2sSdWmRtssR8t0EKqP2844kTEZKyJImGT/OsSUVuAMeaZkZlEbBXHowqHO5nL0UEdNPPjqwA634CEA/GAE=
104
+ thinking: |-
105
+ The user is asking about the largest city in "the user country". To answer this question, I need to first determine what country the user is in. I have a function called "get_user_country" that can help me find out the user's country. Once I have that information, I can then tell them what the largest city in that country is.
106
+
107
+ Let me call the get_user_country function first.
108
+ type: thinking
109
+ - text: I'll help you find the largest city in your country. Let me first determine which country you're in.
110
+ type: text
111
+ - id: toolu_01S1p6wo8sLNhu2gNHJMRk7D
112
+ input: {}
113
+ name: get_user_country
114
+ type: tool_use
115
+ role: assistant
116
+ - content:
117
+ - content: Mexico
118
+ is_error: false
119
+ tool_use_id: toolu_01S1p6wo8sLNhu2gNHJMRk7D
120
+ type: tool_result
121
+ role: user
122
+ model: claude-sonnet-4-0
123
+ stream: false
124
+ thinking:
125
+ budget_tokens: 3000
126
+ type: enabled
127
+ tool_choice:
128
+ type: auto
129
+ tools:
130
+ - description: ''
131
+ input_schema:
132
+ additionalProperties: false
133
+ properties: {}
134
+ type: object
135
+ name: get_user_country
136
+ uri: https://api.anthropic.com/v1/messages?beta=true
137
+ response:
138
+ headers:
139
+ connection:
140
+ - keep-alive
141
+ content-length:
142
+ - '769'
143
+ content-type:
144
+ - application/json
145
+ strict-transport-security:
146
+ - max-age=31536000; includeSubDomains; preload
147
+ transfer-encoding:
148
+ - chunked
149
+ parsed_body:
150
+ content:
151
+ - text: "Based on the information that you're in Mexico, the largest city in your country is **Mexico City** (Ciudad
152
+ de México). \n\nMexico City is not only the largest city in Mexico but also one of the largest metropolitan areas
153
+ in the world, with a metropolitan population of over 21 million people. The city proper has a population of approximately
154
+ 9 million people and serves as the capital and political, cultural, and economic center of Mexico."
155
+ type: text
156
+ id: msg_01GrmzEM2LkXfRpLSjXSNMDa
157
+ model: claude-sonnet-4-20250514
158
+ role: assistant
159
+ stop_reason: end_turn
160
+ stop_sequence: null
161
+ type: message
162
+ usage:
163
+ cache_creation_input_tokens: 0
164
+ cache_read_input_tokens: 0
165
+ input_tokens: 567
166
+ output_tokens: 94
167
+ service_tier: standard
168
+ status:
169
+ code: 200
170
+ message: OK
171
+ version: 1
@@ -1356,7 +1356,6 @@ async def test_anthropic_empty_content_filtering(env: TestEnv):
1356
1356
  assert len(anthropic_messages) == 0 # No messages should be added
1357
1357
 
1358
1358
 
1359
- @pytest.mark.vcr()
1360
1359
  async def test_anthropic_tool_output(allow_model_requests: None, anthropic_api_key: str):
1361
1360
  m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1362
1361
 
@@ -1451,7 +1450,6 @@ async def test_anthropic_tool_output(allow_model_requests: None, anthropic_api_k
1451
1450
  )
1452
1451
 
1453
1452
 
1454
- @pytest.mark.vcr()
1455
1453
  async def test_anthropic_text_output_function(allow_model_requests: None, anthropic_api_key: str):
1456
1454
  m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1457
1455
 
@@ -1540,7 +1538,6 @@ async def test_anthropic_text_output_function(allow_model_requests: None, anthro
1540
1538
  )
1541
1539
 
1542
1540
 
1543
- @pytest.mark.vcr()
1544
1541
  async def test_anthropic_prompted_output(allow_model_requests: None, anthropic_api_key: str):
1545
1542
  m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1546
1543
 
@@ -1635,7 +1632,6 @@ Don't include any text or Markdown fencing before or after.\
1635
1632
  )
1636
1633
 
1637
1634
 
1638
- @pytest.mark.vcr()
1639
1635
  async def test_anthropic_prompted_output_multiple(allow_model_requests: None, anthropic_api_key: str):
1640
1636
  m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1641
1637
 
@@ -1695,7 +1691,6 @@ Don't include any text or Markdown fencing before or after.\
1695
1691
  )
1696
1692
 
1697
1693
 
1698
- @pytest.mark.vcr()
1699
1694
  async def test_anthropic_native_output(allow_model_requests: None, anthropic_api_key: str):
1700
1695
  m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1701
1696
 
@@ -1707,3 +1702,24 @@ async def test_anthropic_native_output(allow_model_requests: None, anthropic_api
1707
1702
 
1708
1703
  with pytest.raises(UserError, match='Structured output is not supported by the model.'):
1709
1704
  await agent.run('What is the largest city in the user country?')
1705
+
1706
+
1707
+ async def test_anthropic_tool_with_thinking(allow_model_requests: None, anthropic_api_key: str):
1708
+ """When using thinking with tool calls in Anthropic, we need to send the thinking part back to the provider.
1709
+
1710
+ This tests the issue raised in https://github.com/pydantic/pydantic-ai/issues/2040.
1711
+ """
1712
+ m = AnthropicModel('claude-sonnet-4-0', provider=AnthropicProvider(api_key=anthropic_api_key))
1713
+ settings = AnthropicModelSettings(anthropic_thinking={'type': 'enabled', 'budget_tokens': 3000})
1714
+ agent = Agent(m, model_settings=settings)
1715
+
1716
+ @agent.tool_plain
1717
+ async def get_user_country() -> str:
1718
+ return 'Mexico'
1719
+
1720
+ result = await agent.run('What is the largest city in the user country?')
1721
+ assert result.output == snapshot("""\
1722
+ Based on the information that you're in Mexico, the largest city in your country is **Mexico City** (Ciudad de México). \n\
1723
+
1724
+ Mexico City is not only the largest city in Mexico but also one of the largest metropolitan areas in the world, with a metropolitan population of over 21 million people. The city proper has a population of approximately 9 million people and serves as the capital and political, cultural, and economic center of Mexico.\
1725
+ """)
@@ -837,3 +837,88 @@ def test_messages_to_otel_events_without_binary_content(document_content: Binary
837
837
  }
838
838
  ]
839
839
  )
840
+
841
+
842
+ def test_messages_without_content(document_content: BinaryContent):
843
+ messages: list[ModelMessage] = [
844
+ ModelRequest(parts=[SystemPromptPart('system_prompt')]),
845
+ ModelResponse(parts=[TextPart('text1')]),
846
+ ModelRequest(
847
+ parts=[
848
+ UserPromptPart(
849
+ content=[
850
+ 'user_prompt1',
851
+ VideoUrl('https://example.com/video.mp4'),
852
+ ImageUrl('https://example.com/image.png'),
853
+ AudioUrl('https://example.com/audio.mp3'),
854
+ DocumentUrl('https://example.com/document.pdf'),
855
+ document_content,
856
+ ]
857
+ )
858
+ ]
859
+ ),
860
+ ModelResponse(parts=[TextPart('text2'), ToolCallPart(tool_name='my_tool', args={'a': 13, 'b': 4})]),
861
+ ModelRequest(parts=[ToolReturnPart('tool', 'tool_return_content', 'tool_call_1')]),
862
+ ModelRequest(parts=[RetryPromptPart('retry_prompt', tool_name='tool', tool_call_id='tool_call_2')]),
863
+ ModelRequest(parts=[UserPromptPart(content=['user_prompt2', document_content])]),
864
+ ]
865
+ settings = InstrumentationSettings(include_content=False)
866
+ assert [InstrumentedModel.event_to_dict(e) for e in settings.messages_to_otel_events(messages)] == snapshot(
867
+ [
868
+ {
869
+ 'role': 'system',
870
+ 'gen_ai.message.index': 0,
871
+ 'event.name': 'gen_ai.system.message',
872
+ },
873
+ {
874
+ 'role': 'assistant',
875
+ 'gen_ai.message.index': 1,
876
+ 'event.name': 'gen_ai.assistant.message',
877
+ },
878
+ {
879
+ 'content': [
880
+ {'kind': 'text'},
881
+ {'kind': 'video-url'},
882
+ {'kind': 'image-url'},
883
+ {'kind': 'audio-url'},
884
+ {'kind': 'document-url'},
885
+ {'kind': 'binary', 'media_type': 'application/pdf'},
886
+ ],
887
+ 'role': 'user',
888
+ 'gen_ai.message.index': 2,
889
+ 'event.name': 'gen_ai.user.message',
890
+ },
891
+ {
892
+ 'role': 'assistant',
893
+ 'tool_calls': [
894
+ {
895
+ 'id': IsStr(),
896
+ 'type': 'function',
897
+ 'function': {'name': 'my_tool', 'arguments': {'a': 13, 'b': 4}},
898
+ }
899
+ ],
900
+ 'gen_ai.message.index': 3,
901
+ 'event.name': 'gen_ai.assistant.message',
902
+ },
903
+ {
904
+ 'role': 'tool',
905
+ 'id': 'tool_call_1',
906
+ 'name': 'tool',
907
+ 'gen_ai.message.index': 4,
908
+ 'event.name': 'gen_ai.tool.message',
909
+ },
910
+ {
911
+ 'role': 'tool',
912
+ 'id': 'tool_call_2',
913
+ 'name': 'tool',
914
+ 'gen_ai.message.index': 5,
915
+ 'event.name': 'gen_ai.tool.message',
916
+ },
917
+ {
918
+ 'content': [{'kind': 'text'}, {'kind': 'binary', 'media_type': 'application/pdf'}],
919
+ 'role': 'user',
920
+ 'gen_ai.message.index': 6,
921
+ 'event.name': 'gen_ai.user.message',
922
+ },
923
+ ]
924
+ )
@@ -525,3 +525,35 @@ async def test_feedback(capfire: CaptureLogfire) -> None:
525
525
  },
526
526
  ]
527
527
  )
528
+
529
+
530
+ @pytest.mark.skipif(not logfire_installed, reason='logfire not installed')
531
+ @pytest.mark.parametrize('include_content', [True, False])
532
+ def test_include_tool_args_span_attributes(
533
+ get_logfire_summary: Callable[[], LogfireSummary],
534
+ include_content: bool,
535
+ ) -> None:
536
+ """Test that tool arguments are included/excluded in span attributes based on instrumentation settings."""
537
+
538
+ instrumentation_settings = InstrumentationSettings(include_content=include_content)
539
+ test_model = TestModel(seed=42)
540
+ my_agent = Agent(model=test_model, instrument=instrumentation_settings)
541
+
542
+ @my_agent.tool_plain
543
+ async def add_numbers(x: int, y: int) -> int:
544
+ """Add two numbers together."""
545
+ return x + y
546
+
547
+ result = my_agent.run_sync('Add 42 and 42')
548
+ assert result.output == snapshot('{"add_numbers":84}')
549
+
550
+ summary = get_logfire_summary()
551
+
552
+ [tool_attributes] = [
553
+ attributes for attributes in summary.attributes.values() if attributes.get('gen_ai.tool.name') == 'add_numbers'
554
+ ]
555
+
556
+ if include_content:
557
+ assert tool_attributes['tool_arguments'] == snapshot('{"x":42,"y":42}')
558
+ else:
559
+ assert 'tool_arguments' not in tool_attributes
File without changes
File without changes
File without changes
File without changes
File without changes