pydantic-ai 1.0.0b1__tar.gz → 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pydantic-ai might be problematic. Click here for more details.

Files changed (411) hide show
  1. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/Makefile +1 -14
  2. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/PKG-INFO +51 -44
  3. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/README.md +47 -40
  4. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/pyproject.toml +5 -9
  5. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_dataset.py +11 -2
  6. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_evaluator_common.py +0 -64
  7. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_evaluators.py +40 -32
  8. pydantic_ai-1.0.1/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +133 -0
  9. pydantic_ai-1.0.1/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +73 -0
  10. pydantic_ai-1.0.1/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +67 -0
  11. pydantic_ai-1.0.1/tests/models/cassettes/test_groq/test_groq_native_output.yaml +89 -0
  12. pydantic_ai-1.0.1/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +81 -0
  13. pydantic_ai-1.0.1/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +98 -0
  14. pydantic_ai-1.0.1/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +322 -0
  15. pydantic_ai-1.0.1/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +527 -0
  16. pydantic_ai-1.0.1/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +1991 -0
  17. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_anthropic.py +6 -6
  18. pydantic_ai-1.0.1/tests/models/test_bedrock.py +894 -0
  19. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_cohere.py +1 -0
  20. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_gemini.py +9 -3
  21. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_google.py +61 -1
  22. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_groq.py +302 -0
  23. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_instrumented.py +59 -53
  24. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_openai.py +34 -107
  25. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_openai_responses.py +106 -1
  26. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_groq.py +32 -0
  27. pydantic_ai-1.0.1/tests/providers/test_litellm.py +160 -0
  28. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_provider_names.py +2 -0
  29. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_ag_ui.py +20 -10
  30. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_agent.py +79 -4
  31. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_examples.py +5 -1
  32. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_live.py +18 -11
  33. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_mcp.py +13 -0
  34. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_messages.py +78 -1
  35. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_streaming.py +2 -0
  36. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_temporal.py +85 -24
  37. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_tenacity.py +59 -2
  38. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_toolsets.py +23 -0
  39. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_usage_limits.py +70 -3
  40. pydantic_ai-1.0.0b1/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -2053
  41. pydantic_ai-1.0.0b1/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -1413
  42. pydantic_ai-1.0.0b1/tests/models/test_bedrock.py +0 -1523
  43. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/.gitignore +0 -0
  44. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/LICENSE +0 -0
  45. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/__init__.py +0 -0
  46. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/assets/dummy.pdf +0 -0
  47. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/assets/kiwi.png +0 -0
  48. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/assets/marcelo.mp3 +0 -0
  49. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/assets/product_name.txt +0 -0
  50. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/assets/small_video.mp4 +0 -0
  51. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  52. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  53. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  54. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  55. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  56. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  57. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  58. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  59. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  60. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  61. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  62. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  63. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  64. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  65. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  66. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  67. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  68. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  69. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  70. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  71. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  72. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  73. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
  74. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
  75. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  76. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
  77. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
  78. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
  79. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
  80. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
  81. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
  82. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
  83. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
  84. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
  85. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
  86. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
  87. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
  88. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
  89. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
  90. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/conftest.py +0 -0
  91. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/__init__.py +0 -0
  92. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_evaluator_base.py +0 -0
  93. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_evaluator_context.py +0 -0
  94. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_evaluator_spec.py +0 -0
  95. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_llm_as_a_judge.py +0 -0
  96. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_otel.py +0 -0
  97. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_render_numbers.py +0 -0
  98. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_reporting.py +0 -0
  99. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_reports.py +0 -0
  100. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/test_utils.py +0 -0
  101. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/evals/utils.py +0 -0
  102. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/example_modules/README.md +0 -0
  103. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/example_modules/bank_database.py +0 -0
  104. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/example_modules/fake_database.py +0 -0
  105. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/example_modules/mcp_server.py +0 -0
  106. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/example_modules/weather_service.py +0 -0
  107. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/ext/__init__.py +0 -0
  108. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/ext/test_langchain.py +0 -0
  109. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/__init__.py +0 -0
  110. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_file_persistence.py +0 -0
  111. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_graph.py +0 -0
  112. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_mermaid.py +0 -0
  113. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_persistence.py +0 -0
  114. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_state.py +0 -0
  115. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/graph/test_utils.py +0 -0
  116. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/import_examples.py +0 -0
  117. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/json_body_serializer.py +0 -0
  118. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/mcp_server.py +0 -0
  119. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/__init__.py +0 -0
  120. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
  121. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  122. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  123. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  124. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  125. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  126. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  127. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
  128. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
  129. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  130. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  131. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  132. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
  133. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
  134. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  135. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  136. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  137. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  138. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  139. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  140. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  141. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  142. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
  143. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  144. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  145. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  146. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  147. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  148. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  149. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  150. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  151. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  152. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  153. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  154. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  155. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
  156. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  157. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  158. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  159. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  160. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  161. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  162. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  163. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  164. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  165. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  166. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  167. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  168. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  169. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  170. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  171. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  172. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  173. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  174. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  175. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  176. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  177. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  178. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  179. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  180. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  181. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  182. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  183. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  184. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  185. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  186. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  187. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  188. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  189. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  190. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  191. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  192. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  193. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  194. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  195. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  196. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  197. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  198. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  199. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  200. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  201. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  202. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  203. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  204. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  205. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  206. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  207. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
  208. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  209. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  210. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  211. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  212. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  213. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  214. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  215. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  216. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  217. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
  218. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  219. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  220. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
  221. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  222. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  223. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  224. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  225. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  226. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  227. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  228. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  229. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
  230. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
  231. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
  232. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  233. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  234. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  235. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  236. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  237. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
  238. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  239. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  240. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  241. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  242. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  243. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  244. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  245. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  246. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  247. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  248. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  249. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  250. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  251. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  252. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  253. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  254. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  255. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  256. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  257. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  258. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
  259. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  260. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  261. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  262. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  263. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
  264. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  265. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  266. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  267. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  268. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  269. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  270. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  271. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  272. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  273. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  274. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  275. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  276. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  277. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  278. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  279. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  280. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  281. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  282. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  283. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  284. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  285. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  286. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
  287. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  288. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  289. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  290. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  291. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  292. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  293. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  294. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  295. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  296. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  297. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  298. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  299. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  300. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
  301. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
  302. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
  303. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
  304. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  305. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  306. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  307. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  308. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  309. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  310. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  311. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  312. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  313. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  314. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
  315. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
  316. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
  317. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  318. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
  319. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  320. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  321. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  322. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  323. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  324. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  325. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  326. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  327. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml +0 -0
  328. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml +0 -0
  329. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  330. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  331. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  332. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  333. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  334. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  335. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  336. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  337. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  338. {pydantic_ai-1.0.0b1/tests/models/cassettes/test_openai → pydantic_ai-1.0.1/tests/models/cassettes/test_openai_responses}/test_openai_responses_model_thinking_part.yaml +0 -0
  339. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
  340. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
  341. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
  342. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
  343. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  344. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  345. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  346. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  347. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  348. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  349. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
  350. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  351. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  352. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  353. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  354. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  355. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/mock_async_stream.py +0 -0
  356. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/mock_openai.py +0 -0
  357. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_deepseek.py +0 -0
  358. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_download_item.py +0 -0
  359. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_fallback.py +0 -0
  360. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_gemini_vertex.py +0 -0
  361. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_huggingface.py +0 -0
  362. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_mcp_sampling.py +0 -0
  363. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_mistral.py +0 -0
  364. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model.py +0 -0
  365. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model_function.py +0 -0
  366. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model_names.py +0 -0
  367. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model_request_parameters.py +0 -0
  368. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model_settings.py +0 -0
  369. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/models/test_model_test.py +0 -0
  370. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/parts_from_messages.py +0 -0
  371. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/__init__.py +0 -0
  372. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  373. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  374. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  375. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  376. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_anthropic.py +0 -0
  377. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_azure.py +0 -0
  378. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_bedrock.py +0 -0
  379. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_cerebras.py +0 -0
  380. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_cohere.py +0 -0
  381. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_deepseek.py +0 -0
  382. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_fireworks.py +0 -0
  383. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_github.py +0 -0
  384. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_google_gla.py +0 -0
  385. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_google_vertex.py +0 -0
  386. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_grok.py +0 -0
  387. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_heroku.py +0 -0
  388. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_huggingface.py +0 -0
  389. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_mistral.py +0 -0
  390. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_moonshotai.py +0 -0
  391. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_ollama.py +0 -0
  392. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_openai.py +0 -0
  393. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_openrouter.py +0 -0
  394. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_together.py +0 -0
  395. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/providers/test_vercel.py +0 -0
  396. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_a2a.py +0 -0
  397. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_builtin_tools.py +0 -0
  398. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_cli.py +0 -0
  399. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_deps.py +0 -0
  400. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_direct.py +0 -0
  401. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_format_as_xml.py +0 -0
  402. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_history_processor.py +0 -0
  403. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_json_body_serializer.py +0 -0
  404. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_logfire.py +0 -0
  405. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_parts_manager.py +0 -0
  406. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_settings.py +0 -0
  407. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_thinking_part.py +0 -0
  408. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_tools.py +0 -0
  409. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/test_utils.py +0 -0
  410. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/typed_agent.py +0 -0
  411. {pydantic_ai-1.0.0b1 → pydantic_ai-1.0.1}/tests/typed_graph.py +0 -0
@@ -8,12 +8,8 @@
8
8
  .pre-commit: ## Check that pre-commit is installed
9
9
  @pre-commit -V || echo 'Please install pre-commit: https://pre-commit.com/'
10
10
 
11
- .PHONY: .deno
12
- .deno: ## Check that deno is installed
13
- @deno --version > /dev/null 2>&1 || (printf "\033[0;31m✖ Error: deno is not installed, but is needed for mcp-run-python\033[0m\n Please install deno: https://docs.deno.com/runtime/getting_started/installation/\n" && exit 1)
14
-
15
11
  .PHONY: install
16
- install: .uv .pre-commit .deno ## Install the package, dependencies, and pre-commit for local development
12
+ install: .uv .pre-commit ## Install the package, dependencies, and pre-commit for local development
17
13
  uv sync --frozen --all-extras --all-packages --group lint --group docs
18
14
  pre-commit install --install-hooks
19
15
 
@@ -38,10 +34,6 @@ lint: ## Lint the code
38
34
  uv run ruff format --check
39
35
  uv run ruff check
40
36
 
41
- .PHONY: lint-js
42
- lint-js: ## Lint JS and TS code
43
- cd mcp-run-python && deno task lint-format
44
-
45
37
  .PHONY: typecheck-pyright
46
38
  typecheck-pyright:
47
39
  @# PYRIGHT_PYTHON_IGNORE_WARNINGS avoids the overhead of making a request to github on every invocation
@@ -77,11 +69,6 @@ testcov: test ## Run tests and generate an HTML coverage report
77
69
  @echo "building coverage html"
78
70
  @uv run coverage html
79
71
 
80
- .PHONY: test-mrp
81
- test-mrp: ## Build and tests of mcp-run-python
82
- cd mcp-run-python && deno task build
83
- uv run --package mcp-run-python pytest mcp-run-python -v
84
-
85
72
  .PHONY: update-examples
86
73
  update-examples: ## Update documentation examples
87
74
  uv run -m pytest --update-examples tests/test_examples.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 1.0.0b1
3
+ Version: 1.0.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
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/pydantic/pydantic-ai/releases
9
9
  Author-email: Samuel Colvin <samuel@pydantic.dev>, Marcelo Trylesinski <marcelotryle@gmail.com>, David Montague <david@pydantic.dev>, Alex Hall <alex@pydantic.dev>, Douwe Maan <douwe@pydantic.dev>
10
10
  License-Expression: MIT
11
11
  License-File: LICENSE
12
- Classifier: Development Status :: 4 - Beta
12
+ Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Framework :: Pydantic
14
14
  Classifier: Framework :: Pydantic :: 2
15
15
  Classifier: Intended Audience :: Developers
@@ -27,11 +27,11 @@ Classifier: Topic :: Internet
27
27
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
28
28
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
29
  Requires-Python: >=3.10
30
- Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.0.0b1
30
+ Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.0.1
31
31
  Provides-Extra: a2a
32
32
  Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
33
33
  Provides-Extra: examples
34
- Requires-Dist: pydantic-ai-examples==1.0.0b1; extra == 'examples'
34
+ Requires-Dist: pydantic-ai-examples==1.0.1; extra == 'examples'
35
35
  Description-Content-Type: text/markdown
36
36
 
37
37
  <div align="center">
@@ -43,7 +43,7 @@ Description-Content-Type: text/markdown
43
43
  </a>
44
44
  </div>
45
45
  <div align="center">
46
- <em>Agent Framework / shim to use Pydantic with LLMs</em>
46
+ <h3>GenAI Agent Framework, the Pydantic way</h3>
47
47
  </div>
48
48
  <div align="center">
49
49
  <a href="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain"><img src="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml/badge.svg?event=push" alt="CI"></a>
@@ -60,43 +60,48 @@ Description-Content-Type: text/markdown
60
60
 
61
61
  ---
62
62
 
63
- Pydantic AI is a Python agent framework designed to make it less painful to build production grade applications with Generative AI.
63
+ ### <em>Pydantic AI is a Python agent framework designed to help you quickly, confidently, and painlessly build production grade applications and workflows with Generative AI.</em>
64
64
 
65
- FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev).
66
65
 
67
- Similarly, virtually every agent framework and LLM library in Python uses Pydantic Validation, yet when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
66
+ FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev) and modern Python features like type hints.
68
67
 
69
- We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app development.
68
+ Yet despite virtually every Python agent framework and LLM library using Pydantic Validation, when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
69
+
70
+ We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app and agent development.
70
71
 
71
72
  ## Why use Pydantic AI
72
73
 
73
- - **Built by the Pydantic Team**
74
- Built by the team behind [Pydantic Validation](https://docs.pydantic.dev/latest/) (the validation layer of the OpenAI SDK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more).
74
+ 1. **Built by the Pydantic Team**:
75
+ [Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
76
+
77
+ 2. **Model-agnostic**:
78
+ Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
79
+
80
+ 3. **Seamless Observability**:
81
+ Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
75
82
 
76
- - **Model-agnostic**
77
- Supports OpenAI, Anthropic, Gemini, Deepseek, Ollama, Groq, Cohere, and Mistral, and there is a simple interface to implement support for [other models](https://ai.pydantic.dev/models/).
83
+ 4. **Fully Type-safe**:
84
+ Designed to give your IDE or AI coding agent as much context as possible for auto-completion and [type checking](https://ai.pydantic.dev/agents#static-type-checking), moving entire classes of errors from runtime to write-time for a bit of that Rust "if it compiles, it works" feel.
78
85
 
79
- - **Pydantic Logfire Integration**
80
- Seamlessly [integrates](https://ai.pydantic.dev/logfire/) with [Pydantic Logfire](https://pydantic.dev/logfire) for real-time debugging, performance monitoring, and behavior tracking of your LLM-powered applications.
86
+ 5. **Powerful Evals**:
87
+ Enables you to systematically test and [evaluate](https://ai.pydantic.dev/evals) the performance and accuracy of the agentic systems you build, and monitor the performance over time in Pydantic Logfire.
81
88
 
82
- - **Type-safe**
83
- Designed to make [type checking](https://ai.pydantic.dev/agents/#static-type-checking) as powerful and informative as possible for you.
89
+ 6. **MCP, A2A, and AG-UI**:
90
+ Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Agent2Agent](https://ai.pydantic.dev/a2a), and [AG-UI](https://ai.pydantic.dev/ag-ui) standards to give your agent access to external tools and data, let it interoperate with other agents, and build interactive applications with streaming event-based communication.
84
91
 
85
- - **Python-centric Design**
86
- Leverages Python's familiar control flow and agent composition to build your AI-driven projects, making it easy to apply standard Python best practices you'd use in any other (non-AI) project.
92
+ 7. **Human-in-the-Loop Tool Approval**:
93
+ Easily lets you flag that certain tool calls [require approval](https://ai.pydantic.dev/deferred-tools#human-in-the-loop-tool-approval) before they can proceed, possibly depending on tool call arguments, conversation history, or user preferences.
87
94
 
88
- - **Structured Responses**
89
- Harnesses the power of [Pydantic Validation](https://docs.pydantic.dev/latest/) to [validate and structure](https://ai.pydantic.dev/output/#structured-output) model outputs, ensuring responses are consistent across runs.
95
+ 8. **Durable Execution**:
96
+ Enables you to build [durable agents](https://ai.pydantic.dev/temporal) that can preserve their progress across transient API failures and application errors or restarts, and handle long-running, asynchronous, and human-in-the-loop workflows with production-grade reliability.
90
97
 
91
- - **Dependency Injection System**
92
- Offers an optional [dependency injection](https://ai.pydantic.dev/dependencies/) system to provide data and services to your agent's [system prompts](https://ai.pydantic.dev/agents/#system-prompts), [tools](https://ai.pydantic.dev/tools/) and [output validators](https://ai.pydantic.dev/output/#output-validator-functions).
93
- This is useful for testing and eval-driven iterative development.
98
+ 9. **Streamed Outputs**:
99
+ Provides the ability to [stream](https://ai.pydantic.dev/output#streamed-results) structured output continuously, with immediate validation, ensuring real time access to generated data.
94
100
 
95
- - **Streamed Responses**
96
- Provides the ability to [stream](https://ai.pydantic.dev/output/#streamed-results) LLM outputs continuously, with immediate validation, ensuring rapid and accurate outputs.
101
+ 10. **Graph Support**:
102
+ Provides a powerful way to define [graphs](https://ai.pydantic.dev/graph) using type hints, for use in complex applications where standard control flow can degrade to spaghetti code.
97
103
 
98
- - **Graph Support**
99
- [Pydantic Graph](https://ai.pydantic.dev/graph) provides a powerful way to define graphs using typing hints, this is useful in complex applications where standard control flow can degrade to spaghetti code.
104
+ Realistically though, no list is going to be as convincing as [giving it a try](#next-steps) and seeing how it makes you feel!
100
105
 
101
106
  ## Hello World Example
102
107
 
@@ -107,15 +112,13 @@ from pydantic_ai import Agent
107
112
 
108
113
  # Define a very simple agent including the model to use, you can also set the model when running the agent.
109
114
  agent = Agent(
110
- 'google-gla:gemini-1.5-flash',
111
- # Register a static system prompt using a keyword argument to the agent.
112
- # For more complex dynamically-generated system prompts, see the example below.
113
- system_prompt='Be concise, reply with one sentence.',
115
+ 'anthropic:claude-sonnet-4-0',
116
+ # Register static instructions using a keyword argument to the agent.
117
+ # For more complex dynamically-generated instructions, see the example below.
118
+ instructions='Be concise, reply with one sentence.',
114
119
  )
115
120
 
116
121
  # Run the agent synchronously, conducting a conversation with the LLM.
117
- # Here the exchange should be very short: Pydantic AI will send the system prompt and the user query to the LLM,
118
- # the model will return a text response. See below for a more complex run.
119
122
  result = agent.run_sync('Where does "hello world" come from?')
120
123
  print(result.output)
121
124
  """
@@ -123,9 +126,11 @@ The first known use of "hello, world" was in a 1974 textbook about the C program
123
126
  """
124
127
  ```
125
128
 
126
- _(This example is complete, it can be run "as is")_
129
+ _(This example is complete, it can be run "as is", assuming you've [installed the `pydantic_ai` package](https://ai.pydantic.dev/install))_
127
130
 
128
- Not very interesting yet, but we can easily add "tools", dynamic system prompts, and structured responses to build more powerful agents.
131
+ The exchange will be very short: Pydantic AI will send the instructions and the user prompt to the LLM, and the model will return a text response.
132
+
133
+ Not very interesting yet, but we can easily add [tools](https://ai.pydantic.dev/tools), [dynamic instructions](https://ai.pydantic.dev/agents#instructions), and [structured outputs](https://ai.pydantic.dev/output) to build more powerful agents.
129
134
 
130
135
  ## Tools & Dependency Injection Example
131
136
 
@@ -143,14 +148,14 @@ from bank_database import DatabaseConn
143
148
 
144
149
 
145
150
  # SupportDependencies is used to pass data, connections, and logic into the model that will be needed when running
146
- # system prompt and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
151
+ # instructions and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
147
152
  @dataclass
148
153
  class SupportDependencies:
149
154
  customer_id: int
150
155
  db: DatabaseConn
151
156
 
152
157
 
153
- # This pydantic model defines the structure of the output returned by the agent.
158
+ # This Pydantic model defines the structure of the output returned by the agent.
154
159
  class SupportOutput(BaseModel):
155
160
  support_advice: str = Field(description='Advice returned to the customer')
156
161
  block_card: bool = Field(description="Whether to block the customer's card")
@@ -161,28 +166,28 @@ class SupportOutput(BaseModel):
161
166
  # Agents are generic in the type of dependencies they accept and the type of output they return.
162
167
  # In this case, the support agent has type `Agent[SupportDependencies, SupportOutput]`.
163
168
  support_agent = Agent(
164
- 'openai:gpt-4o',
169
+ 'openai:gpt-5',
165
170
  deps_type=SupportDependencies,
166
171
  # The response from the agent will, be guaranteed to be a SupportOutput,
167
172
  # if validation fails the agent is prompted to try again.
168
173
  output_type=SupportOutput,
169
- system_prompt=(
174
+ instructions=(
170
175
  'You are a support agent in our bank, give the '
171
176
  'customer support and judge the risk level of their query.'
172
177
  ),
173
178
  )
174
179
 
175
180
 
176
- # Dynamic system prompts can make use of dependency injection.
181
+ # Dynamic instructions can make use of dependency injection.
177
182
  # Dependencies are carried via the `RunContext` argument, which is parameterized with the `deps_type` from above.
178
183
  # If the type annotation here is wrong, static type checkers will catch it.
179
- @support_agent.system_prompt
184
+ @support_agent.instructions
180
185
  async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
181
186
  customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
182
187
  return f"The customer's name is {customer_name!r}"
183
188
 
184
189
 
185
- # `tool` let you register functions which the LLM may call while responding to a user.
190
+ # The `tool` decorator let you register functions which the LLM may call while responding to a user.
186
191
  # Again, dependencies are carried via `RunContext`, any other arguments become the tool schema passed to the LLM.
187
192
  # Pydantic is used to validate these arguments, and errors are passed back to the LLM so it can retry.
188
193
  @support_agent.tool
@@ -223,8 +228,10 @@ async def main():
223
228
 
224
229
  ## Next Steps
225
230
 
226
- To try Pydantic AI yourself, follow the instructions [in the examples](https://ai.pydantic.dev/examples/).
231
+ To try Pydantic AI for yourself, [install it](https://ai.pydantic.dev/install) and follow the instructions [in the examples](https://ai.pydantic.dev/examples/setup).
227
232
 
228
233
  Read the [docs](https://ai.pydantic.dev/agents/) to learn more about building applications with Pydantic AI.
229
234
 
230
235
  Read the [API Reference](https://ai.pydantic.dev/api/agent/) to understand Pydantic AI's interface.
236
+
237
+ Join [Slack](https://logfire.pydantic.dev/docs/join-slack/) or file an issue on [GitHub](https://github.com/pydantic/pydantic-ai/issues) if you have any questions.
@@ -7,7 +7,7 @@
7
7
  </a>
8
8
  </div>
9
9
  <div align="center">
10
- <em>Agent Framework / shim to use Pydantic with LLMs</em>
10
+ <h3>GenAI Agent Framework, the Pydantic way</h3>
11
11
  </div>
12
12
  <div align="center">
13
13
  <a href="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain"><img src="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml/badge.svg?event=push" alt="CI"></a>
@@ -24,43 +24,48 @@
24
24
 
25
25
  ---
26
26
 
27
- Pydantic AI is a Python agent framework designed to make it less painful to build production grade applications with Generative AI.
27
+ ### <em>Pydantic AI is a Python agent framework designed to help you quickly, confidently, and painlessly build production grade applications and workflows with Generative AI.</em>
28
28
 
29
- FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev).
30
29
 
31
- Similarly, virtually every agent framework and LLM library in Python uses Pydantic Validation, yet when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
30
+ FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev) and modern Python features like type hints.
32
31
 
33
- We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app development.
32
+ Yet despite virtually every Python agent framework and LLM library using Pydantic Validation, when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
33
+
34
+ We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app and agent development.
34
35
 
35
36
  ## Why use Pydantic AI
36
37
 
37
- - **Built by the Pydantic Team**
38
- Built by the team behind [Pydantic Validation](https://docs.pydantic.dev/latest/) (the validation layer of the OpenAI SDK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more).
38
+ 1. **Built by the Pydantic Team**:
39
+ [Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
40
+
41
+ 2. **Model-agnostic**:
42
+ Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
43
+
44
+ 3. **Seamless Observability**:
45
+ Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
39
46
 
40
- - **Model-agnostic**
41
- Supports OpenAI, Anthropic, Gemini, Deepseek, Ollama, Groq, Cohere, and Mistral, and there is a simple interface to implement support for [other models](https://ai.pydantic.dev/models/).
47
+ 4. **Fully Type-safe**:
48
+ Designed to give your IDE or AI coding agent as much context as possible for auto-completion and [type checking](https://ai.pydantic.dev/agents#static-type-checking), moving entire classes of errors from runtime to write-time for a bit of that Rust "if it compiles, it works" feel.
42
49
 
43
- - **Pydantic Logfire Integration**
44
- Seamlessly [integrates](https://ai.pydantic.dev/logfire/) with [Pydantic Logfire](https://pydantic.dev/logfire) for real-time debugging, performance monitoring, and behavior tracking of your LLM-powered applications.
50
+ 5. **Powerful Evals**:
51
+ Enables you to systematically test and [evaluate](https://ai.pydantic.dev/evals) the performance and accuracy of the agentic systems you build, and monitor the performance over time in Pydantic Logfire.
45
52
 
46
- - **Type-safe**
47
- Designed to make [type checking](https://ai.pydantic.dev/agents/#static-type-checking) as powerful and informative as possible for you.
53
+ 6. **MCP, A2A, and AG-UI**:
54
+ Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Agent2Agent](https://ai.pydantic.dev/a2a), and [AG-UI](https://ai.pydantic.dev/ag-ui) standards to give your agent access to external tools and data, let it interoperate with other agents, and build interactive applications with streaming event-based communication.
48
55
 
49
- - **Python-centric Design**
50
- Leverages Python's familiar control flow and agent composition to build your AI-driven projects, making it easy to apply standard Python best practices you'd use in any other (non-AI) project.
56
+ 7. **Human-in-the-Loop Tool Approval**:
57
+ Easily lets you flag that certain tool calls [require approval](https://ai.pydantic.dev/deferred-tools#human-in-the-loop-tool-approval) before they can proceed, possibly depending on tool call arguments, conversation history, or user preferences.
51
58
 
52
- - **Structured Responses**
53
- Harnesses the power of [Pydantic Validation](https://docs.pydantic.dev/latest/) to [validate and structure](https://ai.pydantic.dev/output/#structured-output) model outputs, ensuring responses are consistent across runs.
59
+ 8. **Durable Execution**:
60
+ Enables you to build [durable agents](https://ai.pydantic.dev/temporal) that can preserve their progress across transient API failures and application errors or restarts, and handle long-running, asynchronous, and human-in-the-loop workflows with production-grade reliability.
54
61
 
55
- - **Dependency Injection System**
56
- Offers an optional [dependency injection](https://ai.pydantic.dev/dependencies/) system to provide data and services to your agent's [system prompts](https://ai.pydantic.dev/agents/#system-prompts), [tools](https://ai.pydantic.dev/tools/) and [output validators](https://ai.pydantic.dev/output/#output-validator-functions).
57
- This is useful for testing and eval-driven iterative development.
62
+ 9. **Streamed Outputs**:
63
+ Provides the ability to [stream](https://ai.pydantic.dev/output#streamed-results) structured output continuously, with immediate validation, ensuring real time access to generated data.
58
64
 
59
- - **Streamed Responses**
60
- Provides the ability to [stream](https://ai.pydantic.dev/output/#streamed-results) LLM outputs continuously, with immediate validation, ensuring rapid and accurate outputs.
65
+ 10. **Graph Support**:
66
+ Provides a powerful way to define [graphs](https://ai.pydantic.dev/graph) using type hints, for use in complex applications where standard control flow can degrade to spaghetti code.
61
67
 
62
- - **Graph Support**
63
- [Pydantic Graph](https://ai.pydantic.dev/graph) provides a powerful way to define graphs using typing hints, this is useful in complex applications where standard control flow can degrade to spaghetti code.
68
+ Realistically though, no list is going to be as convincing as [giving it a try](#next-steps) and seeing how it makes you feel!
64
69
 
65
70
  ## Hello World Example
66
71
 
@@ -71,15 +76,13 @@ from pydantic_ai import Agent
71
76
 
72
77
  # Define a very simple agent including the model to use, you can also set the model when running the agent.
73
78
  agent = Agent(
74
- 'google-gla:gemini-1.5-flash',
75
- # Register a static system prompt using a keyword argument to the agent.
76
- # For more complex dynamically-generated system prompts, see the example below.
77
- system_prompt='Be concise, reply with one sentence.',
79
+ 'anthropic:claude-sonnet-4-0',
80
+ # Register static instructions using a keyword argument to the agent.
81
+ # For more complex dynamically-generated instructions, see the example below.
82
+ instructions='Be concise, reply with one sentence.',
78
83
  )
79
84
 
80
85
  # Run the agent synchronously, conducting a conversation with the LLM.
81
- # Here the exchange should be very short: Pydantic AI will send the system prompt and the user query to the LLM,
82
- # the model will return a text response. See below for a more complex run.
83
86
  result = agent.run_sync('Where does "hello world" come from?')
84
87
  print(result.output)
85
88
  """
@@ -87,9 +90,11 @@ The first known use of "hello, world" was in a 1974 textbook about the C program
87
90
  """
88
91
  ```
89
92
 
90
- _(This example is complete, it can be run "as is")_
93
+ _(This example is complete, it can be run "as is", assuming you've [installed the `pydantic_ai` package](https://ai.pydantic.dev/install))_
91
94
 
92
- Not very interesting yet, but we can easily add "tools", dynamic system prompts, and structured responses to build more powerful agents.
95
+ The exchange will be very short: Pydantic AI will send the instructions and the user prompt to the LLM, and the model will return a text response.
96
+
97
+ Not very interesting yet, but we can easily add [tools](https://ai.pydantic.dev/tools), [dynamic instructions](https://ai.pydantic.dev/agents#instructions), and [structured outputs](https://ai.pydantic.dev/output) to build more powerful agents.
93
98
 
94
99
  ## Tools & Dependency Injection Example
95
100
 
@@ -107,14 +112,14 @@ from bank_database import DatabaseConn
107
112
 
108
113
 
109
114
  # SupportDependencies is used to pass data, connections, and logic into the model that will be needed when running
110
- # system prompt and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
115
+ # instructions and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
111
116
  @dataclass
112
117
  class SupportDependencies:
113
118
  customer_id: int
114
119
  db: DatabaseConn
115
120
 
116
121
 
117
- # This pydantic model defines the structure of the output returned by the agent.
122
+ # This Pydantic model defines the structure of the output returned by the agent.
118
123
  class SupportOutput(BaseModel):
119
124
  support_advice: str = Field(description='Advice returned to the customer')
120
125
  block_card: bool = Field(description="Whether to block the customer's card")
@@ -125,28 +130,28 @@ class SupportOutput(BaseModel):
125
130
  # Agents are generic in the type of dependencies they accept and the type of output they return.
126
131
  # In this case, the support agent has type `Agent[SupportDependencies, SupportOutput]`.
127
132
  support_agent = Agent(
128
- 'openai:gpt-4o',
133
+ 'openai:gpt-5',
129
134
  deps_type=SupportDependencies,
130
135
  # The response from the agent will, be guaranteed to be a SupportOutput,
131
136
  # if validation fails the agent is prompted to try again.
132
137
  output_type=SupportOutput,
133
- system_prompt=(
138
+ instructions=(
134
139
  'You are a support agent in our bank, give the '
135
140
  'customer support and judge the risk level of their query.'
136
141
  ),
137
142
  )
138
143
 
139
144
 
140
- # Dynamic system prompts can make use of dependency injection.
145
+ # Dynamic instructions can make use of dependency injection.
141
146
  # Dependencies are carried via the `RunContext` argument, which is parameterized with the `deps_type` from above.
142
147
  # If the type annotation here is wrong, static type checkers will catch it.
143
- @support_agent.system_prompt
148
+ @support_agent.instructions
144
149
  async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
145
150
  customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
146
151
  return f"The customer's name is {customer_name!r}"
147
152
 
148
153
 
149
- # `tool` let you register functions which the LLM may call while responding to a user.
154
+ # The `tool` decorator let you register functions which the LLM may call while responding to a user.
150
155
  # Again, dependencies are carried via `RunContext`, any other arguments become the tool schema passed to the LLM.
151
156
  # Pydantic is used to validate these arguments, and errors are passed back to the LLM so it can retry.
152
157
  @support_agent.tool
@@ -187,8 +192,10 @@ async def main():
187
192
 
188
193
  ## Next Steps
189
194
 
190
- To try Pydantic AI yourself, follow the instructions [in the examples](https://ai.pydantic.dev/examples/).
195
+ To try Pydantic AI for yourself, [install it](https://ai.pydantic.dev/install) and follow the instructions [in the examples](https://ai.pydantic.dev/examples/setup).
191
196
 
192
197
  Read the [docs](https://ai.pydantic.dev/agents/) to learn more about building applications with Pydantic AI.
193
198
 
194
199
  Read the [API Reference](https://ai.pydantic.dev/api/agent/) to understand Pydantic AI's interface.
200
+
201
+ Join [Slack](https://logfire.pydantic.dev/docs/join-slack/) or file an issue on [GitHub](https://github.com/pydantic/pydantic-ai/issues) if you have any questions.
@@ -24,7 +24,7 @@ authors = [
24
24
  license = "MIT"
25
25
  readme = "README.md"
26
26
  classifiers = [
27
- "Development Status :: 4 - Beta",
27
+ "Development Status :: 5 - Production/Stable",
28
28
  "Programming Language :: Python",
29
29
  "Programming Language :: Python :: 3",
30
30
  "Programming Language :: Python :: 3 :: Only",
@@ -74,7 +74,6 @@ members = [
74
74
  "pydantic_ai_slim",
75
75
  "pydantic_evals",
76
76
  "pydantic_graph",
77
- "mcp-run-python",
78
77
  "clai",
79
78
  "examples",
80
79
  ]
@@ -103,6 +102,7 @@ dev = [
103
102
  # Needed for PyCharm users
104
103
  "pip>=25.2",
105
104
  "genai-prices>=0.0.22",
105
+ "mcp-run-python>=0.0.20",
106
106
  ]
107
107
  lint = ["mypy>=1.11.2", "pyright>=1.1.390", "ruff>=0.6.9"]
108
108
  docs = [
@@ -111,6 +111,7 @@ docs = [
111
111
  "mkdocs>=1.6.1",
112
112
  "mkdocs-glightbox>=0.4.0",
113
113
  "mkdocs-llmstxt>=0.2.0",
114
+ 'mkdocs-redirects>=1.2.2',
114
115
  "mkdocs-material[imaging]>=9.5.45",
115
116
  "mkdocstrings-python>=1.12.2",
116
117
  "griffe-warnings-deprecated>=1.1.0",
@@ -130,7 +131,6 @@ include = [
130
131
  "pydantic_ai_slim/**/*.py",
131
132
  "pydantic_evals/**/*.py",
132
133
  "pydantic_graph/**/*.py",
133
- "mcp-run-python/**/*.py",
134
134
  "examples/**/*.py",
135
135
  "clai/**/*.py",
136
136
  "tests/**/*.py",
@@ -176,7 +176,6 @@ docstring-code-format = false
176
176
  quote-style = "single"
177
177
 
178
178
  [tool.ruff.lint.per-file-ignores]
179
- "mcp-run-python/**/*.py" = ["D", "TID251"]
180
179
  "examples/**/*.py" = ["D101", "D103"]
181
180
  "tests/**/*.py" = ["D"]
182
181
  "docs/**/*.py" = ["D"]
@@ -192,7 +191,6 @@ include = [
192
191
  "pydantic_ai_slim",
193
192
  "pydantic_evals",
194
193
  "pydantic_graph",
195
- "mcp-run-python",
196
194
  "tests",
197
195
  "examples",
198
196
  "clai",
@@ -206,10 +204,8 @@ executionEnvironments = [
206
204
  ]
207
205
  exclude = [
208
206
  "examples/pydantic_ai_examples/weather_agent_gradio.py",
209
- "mcp-run-python/node_modules",
210
- "pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk is too niche to be added as an (optional) dependency
207
+ "pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk is too niche to be added as an (optional) dependency
211
208
  ]
212
- extraPaths = ["mcp-run-python/stubs"]
213
209
 
214
210
  [tool.mypy]
215
211
  files = "tests/typed_agent.py,tests/typed_graph.py"
@@ -266,7 +262,7 @@ disable_warnings = ["include-ignored"]
266
262
  source = [
267
263
  ".",
268
264
  "/home/runner/work/pydantic-ai/pydantic-ai",
269
- "/System/Volumes/Data/home/runner/work/pydantic-ai/pydantic-ai"
265
+ "/System/Volumes/Data/home/runner/work/pydantic-ai/pydantic-ai",
270
266
  ]
271
267
 
272
268
  # https://coverage.readthedocs.io/en/latest/config.html#report
@@ -2,7 +2,7 @@ from __future__ import annotations as _annotations
2
2
 
3
3
  import json
4
4
  import sys
5
- from dataclasses import dataclass
5
+ from dataclasses import dataclass, field
6
6
  from pathlib import Path
7
7
  from typing import Any
8
8
 
@@ -27,7 +27,6 @@ with try_import() as imports_successful:
27
27
  EvaluatorOutput,
28
28
  EvaluatorSpec,
29
29
  LLMJudge,
30
- Python,
31
30
  )
32
31
  from pydantic_evals.evaluators.context import EvaluatorContext
33
32
  from pydantic_evals.reporting import EvaluationReport, ReportCase, ReportCaseAdapter, ReportCaseFailure
@@ -41,6 +40,15 @@ with try_import() as imports_successful:
41
40
  def evaluate(self, ctx: EvaluatorContext[object, object, object]) -> EvaluatorOutput:
42
41
  return self.output
43
42
 
43
+ @dataclass(repr=False)
44
+ class Python(Evaluator[object, object, object]):
45
+ expression: str
46
+ evaluation_name: str | None = field(default=None)
47
+
48
+ def evaluate(self, ctx: EvaluatorContext[object, object, object]) -> EvaluatorOutput:
49
+ # Evaluate the condition, exposing access to the evaluator context as `ctx`.
50
+ return eval(self.expression, {'ctx': ctx})
51
+
44
52
 
45
53
  with try_import() as tenacity_import_successful:
46
54
  from tenacity import stop_after_attempt
@@ -135,6 +143,7 @@ async def test_add_evaluator(
135
143
  simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
136
144
  ):
137
145
  """Test adding evaluators to a dataset."""
146
+
138
147
  assert len(example_dataset.evaluators) == 0
139
148
 
140
149
  example_dataset.add_evaluator(simple_evaluator())
@@ -18,7 +18,6 @@ with try_import() as imports_successful:
18
18
 
19
19
  from pydantic_evals.evaluators import EvaluationReason, EvaluatorContext
20
20
  from pydantic_evals.evaluators.common import (
21
- DEFAULT_EVALUATORS,
22
21
  Contains,
23
22
  Equals,
24
23
  EqualsExpected,
@@ -27,7 +26,6 @@ with try_import() as imports_successful:
27
26
  LLMJudge,
28
27
  MaxDuration,
29
28
  OutputConfig,
30
- Python,
31
29
  )
32
30
  from pydantic_evals.otel._context_in_memory_span_exporter import context_subtree
33
31
  from pydantic_evals.otel._errors import SpanTreeRecordingError
@@ -395,68 +393,6 @@ async def test_llm_judge_evaluator_with_model_settings(mocker: MockerFixture):
395
393
  )
396
394
 
397
395
 
398
- async def test_python():
399
- """Test Python evaluator."""
400
- evaluator = Python(expression='ctx.output > 0')
401
-
402
- # Test with valid expression
403
- assert evaluator.evaluate(MockContext(output=42)) is True
404
- assert evaluator.evaluate(MockContext(output=-1)) is False
405
-
406
- # Test with invalid expression
407
- evaluator_invalid = Python(expression='invalid syntax')
408
- with pytest.raises(SyntaxError):
409
- evaluator_invalid.evaluate(MockContext(output=42))
410
-
411
-
412
- async def test_python_evaluator():
413
- """Test Python evaluator."""
414
- ctx = EvaluatorContext(
415
- name='test',
416
- inputs={'x': 42},
417
- metadata=None,
418
- expected_output=None,
419
- output={'y': 84},
420
- duration=0.0,
421
- _span_tree=SpanTreeRecordingError('did not record spans'),
422
- attributes={},
423
- metrics={},
424
- )
425
-
426
- # Test simple expression
427
- evaluator = Python(expression='ctx.output["y"] == 84')
428
- assert evaluator.evaluate(ctx) is True
429
-
430
- # Test accessing inputs
431
- evaluator = Python(expression='ctx.inputs["x"] * 2 == ctx.output["y"]')
432
- assert evaluator.evaluate(ctx) is True
433
-
434
- # Test complex expression
435
- evaluator = Python(expression='all(k in ctx.output for k in ["y"])')
436
- assert evaluator.evaluate(ctx) is True
437
-
438
- # Test invalid expression
439
- evaluator = Python(expression='invalid syntax')
440
- with pytest.raises(SyntaxError):
441
- evaluator.evaluate(ctx)
442
-
443
- # Test expression with undefined variables
444
- evaluator = Python(expression='undefined_var')
445
- with pytest.raises(NameError):
446
- evaluator.evaluate(ctx)
447
-
448
- # Test expression with type error
449
- evaluator = Python(expression='ctx.output + 1') # Can't add dict and int
450
- with pytest.raises(TypeError):
451
- evaluator.evaluate(ctx)
452
-
453
-
454
- def test_default_evaluators():
455
- """Test DEFAULT_EVALUATORS tuple."""
456
- # Verify that Python evaluator is not included for security reasons
457
- assert Python not in DEFAULT_EVALUATORS
458
-
459
-
460
396
  async def test_span_query_evaluator(capfire: CaptureLogfire):
461
397
  """Test HasMatchingSpan evaluator."""
462
398
  # Create a span tree with a known structure