pydantic-ai 0.1.12__tar.gz → 0.2.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.
Files changed (191) hide show
  1. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/PKG-INFO +3 -3
  2. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_anthropic.py +16 -0
  3. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_gemini.py +48 -11
  4. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_instrumented.py +2 -2
  5. pydantic_ai-0.2.1/tests/models/test_model_request_parameters.py +12 -0
  6. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_parts_manager.py +3 -3
  7. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/.gitignore +0 -0
  8. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/LICENSE +0 -0
  9. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/Makefile +0 -0
  10. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/README.md +0 -0
  11. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/pyproject.toml +0 -0
  12. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/__init__.py +0 -0
  13. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/dummy.pdf +0 -0
  14. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/kiwi.png +0 -0
  15. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/marcelo.mp3 +0 -0
  16. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/small_video.mp4 +0 -0
  17. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  18. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  19. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  20. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  21. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  22. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  23. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  24. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  25. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  26. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  27. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  28. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  29. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  30. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  31. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  32. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  33. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/conftest.py +0 -0
  34. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/__init__.py +0 -0
  35. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_dataset.py +0 -0
  36. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_base.py +0 -0
  37. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_common.py +0 -0
  38. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_context.py +0 -0
  39. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_spec.py +0 -0
  40. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluators.py +0 -0
  41. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_llm_as_a_judge.py +0 -0
  42. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_otel.py +0 -0
  43. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_render_numbers.py +0 -0
  44. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_reporting.py +0 -0
  45. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_reports.py +0 -0
  46. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_utils.py +0 -0
  47. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/utils.py +0 -0
  48. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/README.md +0 -0
  49. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/bank_database.py +0 -0
  50. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/fake_database.py +0 -0
  51. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/weather_service.py +0 -0
  52. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/__init__.py +0 -0
  53. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_file_persistence.py +0 -0
  54. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_graph.py +0 -0
  55. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_mermaid.py +0 -0
  56. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_persistence.py +0 -0
  57. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_state.py +0 -0
  58. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_utils.py +0 -0
  59. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/import_examples.py +0 -0
  60. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/json_body_serializer.py +0 -0
  61. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/mcp_server.py +0 -0
  62. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/__init__.py +0 -0
  63. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  64. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  65. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  66. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  67. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  68. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  69. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  70. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  71. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  72. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  73. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  74. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  75. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  76. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  77. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  78. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  79. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  80. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  81. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  82. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  83. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
  84. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  85. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  86. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  87. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  88. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  89. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  90. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  91. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  92. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  93. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  94. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  95. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  96. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  97. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  98. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  99. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  100. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  101. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  102. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  103. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  104. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  105. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  106. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  107. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  108. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  109. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  110. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  111. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  112. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  113. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  114. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  115. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  116. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  117. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  118. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  119. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  120. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  121. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  122. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  123. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  124. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  125. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  126. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  127. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  128. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  129. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  130. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  131. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  132. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  133. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  134. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  135. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  136. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  137. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  138. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  139. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  140. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  141. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  142. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  143. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  144. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  145. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  146. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  147. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  148. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  149. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/mock_async_stream.py +0 -0
  150. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_bedrock.py +0 -0
  151. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_cohere.py +0 -0
  152. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_fallback.py +0 -0
  153. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_groq.py +0 -0
  154. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_mistral.py +0 -0
  155. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model.py +0 -0
  156. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_function.py +0 -0
  157. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_names.py +0 -0
  158. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_test.py +0 -0
  159. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_openai.py +0 -0
  160. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_openai_responses.py +0 -0
  161. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/__init__.py +0 -0
  162. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  163. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  164. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_anthropic.py +0 -0
  165. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_azure.py +0 -0
  166. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_bedrock.py +0 -0
  167. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_cohere.py +0 -0
  168. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_deepseek.py +0 -0
  169. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_google_gla.py +0 -0
  170. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_google_vertex.py +0 -0
  171. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_groq.py +0 -0
  172. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_mistral.py +0 -0
  173. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_openai.py +0 -0
  174. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_provider_names.py +0 -0
  175. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_agent.py +0 -0
  176. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_cli.py +0 -0
  177. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_deps.py +0 -0
  178. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_examples.py +0 -0
  179. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_format_as_xml.py +0 -0
  180. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_json_body_serializer.py +0 -0
  181. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_live.py +0 -0
  182. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_logfire.py +0 -0
  183. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_mcp.py +0 -0
  184. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_messages.py +0 -0
  185. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_settings.py +0 -0
  186. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_streaming.py +0 -0
  187. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_tools.py +0 -0
  188. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_usage_limits.py +0 -0
  189. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_utils.py +0 -0
  190. {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/typed_agent.py +0 -0
  191. {pydantic_ai-0.1.12 → pydantic_ai-0.2.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.1.12
3
+ Version: 0.2.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,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[anthropic,bedrock,cli,cohere,evals,groq,mcp,mistral,openai,vertexai]==0.1.12
31
+ Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,groq,mcp,mistral,openai,vertexai]==0.2.1
32
32
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.1.12; extra == 'examples'
33
+ Requires-Dist: pydantic-ai-examples==0.2.1; extra == 'examples'
34
34
  Provides-Extra: logfire
35
35
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
36
36
  Description-Content-Type: text/markdown
@@ -927,6 +927,22 @@ async def test_anthropic_model_instructions(allow_model_requests: None, anthropi
927
927
  )
928
928
 
929
929
 
930
+ async def test_multiple_system_prompt_formatting(allow_model_requests: None):
931
+ c = completion_message([TextBlock(text='world', type='text')], AnthropicUsage(input_tokens=5, output_tokens=10))
932
+ mock_client = MockAnthropic().create_mock(c)
933
+ m = AnthropicModel('claude-3-5-haiku-latest', provider=AnthropicProvider(anthropic_client=mock_client))
934
+ agent = Agent(m, system_prompt='this is the system prompt')
935
+
936
+ @agent.system_prompt
937
+ def system_prompt() -> str:
938
+ return 'and this is another'
939
+
940
+ await agent.run('hello')
941
+ completion_kwargs = get_mock_chat_completion_kwargs(mock_client)[0]
942
+ assert 'system' in completion_kwargs
943
+ assert completion_kwargs['system'] == 'this is the system prompt\n\nand this is another'
944
+
945
+
930
946
  def anth_msg(usage: AnthropicUsage) -> AnthropicMessage:
931
947
  return AnthropicMessage(
932
948
  id='x',
@@ -164,9 +164,17 @@ async def test_require_response_tool(allow_model_requests: None):
164
164
 
165
165
 
166
166
  async def test_json_def_replaced(allow_model_requests: None):
167
+ class Axis(BaseModel):
168
+ label: str
169
+
170
+ class Chart(BaseModel):
171
+ x_axis: Axis
172
+ y_axis: Axis
173
+
167
174
  class Location(BaseModel):
168
175
  lat: float
169
176
  lng: float = 1.1
177
+ chart: Chart
170
178
 
171
179
  class Locations(BaseModel):
172
180
  locations: list[Location]
@@ -175,15 +183,28 @@ async def test_json_def_replaced(allow_model_requests: None):
175
183
  assert json_schema == snapshot(
176
184
  {
177
185
  '$defs': {
186
+ 'Axis': {
187
+ 'properties': {'label': {'title': 'Label', 'type': 'string'}},
188
+ 'required': ['label'],
189
+ 'title': 'Axis',
190
+ 'type': 'object',
191
+ },
192
+ 'Chart': {
193
+ 'properties': {'x_axis': {'$ref': '#/$defs/Axis'}, 'y_axis': {'$ref': '#/$defs/Axis'}},
194
+ 'required': ['x_axis', 'y_axis'],
195
+ 'title': 'Chart',
196
+ 'type': 'object',
197
+ },
178
198
  'Location': {
179
199
  'properties': {
180
200
  'lat': {'title': 'Lat', 'type': 'number'},
181
201
  'lng': {'default': 1.1, 'title': 'Lng', 'type': 'number'},
202
+ 'chart': {'$ref': '#/$defs/Chart'},
182
203
  },
183
- 'required': ['lat'],
204
+ 'required': ['lat', 'chart'],
184
205
  'title': 'Location',
185
206
  'type': 'object',
186
- }
207
+ },
187
208
  },
188
209
  'properties': {'locations': {'items': {'$ref': '#/$defs/Location'}, 'title': 'Locations', 'type': 'array'}},
189
210
  'required': ['locations'],
@@ -201,20 +222,36 @@ async def test_json_def_replaced(allow_model_requests: None):
201
222
  mrp = ModelRequestParameters(function_tools=[], allow_text_output=True, output_tools=[output_tool])
202
223
  mrp = m.customize_request_parameters(mrp)
203
224
  assert m._get_tools(mrp) == snapshot(
204
- _GeminiTools(
205
- function_declarations=[
206
- _GeminiFunction(
207
- name='result',
208
- description='This is the tool for the final Result',
209
- parameters={
225
+ {
226
+ 'function_declarations': [
227
+ {
228
+ 'name': 'result',
229
+ 'description': 'This is the tool for the final Result',
230
+ 'parameters': {
210
231
  'properties': {
211
232
  'locations': {
212
233
  'items': {
213
234
  'properties': {
214
235
  'lat': {'type': 'number'},
215
236
  'lng': {'type': 'number'},
237
+ 'chart': {
238
+ 'properties': {
239
+ 'x_axis': {
240
+ 'properties': {'label': {'type': 'string'}},
241
+ 'required': ['label'],
242
+ 'type': 'object',
243
+ },
244
+ 'y_axis': {
245
+ 'properties': {'label': {'type': 'string'}},
246
+ 'required': ['label'],
247
+ 'type': 'object',
248
+ },
249
+ },
250
+ 'required': ['x_axis', 'y_axis'],
251
+ 'type': 'object',
252
+ },
216
253
  },
217
- 'required': ['lat'],
254
+ 'required': ['lat', 'chart'],
218
255
  'type': 'object',
219
256
  },
220
257
  'type': 'array',
@@ -223,9 +260,9 @@ async def test_json_def_replaced(allow_model_requests: None):
223
260
  'required': ['locations'],
224
261
  'type': 'object',
225
262
  },
226
- )
263
+ }
227
264
  ]
228
- )
265
+ }
229
266
  )
230
267
 
231
268
 
@@ -36,7 +36,7 @@ from pydantic_ai.models.instrumented import InstrumentationSettings, Instrumente
36
36
  from pydantic_ai.settings import ModelSettings
37
37
  from pydantic_ai.usage import Usage
38
38
 
39
- from ..conftest import try_import
39
+ from ..conftest import IsStr, try_import
40
40
 
41
41
  with try_import() as imports_successful:
42
42
  from logfire.testing import CaptureLogfire
@@ -796,7 +796,7 @@ def test_messages_to_otel_events_image_url(document_content: BinaryContent):
796
796
  'event.name': 'gen_ai.user.message',
797
797
  },
798
798
  {
799
- 'content': ['user_prompt6', {'kind': 'binary'}],
799
+ 'content': ['user_prompt6', {'kind': 'binary', 'content': IsStr(), 'media_type': 'application/pdf'}],
800
800
  'role': 'user',
801
801
  'gen_ai.message.index': 5,
802
802
  'event.name': 'gen_ai.user.message',
@@ -0,0 +1,12 @@
1
+ from pydantic import TypeAdapter
2
+
3
+ from pydantic_ai.models import ModelRequestParameters
4
+
5
+
6
+ def test_model_request_parameters_are_serializable():
7
+ params = ModelRequestParameters(function_tools=[], allow_text_output=False, output_tools=[])
8
+ assert TypeAdapter(ModelRequestParameters).dump_python(params) == {
9
+ 'function_tools': [],
10
+ 'allow_text_output': False,
11
+ 'output_tools': [],
12
+ }
@@ -104,7 +104,7 @@ def test_handle_tool_call_deltas():
104
104
  PartDeltaEvent(
105
105
  index=0,
106
106
  delta=ToolCallPartDelta(
107
- tool_name_delta='1', args_delta=None, tool_call_id=None, part_delta_kind='tool_call'
107
+ tool_name_delta='1', args_delta=None, tool_call_id=IsStr(), part_delta_kind='tool_call'
108
108
  ),
109
109
  event_kind='part_delta',
110
110
  )
@@ -118,7 +118,7 @@ def test_handle_tool_call_deltas():
118
118
  PartDeltaEvent(
119
119
  index=0,
120
120
  delta=ToolCallPartDelta(
121
- tool_name_delta=None, args_delta='"value1"}', tool_call_id=None, part_delta_kind='tool_call'
121
+ tool_name_delta=None, args_delta='"value1"}', tool_call_id=IsStr(), part_delta_kind='tool_call'
122
122
  ),
123
123
  event_kind='part_delta',
124
124
  )
@@ -196,7 +196,7 @@ def test_handle_tool_call_part():
196
196
  PartDeltaEvent(
197
197
  index=0,
198
198
  delta=ToolCallPartDelta(
199
- tool_name_delta=None, args_delta='"value1"}', tool_call_id=None, part_delta_kind='tool_call'
199
+ tool_name_delta=None, args_delta='"value1"}', tool_call_id=IsStr(), part_delta_kind='tool_call'
200
200
  ),
201
201
  event_kind='part_delta',
202
202
  )
File without changes
File without changes
File without changes
File without changes
File without changes