pydantic-ai 0.2.9__tar.gz → 0.2.11__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 (222) hide show
  1. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/PKG-INFO +3 -3
  2. pydantic_ai-0.2.11/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +73 -0
  3. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_anthropic.py +28 -0
  4. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_mcp.py +27 -11
  5. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/.gitignore +0 -0
  6. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/LICENSE +0 -0
  7. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/Makefile +0 -0
  8. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/README.md +0 -0
  9. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/pyproject.toml +0 -0
  10. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/__init__.py +0 -0
  11. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/assets/dummy.pdf +0 -0
  12. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/assets/kiwi.png +0 -0
  13. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/assets/marcelo.mp3 +0 -0
  14. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/assets/small_video.mp4 +0 -0
  15. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  16. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  17. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  18. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  19. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  20. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  21. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  22. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  23. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  24. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  25. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  26. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  27. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  28. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  29. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  30. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  31. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/conftest.py +0 -0
  32. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/__init__.py +0 -0
  33. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_dataset.py +0 -0
  34. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_evaluator_base.py +0 -0
  35. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_evaluator_common.py +0 -0
  36. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_evaluator_context.py +0 -0
  37. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_evaluator_spec.py +0 -0
  38. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_evaluators.py +0 -0
  39. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_llm_as_a_judge.py +0 -0
  40. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_otel.py +0 -0
  41. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_render_numbers.py +0 -0
  42. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_reporting.py +0 -0
  43. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_reports.py +0 -0
  44. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/test_utils.py +0 -0
  45. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/evals/utils.py +0 -0
  46. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/example_modules/README.md +0 -0
  47. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/example_modules/bank_database.py +0 -0
  48. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/example_modules/fake_database.py +0 -0
  49. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/example_modules/weather_service.py +0 -0
  50. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/fasta2a/__init__.py +0 -0
  51. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/fasta2a/test_applications.py +0 -0
  52. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/__init__.py +0 -0
  53. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_file_persistence.py +0 -0
  54. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_graph.py +0 -0
  55. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_mermaid.py +0 -0
  56. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_persistence.py +0 -0
  57. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_state.py +0 -0
  58. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/graph/test_utils.py +0 -0
  59. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/import_examples.py +0 -0
  60. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/json_body_serializer.py +0 -0
  61. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/mcp_server.py +0 -0
  62. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/__init__.py +0 -0
  63. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  64. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  65. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  66. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  67. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  68. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  69. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  70. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  71. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  72. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  73. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  74. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  75. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  76. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  77. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  78. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  79. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  80. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  81. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  82. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  83. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
  84. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  85. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  86. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  87. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  88. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  89. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  90. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  91. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  92. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  93. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  94. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  95. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  96. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  97. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  98. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  99. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  100. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  101. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  102. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  103. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  104. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  105. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  106. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  107. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_gemini_vertexai/test_labels.yaml +0 -0
  108. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  109. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  110. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  111. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  112. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  113. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  114. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  115. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  116. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  117. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  118. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  119. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_structured_response.yaml +0 -0
  120. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  121. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  122. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  123. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  124. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  125. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  126. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  127. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  128. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  129. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  130. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  131. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  132. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  133. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  134. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  135. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  136. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  137. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  138. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  139. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  140. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  141. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  142. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  143. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  144. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  145. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  146. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  147. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  148. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  149. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  150. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  151. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  152. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  153. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  154. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  155. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  156. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  157. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  158. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  159. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  160. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  161. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  162. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  163. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  164. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  165. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  166. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  167. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  168. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  169. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  170. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  171. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/mock_async_stream.py +0 -0
  172. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_bedrock.py +0 -0
  173. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_cohere.py +0 -0
  174. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_fallback.py +0 -0
  175. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_gemini.py +0 -0
  176. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_gemini_vertexai.py +0 -0
  177. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_google.py +0 -0
  178. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_groq.py +0 -0
  179. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_instrumented.py +0 -0
  180. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_mistral.py +0 -0
  181. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_model.py +0 -0
  182. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_model_function.py +0 -0
  183. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_model_names.py +0 -0
  184. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_model_request_parameters.py +0 -0
  185. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_model_test.py +0 -0
  186. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_openai.py +0 -0
  187. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/models/test_openai_responses.py +0 -0
  188. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/__init__.py +0 -0
  189. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  190. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  191. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  192. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_anthropic.py +0 -0
  193. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_azure.py +0 -0
  194. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_bedrock.py +0 -0
  195. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_cohere.py +0 -0
  196. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_deepseek.py +0 -0
  197. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_google_gla.py +0 -0
  198. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_google_vertex.py +0 -0
  199. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_groq.py +0 -0
  200. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_mistral.py +0 -0
  201. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_openai.py +0 -0
  202. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_openrouter.py +0 -0
  203. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/providers/test_provider_names.py +0 -0
  204. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_a2a.py +0 -0
  205. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_agent.py +0 -0
  206. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_cli.py +0 -0
  207. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_deps.py +0 -0
  208. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_direct.py +0 -0
  209. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_examples.py +0 -0
  210. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_format_as_xml.py +0 -0
  211. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_json_body_serializer.py +0 -0
  212. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_live.py +0 -0
  213. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_logfire.py +0 -0
  214. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_messages.py +0 -0
  215. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_parts_manager.py +0 -0
  216. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_settings.py +0 -0
  217. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_streaming.py +0 -0
  218. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_tools.py +0 -0
  219. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_usage_limits.py +0 -0
  220. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/test_utils.py +0 -0
  221. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/typed_agent.py +0 -0
  222. {pydantic_ai-0.2.9 → pydantic_ai-0.2.11}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.2.9
3
+ Version: 0.2.11
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.2.9
31
+ Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.2.11
32
32
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.2.9; extra == 'examples'
33
+ Requires-Dist: pydantic-ai-examples==0.2.11; 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,73 @@
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
+ - '281'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.anthropic.com
16
+ method: POST
17
+ parsed_body:
18
+ max_tokens: 1024
19
+ messages:
20
+ - content:
21
+ - text: Hello, how can I help you?
22
+ type: text
23
+ role: assistant
24
+ - content:
25
+ - text: I need a potato!
26
+ type: text
27
+ role: user
28
+ model: claude-3-5-sonnet-latest
29
+ stream: false
30
+ system: |+
31
+ You are a helpful assistant.
32
+
33
+ uri: https://api.anthropic.com/v1/messages?beta=true
34
+ response:
35
+ headers:
36
+ connection:
37
+ - keep-alive
38
+ content-length:
39
+ - '671'
40
+ content-type:
41
+ - application/json
42
+ strict-transport-security:
43
+ - max-age=31536000; includeSubDomains; preload
44
+ transfer-encoding:
45
+ - chunked
46
+ parsed_body:
47
+ content:
48
+ - text: |-
49
+ I can't physically give you a potato since I'm a computer program. However, I can:
50
+
51
+ 1. Help you find recipes that use potatoes
52
+ 2. Give you tips on how to select, store, or cook potatoes
53
+ 3. Share information about different potato varieties
54
+ 4. Provide guidance on growing potatoes
55
+
56
+ What specifically would you like to know about potatoes?
57
+ type: text
58
+ id: msg_01UjnDmX3B57Drosu49sMteT
59
+ model: claude-3-5-sonnet-20241022
60
+ role: assistant
61
+ stop_reason: end_turn
62
+ stop_sequence: null
63
+ type: message
64
+ usage:
65
+ cache_creation_input_tokens: 0
66
+ cache_read_input_tokens: 0
67
+ input_tokens: 41
68
+ output_tokens: 82
69
+ service_tier: standard
70
+ status:
71
+ code: 200
72
+ message: OK
73
+ version: 1
@@ -1035,3 +1035,31 @@ def anth_msg(usage: BetaUsage) -> BetaMessage:
1035
1035
  )
1036
1036
  def test_usage(message_callback: Callable[[], BetaMessage | BetaRawMessageStreamEvent], usage: Usage):
1037
1037
  assert _map_usage(message_callback()) == usage
1038
+
1039
+
1040
+ @pytest.mark.vcr()
1041
+ async def test_anthropic_model_empty_message_on_history(allow_model_requests: None, anthropic_api_key: str):
1042
+ """The Anthropic API will error if you send an empty message on the history.
1043
+
1044
+ Check <https://github.com/pydantic/pydantic-ai/pull/1027> for more details.
1045
+ """
1046
+ m = AnthropicModel('claude-3-5-sonnet-latest', provider=AnthropicProvider(api_key=anthropic_api_key))
1047
+ agent = Agent(m, instructions='You are a helpful assistant.')
1048
+
1049
+ result = await agent.run(
1050
+ 'I need a potato!',
1051
+ message_history=[
1052
+ ModelRequest(parts=[], instructions='You are a helpful assistant.', kind='request'),
1053
+ ModelResponse(parts=[TextPart(content='Hello, how can I help you?')], kind='response'),
1054
+ ],
1055
+ )
1056
+ assert result.output == snapshot("""\
1057
+ I can't physically give you a potato since I'm a computer program. However, I can:
1058
+
1059
+ 1. Help you find recipes that use potatoes
1060
+ 2. Give you tips on how to select, store, or cook potatoes
1061
+ 3. Share information about different potato varieties
1062
+ 4. Provide guidance on growing potatoes
1063
+
1064
+ What specifically would you like to know about potatoes?\
1065
+ """)
@@ -1,6 +1,7 @@
1
1
  """Tests for the MCP (Model Context Protocol) server implementation."""
2
2
 
3
3
  import re
4
+ from datetime import timedelta
4
5
  from pathlib import Path
5
6
 
6
7
  import pytest
@@ -70,25 +71,40 @@ async def test_stdio_server_with_cwd():
70
71
  assert len(tools) == 10
71
72
 
72
73
 
73
- def test_sse_server():
74
- sse_server = MCPServerHTTP(url='http://localhost:8000/sse')
75
- assert sse_server.url == 'http://localhost:8000/sse'
76
- assert sse_server._get_log_level() is None # pyright: ignore[reportPrivateUsage]
74
+ def test_http_server():
75
+ http_server = MCPServerHTTP(url='http://localhost:8000/sse')
76
+ assert http_server.url == 'http://localhost:8000/sse'
77
+ assert http_server._get_log_level() is None # pyright: ignore[reportPrivateUsage]
77
78
 
78
79
 
79
- def test_sse_server_with_header_and_timeout():
80
- sse_server = MCPServerHTTP(
80
+ def test_http_server_with_header_and_timeout():
81
+ http_server = MCPServerHTTP(
81
82
  url='http://localhost:8000/sse',
82
83
  headers={'my-custom-header': 'my-header-value'},
83
84
  timeout=10,
84
85
  sse_read_timeout=100,
85
86
  log_level='info',
86
87
  )
87
- assert sse_server.url == 'http://localhost:8000/sse'
88
- assert sse_server.headers is not None and sse_server.headers['my-custom-header'] == 'my-header-value'
89
- assert sse_server.timeout == 10
90
- assert sse_server.sse_read_timeout == 100
91
- assert sse_server._get_log_level() == 'info' # pyright: ignore[reportPrivateUsage]
88
+ assert http_server.url == 'http://localhost:8000/sse'
89
+ assert http_server.headers is not None and http_server.headers['my-custom-header'] == 'my-header-value'
90
+ assert http_server.timeout == 10
91
+ assert http_server.sse_read_timeout == 100
92
+ assert http_server._get_log_level() == 'info' # pyright: ignore[reportPrivateUsage]
93
+
94
+
95
+ def test_http_server_with_timedelta_arguments():
96
+ http_server = MCPServerHTTP(
97
+ url='http://localhost:8000/sse',
98
+ headers={'my-custom-header': 'my-header-value'},
99
+ timeout=timedelta(seconds=10), # type: ignore[arg-type]
100
+ sse_read_timeout=timedelta(seconds=100), # type: ignore[arg-type]
101
+ log_level='info',
102
+ )
103
+ assert http_server.url == 'http://localhost:8000/sse'
104
+ assert http_server.headers is not None and http_server.headers['my-custom-header'] == 'my-header-value'
105
+ assert http_server.timeout == 10
106
+ assert http_server.sse_read_timeout == 100
107
+ assert http_server._get_log_level() == 'info' # pyright: ignore[reportPrivateUsage]
92
108
 
93
109
 
94
110
  @pytest.mark.vcr()
File without changes
File without changes
File without changes
File without changes
File without changes