pydantic-ai 1.0.6__tar.gz → 1.0.8__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 (452) hide show
  1. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/PKG-INFO +4 -4
  2. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/mcp_server.py +2 -1
  3. pydantic_ai-1.0.8/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +113 -0
  4. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_openai_responses.py +34 -0
  5. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_a2a.py +3 -3
  6. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_ag_ui.py +154 -21
  7. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_agent.py +186 -13
  8. pydantic_ai-1.0.8/tests/test_history_processor.py +720 -0
  9. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_logfire.py +2 -0
  10. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_mcp.py +16 -0
  11. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_tools.py +237 -14
  12. pydantic_ai-1.0.6/tests/test_history_processor.py +0 -375
  13. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/.gitignore +0 -0
  14. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/LICENSE +0 -0
  15. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/Makefile +0 -0
  16. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/README.md +0 -0
  17. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/pyproject.toml +0 -0
  18. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/__init__.py +0 -0
  19. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/assets/dummy.pdf +0 -0
  20. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/assets/kiwi.png +0 -0
  21. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/assets/marcelo.mp3 +0 -0
  22. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/assets/product_name.txt +0 -0
  23. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/assets/small_video.mp4 +0 -0
  24. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
  25. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
  26. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  27. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
  28. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
  29. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
  30. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
  31. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
  32. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
  33. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
  34. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
  35. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
  36. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
  37. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
  38. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
  39. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
  40. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
  41. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
  42. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
  43. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
  44. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
  45. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  46. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  47. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  48. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  49. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  50. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  51. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  52. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  53. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  54. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  55. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  56. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  57. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  58. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  59. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  60. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  61. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  62. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  63. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  64. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  65. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  66. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  67. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
  68. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
  69. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  70. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
  71. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
  72. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
  73. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
  74. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
  75. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
  76. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
  77. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
  78. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
  79. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
  80. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
  81. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
  82. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
  83. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
  84. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/conftest.py +0 -0
  85. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/__init__.py +0 -0
  86. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_dataset.py +0 -0
  87. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_evaluator_base.py +0 -0
  88. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_evaluator_common.py +0 -0
  89. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_evaluator_context.py +0 -0
  90. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_evaluator_spec.py +0 -0
  91. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_evaluators.py +0 -0
  92. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_llm_as_a_judge.py +0 -0
  93. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_otel.py +0 -0
  94. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_render_numbers.py +0 -0
  95. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_reporting.py +0 -0
  96. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_reports.py +0 -0
  97. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/test_utils.py +0 -0
  98. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/evals/utils.py +0 -0
  99. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/example_modules/README.md +0 -0
  100. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/example_modules/bank_database.py +0 -0
  101. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/example_modules/fake_database.py +0 -0
  102. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/example_modules/mcp_server.py +0 -0
  103. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/example_modules/weather_service.py +0 -0
  104. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/ext/__init__.py +0 -0
  105. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/ext/test_langchain.py +0 -0
  106. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/__init__.py +0 -0
  107. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_file_persistence.py +0 -0
  108. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_graph.py +0 -0
  109. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_mermaid.py +0 -0
  110. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_persistence.py +0 -0
  111. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_state.py +0 -0
  112. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/graph/test_utils.py +0 -0
  113. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/import_examples.py +0 -0
  114. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/json_body_serializer.py +0 -0
  115. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/__init__.py +0 -0
  116. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
  117. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  118. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  119. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  120. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
  121. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
  122. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
  123. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  124. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  125. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  126. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
  127. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
  128. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  129. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  130. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  131. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
  132. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
  133. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  134. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  135. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  136. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  137. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  138. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  139. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  140. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  141. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
  142. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  143. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  144. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  145. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  146. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  147. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  148. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  149. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  150. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  151. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  152. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  153. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  154. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
  155. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
  156. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
  157. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
  158. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
  159. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  160. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  161. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  162. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  163. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  164. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  165. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  166. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  167. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  168. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  169. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  170. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  171. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  172. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  173. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  174. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  175. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  176. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  177. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  178. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  179. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  180. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  181. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  182. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  183. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  184. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  185. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  186. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  187. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  188. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  189. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  190. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  191. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  192. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  193. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  194. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  195. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  196. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  197. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  198. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  199. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  200. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  201. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  202. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  203. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  204. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  205. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  206. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  207. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  208. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  209. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  210. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
  211. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  212. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
  213. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
  214. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  215. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  216. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  217. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  218. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  219. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  220. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  221. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  222. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  223. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
  224. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  225. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  226. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
  227. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  228. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  229. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  230. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  231. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  232. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  233. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
  234. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  235. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  236. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
  237. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
  238. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
  239. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  240. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  241. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  242. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  243. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  244. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
  245. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  246. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  247. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  248. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  249. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  250. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  251. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  252. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  253. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  254. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  255. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  256. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  257. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  258. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  259. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  260. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  261. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  262. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  263. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  264. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  265. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
  266. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  267. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  268. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  269. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  270. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
  271. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
  272. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
  273. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  274. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  275. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  276. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
  277. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
  278. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
  279. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  280. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  281. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  282. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  283. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  284. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  285. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  286. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  287. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  288. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  289. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  290. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  291. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  292. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  293. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  294. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
  295. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  296. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  297. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  298. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  299. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
  300. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  301. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  302. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  303. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  304. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  305. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  306. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  307. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  308. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  309. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  310. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  311. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  312. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  313. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
  314. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
  315. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
  316. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
  317. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  318. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  319. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  320. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  321. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  322. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  323. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  324. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  325. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  326. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  327. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
  328. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
  329. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
  330. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  331. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
  332. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  333. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  334. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  335. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  336. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  337. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  338. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  339. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  340. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
  341. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
  342. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml +0 -0
  343. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml +0 -0
  344. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  345. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  346. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  347. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  348. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  349. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  350. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  351. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  352. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  353. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
  354. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
  355. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
  356. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
  357. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
  358. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  359. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  360. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  361. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  362. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  363. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  364. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
  365. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
  366. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
  367. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
  368. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
  369. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  370. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  371. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  372. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  373. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  374. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/mock_async_stream.py +0 -0
  375. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/mock_openai.py +0 -0
  376. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_anthropic.py +0 -0
  377. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_bedrock.py +0 -0
  378. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_cohere.py +0 -0
  379. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_deepseek.py +0 -0
  380. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_download_item.py +0 -0
  381. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_fallback.py +0 -0
  382. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_gemini.py +0 -0
  383. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_gemini_vertex.py +0 -0
  384. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_google.py +0 -0
  385. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_groq.py +0 -0
  386. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_huggingface.py +0 -0
  387. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_instrumented.py +0 -0
  388. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_mcp_sampling.py +0 -0
  389. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_mistral.py +0 -0
  390. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model.py +0 -0
  391. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model_function.py +0 -0
  392. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model_names.py +0 -0
  393. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model_request_parameters.py +0 -0
  394. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model_settings.py +0 -0
  395. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_model_test.py +0 -0
  396. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/models/test_openai.py +0 -0
  397. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/parts_from_messages.py +0 -0
  398. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/__init__.py +0 -0
  399. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  400. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +0 -0
  401. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
  402. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
  403. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
  404. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
  405. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  406. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  407. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  408. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_anthropic.py +0 -0
  409. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_azure.py +0 -0
  410. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_bedrock.py +0 -0
  411. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_cerebras.py +0 -0
  412. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_cohere.py +0 -0
  413. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_deepseek.py +0 -0
  414. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_fireworks.py +0 -0
  415. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_gateway.py +0 -0
  416. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_github.py +0 -0
  417. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_google_gla.py +0 -0
  418. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_google_vertex.py +0 -0
  419. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_grok.py +0 -0
  420. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_groq.py +0 -0
  421. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_heroku.py +0 -0
  422. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_huggingface.py +0 -0
  423. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_litellm.py +0 -0
  424. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_mistral.py +0 -0
  425. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_moonshotai.py +0 -0
  426. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_ollama.py +0 -0
  427. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_openai.py +0 -0
  428. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_openrouter.py +0 -0
  429. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_provider_names.py +0 -0
  430. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_together.py +0 -0
  431. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/providers/test_vercel.py +0 -0
  432. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_builtin_tools.py +0 -0
  433. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_cli.py +0 -0
  434. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_dbos.py +0 -0
  435. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_deps.py +0 -0
  436. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_direct.py +0 -0
  437. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_examples.py +0 -0
  438. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_format_as_xml.py +0 -0
  439. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_json_body_serializer.py +0 -0
  440. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_live.py +0 -0
  441. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_messages.py +0 -0
  442. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_parts_manager.py +0 -0
  443. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_settings.py +0 -0
  444. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_streaming.py +0 -0
  445. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_temporal.py +0 -0
  446. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_tenacity.py +0 -0
  447. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_thinking_part.py +0 -0
  448. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_toolsets.py +0 -0
  449. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_usage_limits.py +0 -0
  450. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/test_utils.py +0 -0
  451. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/typed_agent.py +0 -0
  452. {pydantic_ai-1.0.6 → pydantic_ai-1.0.8}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 1.0.6
3
+ Version: 1.0.8
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
@@ -27,13 +27,13 @@ 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.6
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.8
31
31
  Provides-Extra: a2a
32
32
  Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
33
33
  Provides-Extra: dbos
34
- Requires-Dist: pydantic-ai-slim[dbos]==1.0.6; extra == 'dbos'
34
+ Requires-Dist: pydantic-ai-slim[dbos]==1.0.8; extra == 'dbos'
35
35
  Provides-Extra: examples
36
- Requires-Dist: pydantic-ai-examples==1.0.6; extra == 'examples'
36
+ Requires-Dist: pydantic-ai-examples==1.0.8; extra == 'examples'
37
37
  Description-Content-Type: text/markdown
38
38
 
39
39
  <div align="center">
@@ -11,6 +11,7 @@ from mcp.types import (
11
11
  SamplingMessage,
12
12
  TextContent,
13
13
  TextResourceContents,
14
+ ToolAnnotations,
14
15
  )
15
16
  from pydantic import AnyUrl, BaseModel
16
17
 
@@ -18,7 +19,7 @@ mcp = FastMCP('Pydantic AI MCP Server')
18
19
  log_level = 'unset'
19
20
 
20
21
 
21
- @mcp.tool()
22
+ @mcp.tool(annotations=ToolAnnotations(title='Celsius to Fahrenheit'))
22
23
  async def celsius_to_fahrenheit(celsius: float) -> float:
23
24
  """Convert Celsius to Fahrenheit.
24
25
 
@@ -0,0 +1,113 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - application/json
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '509'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.openai.com
16
+ method: POST
17
+ parsed_body:
18
+ include:
19
+ - reasoning.encrypted_content
20
+ input:
21
+ - content: Calculate 100 * 200 / 3
22
+ role: user
23
+ model: gpt-5
24
+ previous_response_id: null
25
+ reasoning:
26
+ effort: low
27
+ summary: null
28
+ service_tier: flex
29
+ stream: true
30
+ tool_choice: required
31
+ tools:
32
+ - description: The final response which ends this conversation
33
+ name: final_result
34
+ parameters:
35
+ additionalProperties: false
36
+ properties:
37
+ result:
38
+ type: integer
39
+ required:
40
+ - result
41
+ type: object
42
+ strict: true
43
+ type: function
44
+ uri: https://api.openai.com/v1/responses
45
+ response:
46
+ body:
47
+ string: |+
48
+ event: response.created
49
+ data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_0050471a34b36ae60068c97b94a480819587a9d70cf2979b33","object":"response","created_at":1758034836,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":"low","summary":null},"safety_identifier":null,"service_tier":"flex","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"required","tools":[{"type":"function","description":"The final response which ends this conversation","name":"final_result","parameters":{"properties":{"result":{"type":"integer"}},"required":["result"],"type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
50
+
51
+ event: response.in_progress
52
+ data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_0050471a34b36ae60068c97b94a480819587a9d70cf2979b33","object":"response","created_at":1758034836,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":"low","summary":null},"safety_identifier":null,"service_tier":"flex","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"required","tools":[{"type":"function","description":"The final response which ends this conversation","name":"final_result","parameters":{"properties":{"result":{"type":"integer"}},"required":["result"],"type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
53
+
54
+ event: response.output_item.added
55
+ data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"rs_0050471a34b36ae60068c97bac4dcc819595fd0f80d6b3c405","type":"reasoning","encrypted_content":"gAAAAABoyXusnBzv6TRLFFsi09D2XC4A5Jod6AOAtsnxA4Vdp6sHIAr4B0UwlKwAdOwh-Lx6LtdwrxGK9-64xzLSiVyDZTHI2ewjcegYQjmLApeFswgysedxnp-xpg0o_ExbRq4EOryL4mKU3rgWLXwzpZiieNjZfj3YVssoRfunu4jEjbCsShYB5Yds4l_NhtihPKQt9-ZddhhPCKZCagD2bxm1gLCj6h_nIJBK97ouF647Y6UiN-ulfgRn4jebwh5sHZvAwEP6AHFIjCImqt-17NBsmur1fHG3jDMS4Trsp-4k7cS6ikmEiq46v6J39wfHuFAtjAT9Eu-lna2ZhBWvjRLMl26H-d03pwFEIPmxQ5m8umIFr9WU5Y08b9HhjRI2Y_qEB2IKVvrZPS_K_HdWr0R8f4CUvCRz70siKMOivxjfUGjj2S2_k59VMx1nO3QpbZdgY85e4W_tEIpfsy9Tt1pSz5JW4VeFN73PbgLpbVzdyfbS0W7LpE2huyTSxuEkoBtHsBtrB503mpZ2ENZpEtQCC6pmn0T5Fear7IyaJ-W3gTNRKdA4OQ6m5k1qTMlAMxm6m1OOUHR5IvfNHENfT46N9ln1Kwl-Xibm0T9ZFg4UPyJ-CLrJow7Jf-Txl8DN2O_dbIf4n9W0GD1mx43eRO47bRWY9FrAsXTOxx0j-pY-mHqMLb7hgXiojLiShikJRhXDvJewCaHOLXh394v9VM8pd0IaxPrCatRT3a7H3vDdL9sXzy5NOdRBPtdbu7U4VqgpC6SHmoCoV0_ac_AKONO_54w2Xrn8Iks5rp6T8YkU2e0bPTA=","summary":[]}}
56
+
57
+ event: response.output_item.done
58
+ data: {"type":"response.output_item.done","sequence_number":3,"output_index":0,"item":{"id":"rs_0050471a34b36ae60068c97bac4dcc819595fd0f80d6b3c405","type":"reasoning","encrypted_content":"gAAAAABoyXvxI6jwG5j6rvTGC7PD6JN5758K-WDlzFQrn5EAe9CCcavF0ItJhqYu6mn8VIXPmvr2mX_RbxtYP02DhGnNq9EOqfhxHNk2BYcVYI7ZixE6EcAWxD3bZ77Fr7x6oGK0utd0gboN1tCnxlf_bsjYIpbqFetSNqWnmvjzH6HI-mPqePUxUIXGc1lwgU1AfNxqzn0L0qhlMzNsuCMjP5DT7kH-xmyz_CeYYVEGdUTvAePFFYbeaEMJIfN6j5E66IQzbTZG3nu9yBSE4No9AggB0QJq4hDnC2SbTxtNpBP_8z6A61aC7NHWoEP1MSnDKvSzXMF9_wcnzDKjGkHv7IBjB38STOiTV6nHXbvAaFYpdfMmXdtbtZXlC0iAUROKQx_ZjkMOxSsFM2LKELbm7KdRF_Jt6clSTtckAzq8EAx_oi6EQkreeFd7FawljvBy49qULSSQ5W079KMUYbnoU9rt9ZCOchmqb6uRmfhrSu2HkMBkgtQSpASMtU-aZLCvbW-wESUeW7k67-Ax16frB3L9s4cxp30noFcgU6DEhQTJ50ztAMrikcGWkITQMo3ikj5Wne8UYHyuC-e6fiuq1jb8aoF0AelTRULbvcC6fjXuwesuyJwOi48imN_oLc_YsXTUEjuj3s9VGPQFwhCirW5wsgY2EvCJRjYNMYLNC5LaDJly319KRhM53JOyTM1y1R_-6mR2nDaZsuSlzH2ABZ_eowurIrWf2ndc1DKkyecdaqU7Lz7nJbVNCeWn8Uqwn2Ab5iIYBQwR74-d8K4IukQI5OsgvJF5DOj2LSfai5RGOKG9QkvNDxxpayszg6XkASBrzg7wppBfNAau_4HxBNG-4LN9iKOD9VyRR7OJgucgk_0_LSqVM_KpL64N8TCl5AH6PUxvKfMVxxlO8G42jgxEyWk1MhcII56O8avSX613zpwi6iatVDw98K9MTPO88F808T39M-306w2boEU4xBqmKzaGjI0blGkxA-si2fsluKAo_fdOKA_k6EftNbwr7ZsBv4HhWx3bFlErf444LSb8U5iOLwHwDHyI0mBljsmy-nsr3LV73aP5yAT7lDzAkYLnz6XTqQb5yxySVy9U9p6iQs8zfbbEDJUizwnpu2BTi01-GLsbzAczujviD6HokKBbjIK2a1DYsNp0UYJV0u6aH1HbuXnF3cRUBKjNGFdX1iyvyh2OnaxzkWBjAB9H9tMQKugmx6QgUmIahJTPjBzvuGOOfD1HhRhDMS8A_AKx2u06y_w9Eu6CTG9n3UbjzUYcYn437GV6pmwKphOxZGGVz7Z-rQCkN0_jirw-X5e_2dIbLYxG61HxOi-1K-6Hjc1mdu9qqWgbTmhvH7u7ofqraOURFa3312tRtyVBfkahC4m7eaquW_xnC1ROMYPgEFyZnrr0WVpfj4L9Q56FnCG-aGOPgcvL4saXncRN6-MMyUt-szmlqDjWOOrSH75zhISLPNCphda5kY1bMzLYYN0MQBOpCEVw6rm2OHwSl2xapM_OnimL4acpmvEHBfMs_IybatZKuoD11Amjpa2xTINfTNHmqWIETDFn2-EWcG94ZznRKRJwqN5AVl92SN-X24hfS4Tjjl2mtaV1v6aT4lD7CQOdwa_ZrkR7_VN0HUYpXr0p6eATWra028Nce5nGN2teVu0gawtj1ZtrNrY7G60uSIwCZrd3pa3ecqUhRuFJMVmi_NuKO5YNhZoehxJJ172YHjeAJmNGs4J045TyflCOBiXVHF9vlBOKpQJnn4LKwEeVm3WAPapFhId_pUBd3Il-TMjJHRGEpnk23IAcwVuZJjusGtbxaOyHsEIFvuW65nRlU1CpMsChEMw9raVR_4QUyCul3OBbk-KuAuZMGkUE_i22ZbzKikLIhIIneOLD7Rj7bsTGzjsrTOba5VDLMzrySawHK4w0QRqq_V_JznRDES4zQd7ISmHDCTVwNTc8_RPfPEFfTQZ7mosOcpw9zIzqQQb6CTL6CuH7amQoG15SjjwZ3sFaKRzsA6karlPGCfiF-vhau9Aqk4VN_F0n7z0RFhTmzle9TOvz-GC-pHGDKJRYk8WAuw5vvzUcCVZqOQRzYO40PPJrV8Az2FhOlLn9VPb1AtLHpfkk_OrA7Zx8ogaiUcmDqLhqZneB81QVg-H2nYNhA2k7HENdTsq-9Hy88vmcIcK23IefBBqDbyroRXk2ShZQJwAqp5SsC35pEB3Epbc5WTDPYAmykqlyyEUFJGLrRDaTWsGEGdyOSpZY8sgadxc_DkMOonvi11eQ5aeqf02pYKSBLhJ7sODX5tv4zPr5nVd7Rkpqain1-t7SHr_XXfJbcXf9Ly8T4a1LEwzDWxHD_ms_jFs8aZx0LdWHTSUxzU6Y4b-2pJpU3aQg1lqfR3MwEewRCo1JGC2NL9xjcGRO90vo6dLxy5PD7xugyi0C9CjdVkoPIje1NZEn9GU7IJkeHnqsL8osMFYz9K-eK_YziGKJ0idLOiYiYjxOfhFqo65xgVq41s0lLojK0E5nr7HB4MfAK5XCRJQ-3nZamNhpeYHPQot3usVHbsE7Xn2oxYJf1AAgzJyiC9BJpM04_cfUod8grihaB7qNRbp7V0MPEOiNpxAb1bFHs1oGOY-Xt1-dTZ3duIRs-XsQ8oWyEzMkMnZ7_ZndMfLZ_IMys9pz3mRFTJbaGmwfgBMb29ut4OQgsVDuKrTgJgfnWqVq_DY0kJ0t-t1Ue_VR9ZD9vv441Ut-4vvw7XR9WPLlxsVu1rEovk_Ragb-tj_zTzToeeJfjf_fmEx09Jl4Yliuhfa47_sbtIcOXMUqOGOYBzWvXzxJtDBorz0T-QxeqhmoPH87ogfJnGIn-NhDxjNO7N7kPzWys5PwXTP5i-0iy9x4KJHTxj7zRvx30dv0ABCGbrLqOcf6gibDZogP235FTl2swex8-hRdXgZ3lkbPnS_xaotdtiGmaZJWvpBLFTT0uLM8O0dmDOWcB9k0R_A7UDqTWcOnTyW11cnPTopGbf4ykqtILwfE1qt44kTruTqGOZWjkRQzbKtm4V0QKVMliBCLl0XOc_bFv2zUF4HEsquh3kbWwfLK1zXaiiFxCukkKi7hNSlYvIpW8t2ZYQWn6CpgUSW840HnOV4MbBUx_r9Kz2W449XU7J4T9awvsmRqjio0mhfq12qVnIIK4URzlotpdYJYf3k1qBrvR2tFXv2DTwkYBTh5cDY6BzRD_8f8fiwOSSfYuFDUeLaJQdkZFAqPryp1tbMDCQ_59qVTTHOqSsWUqTDRIxxHTJGhmxLf-OZeZh_tnUcLGEv5hJsAYlG9seGGyL6MkoAaELM7xR4ds9KYttvGmdBExIZyAazH7AZpMLz84IJocbC0mjO-YdpI2vz6zpOgSJB9N2AVlrl2qhZMZNUOJlfbS7hSjps8UnCrwsqcgrCB7s2F1I_gIo04hjf89u_7yjfNwu20erI_fl_L81-bbzhV4g7p1YGs4CMgGYOQ2-vZWWVdb6f-p3iuo45HaH_AcLM469fTARMM82mz-hW0GfJe2UMJLluS3RD5QTOuxcTlEFAXCcswLLR08JqPu3FdXQYmNnlvgjP-m2zqZFeYvAY7kVUgXmqMinqZbDGR6BsQ_4N17aXNtzQshAsh5Td3oq_jcVWCwgxWwwzCuJewo-0MuXnITxKR-pD9oPSpmMZwz2_ckb6KWJ4Emz0Reei6_4hM8243oKQVsuZGTUdSlV7pF-Hki3G3ZLvEXnwpmJvG-Rjhzgz_2OdO9sLbiMM_2wlF34XFzuxoDsDjPKy_QOL-rzooGR_JEeFNCJUrIuNoDOObbS3vYwGkLXMWfi6rZfaseFcAqsNbj2D4rjZYn3aLDit6A7e5ztUnIVgXKYQko02bg-rk3VE=","summary":[]}}
59
+
60
+ event: response.output_item.added
61
+ data: {"type":"response.output_item.added","sequence_number":4,"output_index":1,"item":{"id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","type":"function_call","status":"in_progress","arguments":"","call_id":"call_CWXgs68YprAjp6t0371hiPOI","name":"final_result"}}
62
+
63
+ event: response.function_call_arguments.delta
64
+ data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"{\"","obfuscation":"tWyV55lwoZZb30"}
65
+
66
+ event: response.function_call_arguments.delta
67
+ data: {"type":"response.function_call_arguments.delta","sequence_number":6,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"result","obfuscation":"mRkNTL8Pk5"}
68
+
69
+ event: response.function_call_arguments.delta
70
+ data: {"type":"response.function_call_arguments.delta","sequence_number":7,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"\":","obfuscation":"ZZEL3XQ2AJHkvm"}
71
+
72
+ event: response.function_call_arguments.delta
73
+ data: {"type":"response.function_call_arguments.delta","sequence_number":8,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"666","obfuscation":"zDNXNlG4LUXlw"}
74
+
75
+ event: response.function_call_arguments.delta
76
+ data: {"type":"response.function_call_arguments.delta","sequence_number":9,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"6","obfuscation":"hqxWHXWP4pyBSkv"}
77
+
78
+ event: response.function_call_arguments.delta
79
+ data: {"type":"response.function_call_arguments.delta","sequence_number":10,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"delta":"}","obfuscation":"OgrI1veEOjkSUsC"}
80
+
81
+ event: response.function_call_arguments.done
82
+ data: {"type":"response.function_call_arguments.done","sequence_number":11,"item_id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","output_index":1,"arguments":"{\"result\":6666}"}
83
+
84
+ event: response.output_item.done
85
+ data: {"type":"response.output_item.done","sequence_number":12,"output_index":1,"item":{"id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","type":"function_call","status":"completed","arguments":"{\"result\":6666}","call_id":"call_CWXgs68YprAjp6t0371hiPOI","name":"final_result"}}
86
+
87
+ event: response.completed
88
+ data: {"type":"response.completed","sequence_number":13,"response":{"id":"resp_0050471a34b36ae60068c97b94a480819587a9d70cf2979b33","object":"response","created_at":1758034836,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-5-2025-08-07","output":[{"id":"rs_0050471a34b36ae60068c97bac4dcc819595fd0f80d6b3c405","type":"reasoning","encrypted_content":"gAAAAABoyXvynDJ_tG_Xp4Uzjn4eVm80xJOnBKO9KgQHl9ljdR14zUmFHR0SJht6kqaUAmSa5dEmTkm69qPeqetAHxFFjCQ7YadDak9q_xqNfJ1VZyVkD7cvNwLnurc_7N7OT2Jk5LfvzKPB-IEpFFbKBcmKhBx7cqcx5btzZFqoBvzpB775Gaz7_sabqCksTSO4iMvm0AZ0B1ZjuYwlnFiTT1YCgURE1CZj_LjfOQfBMAOnMjx_6OZNxVaY0r10IaGKgoRsi1XxjE6VOpNcjRjmGvRjhRvD5rhRFyZh6_nC1qBKn8KGtrzhHAj846JvEhYJeNBHckTa1zCYxHzaMbR8KNpO7DziMdaG4ZmIwxfIjSAjpdAmfrvrx1vbMCnY-EX50vEXzJIL9fZw2UqJPMUI4FqbD0T10uzi9Gjkl67o9yYMnYqBAAaDg9lozHMOI5qqBKkiFqz_uDYCSDmquxSpmWmPcVYuSvVyNUmYH-iO2RGmilre4Sk_TkHYIfA7pGyLiIIFpcF-p8zKhIMXNMhUaZlOY99tP7VPJqVu1GhTf8bnjQUvGtP-IpbuI8D9-GUitP16nDN7OjwKbC-pWLpoONsCe1Qat6R0MmbBVAvU80-9SimsTT_mwggHpnZr4ovEPZs-uPstaO9OZ1cIZfHMxIDWBg3BINeEGuDxxcB-R7WLDgs1f-wEzjscuJ8RHbz2t1xdvaLIBcvprDiKMTAJdQxhENF6BnLkkwQMNksMQSWaKL28ElqtwGi8u92Y01bPS7canqR9damAm9KyKLzXHWpbIN2cF1tHQ79-jBthjZO_eTFWkiCmD0nvzAteFkUJW93HkohdxepTmrk7QIJS6ePSSmLhMNf8IqBIKPTblSU6aFGGSkZrkAkm-zP3HIXBaJ8D4LL_cawe70qVslb1DezEtkEFb8kpen8Up_9zeb2lNDazOWxFKsLjBiWmaoCguWXUvcShHfqKRdcorTukyLC9DgDjHiHGQ-y326tDqF0ygIHtnvZwRc-bJk9b9jjHizE0SqMsvpq5PeeuWFEYFm_RMndoRvYkxZJWQDHI3SA4rPggmPzdnN_u07NgBNvjR4Ng3g_niWfaTu5h1PB7ug_6mdEpxHKyF4kwEZ7nKBCxwB7Z3hKKuMHwn0U0NupCqrGD8UVd1SVjb55eLefDJloAfrLqpNEYS7wwh-wBzq5A0xn6WhPNMLNhypSKM3zBZ8jFKQ1Y8L2erVM9D9t3EfkCo6EKSVOWQbnaTix-BCdDMrl3lBPR5Vk4Wby7Mjrk8_AH8P_vr9z9KCq6WGHfMa_ztEPqaAifqzPLGxcoKbk1dfugsIpiVDphUJC3On52eq698IrATH3G6Rdsste5xBoWTClKTGpHBPo2mrZnIVJvL_nduK9_1GuYc51R6d5rP5pwYS8A2O7fiWV2DD4TZwgJKDWRwOoCRO9BemC8DuAigLlk78YA278smSK2-4MkvGnp8jUCVtPJQ3NYvVERHw41ZWvvn_55OxvU0H08qzg_ErHAKLRTV62ZxDKX5jpNWb_qAVOq5WB9SAnikKmrZmxV1Nkuvm8Zi88yJwjvCd9FmsD7K7PJBDZX1V9QI0kucrnBZRnLQ_Lb-KA3iWNzNQsmvjqoeYt12UXOvFZHXyX-0djskbeWam9PKZ95kCK5C8DaAeGTSEA8pLhiLOvqHoZAxhHN1CNs6yL_vYeGmqVQ6EOqaDY8HdVD3WsBUwOdsRWMYJ3-uC6ijNy9rr7j3SwfGA7E1IkUUn6C1t9N1B05seUIkIFLty4_AKkBa5f_8U0Nd-Fj6hh5B6i0feLwc6NLKXNjSf1-qrAxv-vu_Fjq7k79Bkk-zTlFBYVEdEhPyZ7v1ayU1W7BzD-qVlkDxZ-3ZIVxGAVlTtzN_VpurQaGDyxYxEFgcODMbQ-8_gKImAQdg3e-8CYkLvBTgVzAt92k30Skkj3hNkX-AGm_lVs6wjBBkcfsGsJm43OTtXmaBcGEPJQp2k3gjXQhaMXJEzDuwgJng-mV-8akxufqrKVY6jdxvdgEPkrVukrbzVQ4IlsLtqInmcPIFuqWmLo4rSP1wUMtC_P_9r9vBts3f1TL_4Ioy7_4uUACtWiyE29XPVcgRMXO_urKQrPvFU69e7Dj0KVZbNYhJhTSLZibqzwtOdr6fRWWhrRshp9ohjhgA8_WTloc4VyE83CXK6VdJD-YJbJcHf_3p3DyMUS38ZzA9IcNBk78dIV4HgKaC537krtqNf9Xjg4272_4kfJ9md2X3hrHBUotfhGkfZVKRF9eqW5YqnU2x3w0xd2aUihWoevpcAvpKutTPRnl3vXMIK-3v7giAYJU4qVaehksaVR0fivvLqju3aC14VOGnBPWbvaqWU7Om_vD5neiOvbuDOWPRkkHWc_WOUfyusFORGQHjT1-DuqEexxmsQdF1XIpT2T_UZ6o0dN3OIjHWZyBLRfHXCBT-9x19Fcw11Y6LB51I5jDv1GzRxfOkvQz0x3Tf9Nrj0RD5R-4o7L1rpko83szMzLGcYgi1mxQGFagP8jdGrwb40HV0Kv4T0xkPhBjw-8ifINUG-7skSHbslrzvOD_I02lG-l6N6_py_jhws9L47H3zcM11tvFl1c9Aavyk_UwxFfj4xFSyeKMV1nwRKu2e8Knx98M-iL5xZrb63BaiFzfdX4jSdjQChgcn2v8jnvweccWEjdpgh7gd2xG48CHEo6UOEKzLwJOJuyTtqo1qMpos16ks3wVtlgAqqQdtDHDJbHpBSKn6yWjVY3XvNQfbiQP0KnNqOlVLGeOyXl9lkjaWfSt7dC39X-lZbzC-JuA-iQXaGBoGtVK4Xfnl_kMLrJLEZcp5BGscQObtrcOfIybiRXIZaisIRfoCLP3_6MdzCN5E81Hf_dU7SDHArz67zAvHDIKQktcJfN7GCW17ZjV5Ss3gXJXpJXghrMqMpe_buGYFIUdcjYCU7kGJq4NezA3yMEISv1_5a0ZAsvh1F6SmaG0sMHi8_1-Cg3gUywxkZ6iHjNK1ZEtUS6_yK7OmgF3PPK9OwumqblCgaa6mvhuydoGnOWhQrmcd9YntICMaLEbog_gJzxpoLFgK3x0FEO_G6ge_xO6KDe3wvDs-NbZJZYiqScyGkjv3bsXbJ_XCVMi72DZ5G0sKfYB2w4RceObWHcHvY3u3Q-B-O5P15bily3kw-vntjFwDyVL9ZrFULMvj8h3HPBFD9UzgYzbweER1pymdRnQ5iDp0CdelRRoBnQk4S2mhGNRhjRoyqS2e0RF3cUlsNKT9gbmanJgrhdWp6Vzj7SZWuiQj0LFevurXxFJburJzgVkBCngMJc0FV46M4b1na1nIam3MQvt8hedCAJlP266fIlefhsCkePtZ9AqiP-EfPU5g17oWKdD-X2YN2j-vP_AYVoNVSb296O3-sld7LvpLItO3y09__C4QzvNPDAfEn-XAFm7iVHwCzMLTqPe_9m1w6IGWh-Al5i5tuCg6nleKreF1hOii0BXvHlcZYdy48sm34vDZAflTKmwA9pz8P7rzY3ERtfYi3AL8aiaPXqmofNCz_nyT0X6y_ZngXCilExDuFVByp_-QKJvDroO6SczK_BORgApGIrdK2ruu7JYtvtpMzd5peyco5TOJrKxWKbDCNj9APhAU7QfTplCzDFcZaP0pKO75EWAXN42CRc7sbx3vMLsdF8XgUsnJ_AdpXP52e-Aljy9ySpCOHqD9NdGad5WrPXX5X86pMyCtZ9P210AGsiuhxE1OMW3ILv9GxXRJ8d6R3mPsOPt71emlKtPY00NXF4Zzea98c1M4BVGoT4-dXDeCkp6nwxvM-mjDNp2XkxqfU0jtow8oh5Z7tHZFpUOsuy7TT1eSG6g0TLaxAwkaFdVIh2lKDw=","summary":[]},{"id":"fc_0050471a34b36ae60068c97bf19d9c819590eaf42c0edc1042","type":"function_call","status":"completed","arguments":"{\"result\":6666}","call_id":"call_CWXgs68YprAjp6t0371hiPOI","name":"final_result"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"reasoning":{"effort":"low","summary":null},"safety_identifier":null,"service_tier":"flex","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"required","tools":[{"type":"function","description":"The final response which ends this conversation","name":"final_result","parameters":{"properties":{"result":{"type":"integer"}},"required":["result"],"type":"object","additionalProperties":false},"strict":true}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":53,"input_tokens_details":{"cached_tokens":0},"output_tokens":469,"output_tokens_details":{"reasoning_tokens":448},"total_tokens":522},"user":null,"metadata":{}}}
89
+
90
+ headers:
91
+ alt-svc:
92
+ - h3=":443"; ma=86400
93
+ connection:
94
+ - keep-alive
95
+ content-type:
96
+ - text/event-stream; charset=utf-8
97
+ openai-organization:
98
+ - pydantic-28gund
99
+ openai-processing-ms:
100
+ - '255'
101
+ openai-project:
102
+ - proj_dKobscVY9YJxeEaDJen54e3d
103
+ openai-version:
104
+ - '2020-10-01'
105
+ strict-transport-security:
106
+ - max-age=31536000; includeSubDomains; preload
107
+ transfer-encoding:
108
+ - chunked
109
+ status:
110
+ code: 200
111
+ message: OK
112
+ version: 1
113
+ ...
@@ -1937,3 +1937,37 @@ async def test_openai_responses_thinking_with_modified_history(allow_model_reque
1937
1937
  ),
1938
1938
  ]
1939
1939
  )
1940
+
1941
+
1942
+ async def test_openai_responses_streaming_usage(allow_model_requests: None, openai_api_key: str):
1943
+ class Result(BaseModel):
1944
+ result: int
1945
+
1946
+ agent = Agent(
1947
+ model=OpenAIResponsesModel('gpt-5', provider=OpenAIProvider(api_key=openai_api_key)),
1948
+ model_settings=OpenAIResponsesModelSettings(
1949
+ openai_reasoning_effort='low',
1950
+ openai_service_tier='flex',
1951
+ ),
1952
+ output_type=Result,
1953
+ )
1954
+
1955
+ async with agent.iter('Calculate 100 * 200 / 3') as run:
1956
+ async for node in run:
1957
+ if Agent.is_model_request_node(node):
1958
+ async with node.stream(run.ctx) as response_stream:
1959
+ async for _ in response_stream:
1960
+ pass
1961
+ assert response_stream.get().usage == snapshot(
1962
+ RequestUsage(input_tokens=53, output_tokens=469, details={'reasoning_tokens': 448})
1963
+ )
1964
+ assert response_stream.usage() == snapshot(
1965
+ RunUsage(input_tokens=53, output_tokens=469, details={'reasoning_tokens': 448}, requests=1)
1966
+ )
1967
+ assert run.usage() == snapshot(RunUsage(requests=1))
1968
+ assert run.usage() == snapshot(
1969
+ RunUsage(input_tokens=53, output_tokens=469, details={'reasoning_tokens': 448}, requests=1)
1970
+ )
1971
+ assert run.usage() == snapshot(
1972
+ RunUsage(input_tokens=53, output_tokens=469, details={'reasoning_tokens': 448}, requests=1)
1973
+ )
@@ -623,10 +623,10 @@ async def test_a2a_multiple_tasks_same_context():
623
623
  content='Final result processed.',
624
624
  tool_call_id=IsStr(),
625
625
  timestamp=IsDatetime(),
626
- )
627
- ]
626
+ ),
627
+ UserPromptPart(content='Second message', timestamp=IsDatetime()),
628
+ ],
628
629
  ),
629
- ModelRequest(parts=[UserPromptPart(content='Second message', timestamp=IsDatetime())]),
630
630
  ]
631
631
  )
632
632
 
@@ -21,7 +21,17 @@ from pydantic import BaseModel
21
21
  from pydantic_ai._run_context import RunContext
22
22
  from pydantic_ai.agent import Agent, AgentRunResult
23
23
  from pydantic_ai.exceptions import UserError
24
- from pydantic_ai.messages import ModelMessage
24
+ from pydantic_ai.messages import (
25
+ ModelMessage,
26
+ ModelRequest,
27
+ ModelResponse,
28
+ SystemPromptPart,
29
+ TextPart,
30
+ ToolCallPart,
31
+ ToolReturn,
32
+ ToolReturnPart,
33
+ UserPromptPart,
34
+ )
25
35
  from pydantic_ai.models.function import (
26
36
  AgentInfo,
27
37
  DeltaThinkingCalls,
@@ -34,7 +44,7 @@ from pydantic_ai.models.test import TestModel
34
44
  from pydantic_ai.output import OutputDataT
35
45
  from pydantic_ai.tools import AgentDepsT, ToolDefinition
36
46
 
37
- from .conftest import IsSameStr
47
+ from .conftest import IsDatetime, IsSameStr
38
48
 
39
49
  has_ag_ui: bool = False
40
50
  with contextlib.suppress(ImportError):
@@ -59,6 +69,7 @@ with contextlib.suppress(ImportError):
59
69
  SSE_CONTENT_TYPE,
60
70
  OnCompleteFunc,
61
71
  StateDeps,
72
+ _messages_from_ag_ui, # type: ignore[reportPrivateUsage]
62
73
  run_ag_ui,
63
74
  )
64
75
 
@@ -153,24 +164,22 @@ async def send_snapshot() -> StateSnapshotEvent:
153
164
  )
154
165
 
155
166
 
156
- async def send_custom() -> list[CustomEvent]:
157
- """Display the recipe to the user.
158
-
159
- Returns:
160
- StateSnapshotEvent.
161
- """
162
- return [
163
- CustomEvent(
164
- type=EventType.CUSTOM,
165
- name='custom_event1',
166
- value={'key1': 'value1'},
167
- ),
168
- CustomEvent(
169
- type=EventType.CUSTOM,
170
- name='custom_event2',
171
- value={'key2': 'value2'},
172
- ),
173
- ]
167
+ async def send_custom() -> ToolReturn:
168
+ return ToolReturn(
169
+ return_value='Done',
170
+ metadata=[
171
+ CustomEvent(
172
+ type=EventType.CUSTOM,
173
+ name='custom_event1',
174
+ value={'key1': 'value1'},
175
+ ),
176
+ CustomEvent(
177
+ type=EventType.CUSTOM,
178
+ name='custom_event2',
179
+ value={'key2': 'value2'},
180
+ ),
181
+ ],
182
+ )
174
183
 
175
184
 
176
185
  def uuid_str() -> str:
@@ -775,7 +784,7 @@ async def test_tool_local_multiple_events() -> None:
775
784
  'type': 'TOOL_CALL_RESULT',
776
785
  'messageId': IsStr(),
777
786
  'toolCallId': tool_call_id,
778
- 'content': '[{"type":"CUSTOM","timestamp":null,"raw_event":null,"name":"custom_event1","value":{"key1":"value1"}},{"type":"CUSTOM","timestamp":null,"raw_event":null,"name":"custom_event2","value":{"key2":"value2"}}]',
787
+ 'content': 'Done',
779
788
  'role': 'tool',
780
789
  },
781
790
  {'type': 'CUSTOM', 'name': 'custom_event1', 'value': {'key1': 'value1'}},
@@ -1347,3 +1356,127 @@ async def test_callback_with_error() -> None:
1347
1356
  assert len(events) > 0
1348
1357
  assert events[0]['type'] == 'RUN_STARTED'
1349
1358
  assert any(event['type'] == 'RUN_ERROR' for event in events)
1359
+
1360
+
1361
+ async def test_messages_from_ag_ui() -> None:
1362
+ messages = [
1363
+ SystemMessage(
1364
+ id='msg_1',
1365
+ content='System message',
1366
+ ),
1367
+ DeveloperMessage(
1368
+ id='msg_2',
1369
+ content='Developer message',
1370
+ ),
1371
+ UserMessage(
1372
+ id='msg_3',
1373
+ content='User message',
1374
+ ),
1375
+ UserMessage(
1376
+ id='msg_4',
1377
+ content='User message',
1378
+ ),
1379
+ AssistantMessage(
1380
+ id='msg_5',
1381
+ content='Assistant message',
1382
+ ),
1383
+ AssistantMessage(
1384
+ id='msg_6',
1385
+ tool_calls=[
1386
+ ToolCall(
1387
+ id='tool_call_1',
1388
+ function=FunctionCall(
1389
+ name='tool_call_1',
1390
+ arguments='{}',
1391
+ ),
1392
+ ),
1393
+ ],
1394
+ ),
1395
+ AssistantMessage(
1396
+ id='msg_7',
1397
+ tool_calls=[
1398
+ ToolCall(
1399
+ id='tool_call_2',
1400
+ function=FunctionCall(
1401
+ name='tool_call_2',
1402
+ arguments='{}',
1403
+ ),
1404
+ ),
1405
+ ],
1406
+ ),
1407
+ ToolMessage(
1408
+ id='msg_8',
1409
+ content='Tool message',
1410
+ tool_call_id='tool_call_1',
1411
+ ),
1412
+ ToolMessage(
1413
+ id='msg_9',
1414
+ content='Tool message',
1415
+ tool_call_id='tool_call_2',
1416
+ ),
1417
+ UserMessage(
1418
+ id='msg_10',
1419
+ content='User message',
1420
+ ),
1421
+ AssistantMessage(
1422
+ id='msg_11',
1423
+ content='Assistant message',
1424
+ ),
1425
+ ]
1426
+
1427
+ assert _messages_from_ag_ui(messages) == snapshot(
1428
+ [
1429
+ ModelRequest(
1430
+ parts=[
1431
+ SystemPromptPart(
1432
+ content='System message',
1433
+ timestamp=IsDatetime(),
1434
+ ),
1435
+ SystemPromptPart(
1436
+ content='Developer message',
1437
+ timestamp=IsDatetime(),
1438
+ ),
1439
+ UserPromptPart(
1440
+ content='User message',
1441
+ timestamp=IsDatetime(),
1442
+ ),
1443
+ UserPromptPart(
1444
+ content='User message',
1445
+ timestamp=IsDatetime(),
1446
+ ),
1447
+ ]
1448
+ ),
1449
+ ModelResponse(
1450
+ parts=[
1451
+ TextPart(content='Assistant message'),
1452
+ ToolCallPart(tool_name='tool_call_1', args='{}', tool_call_id='tool_call_1'),
1453
+ ToolCallPart(tool_name='tool_call_2', args='{}', tool_call_id='tool_call_2'),
1454
+ ],
1455
+ timestamp=IsDatetime(),
1456
+ ),
1457
+ ModelRequest(
1458
+ parts=[
1459
+ ToolReturnPart(
1460
+ tool_name='tool_call_1',
1461
+ content='Tool message',
1462
+ tool_call_id='tool_call_1',
1463
+ timestamp=IsDatetime(),
1464
+ ),
1465
+ ToolReturnPart(
1466
+ tool_name='tool_call_2',
1467
+ content='Tool message',
1468
+ tool_call_id='tool_call_2',
1469
+ timestamp=IsDatetime(),
1470
+ ),
1471
+ UserPromptPart(
1472
+ content='User message',
1473
+ timestamp=IsDatetime(),
1474
+ ),
1475
+ ]
1476
+ ),
1477
+ ModelResponse(
1478
+ parts=[TextPart(content='Assistant message')],
1479
+ timestamp=IsDatetime(),
1480
+ ),
1481
+ ]
1482
+ )