pydantic-ai 0.7.5__tar.gz → 0.7.6__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 (397) hide show
  1. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/PKG-INFO +3 -3
  2. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/conftest.py +7 -2
  3. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/json_body_serializer.py +1 -0
  4. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +65 -0
  5. pydantic_ai-0.7.6/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +69 -0
  6. pydantic_ai-0.7.6/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +70 -0
  7. pydantic_ai-0.7.6/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +189 -0
  8. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_deepseek.py +3 -3
  9. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model.py +8 -8
  10. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model_names.py +26 -2
  11. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_openai.py +111 -72
  12. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_openai_responses.py +3 -3
  13. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_azure.py +4 -4
  14. pydantic_ai-0.7.6/tests/providers/test_cerebras.py +86 -0
  15. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_deepseek.py +2 -2
  16. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_grok.py +2 -2
  17. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_heroku.py +3 -3
  18. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_moonshotai.py +2 -2
  19. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_openrouter.py +2 -2
  20. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_cli.py +3 -2
  21. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_examples.py +5 -4
  22. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_live.py +4 -4
  23. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_logfire.py +217 -113
  24. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_mcp.py +3 -3
  25. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_temporal.py +2 -2
  26. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_tenacity.py +121 -27
  27. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/.gitignore +0 -0
  28. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/LICENSE +0 -0
  29. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/Makefile +0 -0
  30. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/README.md +0 -0
  31. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/pyproject.toml +0 -0
  32. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/__init__.py +0 -0
  33. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/assets/dummy.pdf +0 -0
  34. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/assets/kiwi.png +0 -0
  35. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/assets/marcelo.mp3 +0 -0
  36. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/assets/product_name.txt +0 -0
  37. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/assets/small_video.mp4 +0 -0
  38. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
  39. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  40. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  41. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
  42. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  43. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  44. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  45. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  46. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
  47. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  48. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  49. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  50. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  51. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
  52. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  53. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  54. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  55. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  56. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  57. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  58. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  59. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  60. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
  61. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
  62. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
  63. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
  64. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
  65. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
  66. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
  67. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
  68. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
  69. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
  70. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
  71. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
  72. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
  73. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
  74. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
  75. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/__init__.py +0 -0
  76. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_dataset.py +0 -0
  77. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_evaluator_base.py +0 -0
  78. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_evaluator_common.py +0 -0
  79. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_evaluator_context.py +0 -0
  80. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_evaluator_spec.py +0 -0
  81. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_evaluators.py +0 -0
  82. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_llm_as_a_judge.py +0 -0
  83. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_otel.py +0 -0
  84. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_render_numbers.py +0 -0
  85. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_reporting.py +0 -0
  86. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_reports.py +0 -0
  87. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/test_utils.py +0 -0
  88. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/evals/utils.py +0 -0
  89. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/example_modules/README.md +0 -0
  90. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/example_modules/bank_database.py +0 -0
  91. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/example_modules/fake_database.py +0 -0
  92. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/example_modules/mcp_server.py +0 -0
  93. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/example_modules/weather_service.py +0 -0
  94. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/ext/__init__.py +0 -0
  95. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/ext/test_langchain.py +0 -0
  96. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/__init__.py +0 -0
  97. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_file_persistence.py +0 -0
  98. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_graph.py +0 -0
  99. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_mermaid.py +0 -0
  100. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_persistence.py +0 -0
  101. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_state.py +0 -0
  102. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/graph/test_utils.py +0 -0
  103. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/import_examples.py +0 -0
  104. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/mcp_server.py +0 -0
  105. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/__init__.py +0 -0
  106. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
  107. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  108. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  109. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
  110. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
  111. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
  112. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
  113. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
  114. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
  115. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
  116. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
  117. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
  118. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
  119. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
  120. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  121. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  122. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  123. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  124. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  125. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  126. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  127. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  128. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
  129. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  130. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  131. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  132. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  133. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  134. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  135. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  136. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  137. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  138. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  139. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  140. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
  141. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
  142. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
  143. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  144. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  145. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  146. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  147. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  148. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  149. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  150. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  151. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  152. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  153. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
  154. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  155. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
  156. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
  157. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  158. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
  159. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  160. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  161. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  162. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  163. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  164. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  165. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  166. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
  167. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
  168. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
  169. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
  170. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
  171. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
  172. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
  173. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  174. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
  175. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  176. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  177. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  178. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  179. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  180. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  181. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  182. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  183. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  184. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  185. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  186. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  187. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  188. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  189. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  190. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  191. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  192. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  193. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  194. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
  195. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  196. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
  197. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  198. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  199. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  200. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  201. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  202. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  203. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  204. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
  205. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  206. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  207. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
  208. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  209. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
  210. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  211. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  212. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  213. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
  214. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
  215. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  216. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
  217. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
  218. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
  219. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  220. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  221. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  222. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
  223. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  224. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
  225. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
  226. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
  227. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
  228. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
  229. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
  230. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
  231. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
  232. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
  233. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  234. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
  235. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  236. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  237. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  238. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  239. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  240. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  241. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  242. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  243. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  244. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  245. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
  246. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  247. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  248. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
  249. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
  250. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
  251. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  252. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  253. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  254. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
  255. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
  256. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
  257. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
  258. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
  259. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
  260. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
  261. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
  262. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
  263. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
  264. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
  265. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
  266. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  267. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  268. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
  269. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  270. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  271. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  272. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
  273. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  274. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  275. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  276. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  277. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  278. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
  279. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  280. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  281. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  282. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  283. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  284. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  285. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  286. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
  287. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
  288. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
  289. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  290. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
  291. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
  292. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  293. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  294. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
  295. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
  296. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
  297. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
  298. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
  299. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
  300. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
  301. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
  302. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  303. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
  304. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
  305. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  306. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
  307. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  308. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  309. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  310. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
  311. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
  312. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml +0 -0
  313. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml +0 -0
  314. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  315. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  316. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  317. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  318. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  319. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  320. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  321. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  322. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  323. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
  324. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
  325. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
  326. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
  327. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  328. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  329. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  330. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  331. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  332. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  333. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
  334. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
  335. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
  336. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  337. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
  338. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
  339. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/mock_async_stream.py +0 -0
  340. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_anthropic.py +0 -0
  341. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_bedrock.py +0 -0
  342. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_cohere.py +0 -0
  343. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_download_item.py +0 -0
  344. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_fallback.py +0 -0
  345. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_gemini.py +0 -0
  346. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_gemini_vertex.py +0 -0
  347. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_google.py +0 -0
  348. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_groq.py +0 -0
  349. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_huggingface.py +0 -0
  350. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_instrumented.py +0 -0
  351. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_mcp_sampling.py +0 -0
  352. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_mistral.py +0 -0
  353. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model_function.py +0 -0
  354. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model_request_parameters.py +0 -0
  355. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model_settings.py +0 -0
  356. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/models/test_model_test.py +0 -0
  357. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/parts_from_messages.py +0 -0
  358. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/__init__.py +0 -0
  359. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  360. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  361. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  362. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  363. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_anthropic.py +0 -0
  364. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_bedrock.py +0 -0
  365. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_cohere.py +0 -0
  366. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_fireworks.py +0 -0
  367. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_github.py +0 -0
  368. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_google_gla.py +0 -0
  369. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_google_vertex.py +0 -0
  370. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_groq.py +0 -0
  371. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_huggingface.py +0 -0
  372. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_mistral.py +0 -0
  373. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_ollama.py +0 -0
  374. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_openai.py +0 -0
  375. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_provider_names.py +0 -0
  376. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_together.py +0 -0
  377. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/providers/test_vercel.py +0 -0
  378. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_a2a.py +0 -0
  379. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_ag_ui.py +0 -0
  380. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_agent.py +0 -0
  381. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_builtin_tools.py +0 -0
  382. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_deps.py +0 -0
  383. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_direct.py +0 -0
  384. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_format_as_xml.py +0 -0
  385. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_history_processor.py +0 -0
  386. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_json_body_serializer.py +0 -0
  387. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_messages.py +0 -0
  388. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_parts_manager.py +0 -0
  389. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_settings.py +0 -0
  390. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_streaming.py +0 -0
  391. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_thinking_part.py +0 -0
  392. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_tools.py +0 -0
  393. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_toolsets.py +0 -0
  394. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_usage_limits.py +0 -0
  395. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/test_utils.py +0 -0
  396. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/typed_agent.py +0 -0
  397. {pydantic_ai-0.7.5 → pydantic_ai-0.7.6}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.7.5
3
+ Version: 0.7.6
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs
5
5
  Project-URL: Homepage, https://ai.pydantic.dev
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai
@@ -28,11 +28,11 @@ Classifier: Topic :: Internet
28
28
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Requires-Python: >=3.9
31
- Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,temporal,vertexai]==0.7.5
31
+ Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,temporal,vertexai]==0.7.6
32
32
  Provides-Extra: a2a
33
33
  Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
34
34
  Provides-Extra: examples
35
- Requires-Dist: pydantic-ai-examples==0.7.5; extra == 'examples'
35
+ Requires-Dist: pydantic-ai-examples==0.7.6; extra == 'examples'
36
36
  Provides-Extra: logfire
37
37
  Requires-Dist: logfire>=3.14.1; extra == 'logfire'
38
38
  Description-Content-Type: text/markdown
@@ -390,6 +390,11 @@ def heroku_inference_key() -> str:
390
390
  return os.getenv('HEROKU_INFERENCE_KEY', 'mock-api-key')
391
391
 
392
392
 
393
+ @pytest.fixture(scope='session')
394
+ def cerebras_api_key() -> str:
395
+ return os.getenv('CEREBRAS_API_KEY', 'mock-api-key')
396
+
397
+
393
398
  @pytest.fixture(scope='session')
394
399
  def bedrock_provider():
395
400
  try:
@@ -476,10 +481,10 @@ def model(
476
481
 
477
482
  return TestModel()
478
483
  elif request.param == 'openai':
479
- from pydantic_ai.models.openai import OpenAIModel
484
+ from pydantic_ai.models.openai import OpenAIChatModel
480
485
  from pydantic_ai.providers.openai import OpenAIProvider
481
486
 
482
- return OpenAIModel('o3-mini', provider=OpenAIProvider(api_key=openai_api_key))
487
+ return OpenAIChatModel('o3-mini', provider=OpenAIProvider(api_key=openai_api_key))
483
488
  elif request.param == 'anthropic':
484
489
  from pydantic_ai.models.anthropic import AnthropicModel
485
490
  from pydantic_ai.providers.anthropic import AnthropicProvider
@@ -69,6 +69,7 @@ def serialize(cassette_dict: Any): # pragma: lax no cover
69
69
  # Responses will have the body under a field called 'string'
70
70
  body = body.get('string')
71
71
  if body is not None:
72
+ # NOTE(Marcelo): This doesn't handle gzip compression.
72
73
  data['parsed_body'] = json.loads(body) # pyright: ignore[reportUnknownArgumentType]
73
74
  if 'access_token' in data['parsed_body']:
74
75
  data['parsed_body']['access_token'] = 'scrubbed'
@@ -83,4 +83,69 @@ interactions:
83
83
  status:
84
84
  code: 200
85
85
  message: OK
86
+ - request:
87
+ body: ''
88
+ headers:
89
+ accept:
90
+ - application/json
91
+ connection:
92
+ - keep-alive
93
+ host:
94
+ - api.cerebras.ai
95
+ method: GET
96
+ uri: https://api.cerebras.ai/v1/models
97
+ response:
98
+ headers:
99
+ alt-svc:
100
+ - h3=":443"; ma=86400
101
+ content-length:
102
+ - '762'
103
+ content-type:
104
+ - application/json
105
+ referrer-policy:
106
+ - strict-origin-when-cross-origin
107
+ strict-transport-security:
108
+ - max-age=3600; includeSubDomains
109
+ parsed_body:
110
+ data:
111
+ - created: 0
112
+ id: llama-4-maverick-17b-128e-instruct
113
+ object: model
114
+ owned_by: Cerebras
115
+ - created: 0
116
+ id: qwen-3-32b
117
+ object: model
118
+ owned_by: Cerebras
119
+ - created: 0
120
+ id: qwen-3-235b-a22b-instruct-2507
121
+ object: model
122
+ owned_by: Cerebras
123
+ - created: 0
124
+ id: llama-4-scout-17b-16e-instruct
125
+ object: model
126
+ owned_by: Cerebras
127
+ - created: 0
128
+ id: gpt-oss-120b
129
+ object: model
130
+ owned_by: Cerebras
131
+ - created: 0
132
+ id: qwen-3-coder-480b
133
+ object: model
134
+ owned_by: Cerebras
135
+ - created: 0
136
+ id: llama-3.3-70b
137
+ object: model
138
+ owned_by: Cerebras
139
+ - created: 0
140
+ id: llama3.1-8b
141
+ object: model
142
+ owned_by: Cerebras
143
+ - created: 0
144
+ id: qwen-3-235b-a22b-thinking-2507
145
+ object: model
146
+ owned_by: Cerebras
147
+ object: list
148
+ status:
149
+ code: 200
150
+ message: OK
86
151
  version: 1
@@ -0,0 +1,69 @@
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
+ - '111'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.cerebras.ai
16
+ method: POST
17
+ parsed_body:
18
+ messages:
19
+ - content: What is the capital of France?
20
+ role: user
21
+ model: llama3.3-70b
22
+ stream: false
23
+ uri: https://api.cerebras.ai/v1/chat/completions
24
+ response:
25
+ headers:
26
+ alt-svc:
27
+ - h3=":443"; ma=86400
28
+ connection:
29
+ - keep-alive
30
+ content-length:
31
+ - '558'
32
+ content-type:
33
+ - application/json
34
+ inference-id:
35
+ - chatcmpl-175bff47-ce89-4fad-bead-62a14f787c49
36
+ referrer-policy:
37
+ - strict-origin-when-cross-origin
38
+ strict-transport-security:
39
+ - max-age=3600; includeSubDomains
40
+ transfer-encoding:
41
+ - chunked
42
+ parsed_body:
43
+ choices:
44
+ - finish_reason: stop
45
+ index: 0
46
+ message:
47
+ content: The capital of France is Paris.
48
+ role: assistant
49
+ created: 1756198141
50
+ id: chatcmpl-175bff47-ce89-4fad-bead-62a14f787c49
51
+ model: llama-3.3-70b
52
+ object: chat.completion
53
+ system_fingerprint: fp_b6a51bb1d26f03ea3772
54
+ time_info:
55
+ completion_time: 0.003633212
56
+ created: 1756198141
57
+ prompt_time: 0.002251218
58
+ queue_time: 0.000199151
59
+ total_time: 0.007346153259277344
60
+ usage:
61
+ completion_tokens: 8
62
+ prompt_tokens: 42
63
+ prompt_tokens_details:
64
+ cached_tokens: 0
65
+ total_tokens: 50
66
+ status:
67
+ code: 200
68
+ message: OK
69
+ version: 1
@@ -0,0 +1,70 @@
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
+ - '111'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.cerebras.ai
16
+ method: POST
17
+ parsed_body:
18
+ messages:
19
+ - content: What is the capital of France?
20
+ role: user
21
+ model: gpt-oss-120b
22
+ stream: false
23
+ uri: https://api.cerebras.ai/v1/chat/completions
24
+ response:
25
+ headers:
26
+ alt-svc:
27
+ - h3=":443"; ma=86400
28
+ connection:
29
+ - keep-alive
30
+ content-length:
31
+ - '661'
32
+ content-type:
33
+ - application/json
34
+ inference-id:
35
+ - chatcmpl-bc3bbd04-e8df-4ab6-bd82-9fb33726cb93
36
+ referrer-policy:
37
+ - strict-origin-when-cross-origin
38
+ strict-transport-security:
39
+ - max-age=3600; includeSubDomains
40
+ transfer-encoding:
41
+ - chunked
42
+ parsed_body:
43
+ choices:
44
+ - finish_reason: stop
45
+ index: 0
46
+ message:
47
+ content: The capital of France is **Paris**.
48
+ reasoning: 'User asks simple question: capital of France. Answer: Paris. Provide concise answer.'
49
+ role: assistant
50
+ created: 1756199010
51
+ id: chatcmpl-bc3bbd04-e8df-4ab6-bd82-9fb33726cb93
52
+ model: gpt-oss-120b
53
+ object: chat.completion
54
+ system_fingerprint: fp_a5fe16f102a24cf8caf1
55
+ time_info:
56
+ completion_time: 0.026440676
57
+ created: 1756199010
58
+ prompt_time: 0.002999482
59
+ queue_time: 0.000899766
60
+ total_time: 0.03260970115661621
61
+ usage:
62
+ completion_tokens: 36
63
+ prompt_tokens: 74
64
+ prompt_tokens_details:
65
+ cached_tokens: 0
66
+ total_tokens: 110
67
+ status:
68
+ code: 200
69
+ message: OK
70
+ version: 1
@@ -0,0 +1,189 @@
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
+ - '414'
12
+ content-type:
13
+ - application/json
14
+ cookie:
15
+ - __cf_bm=hqG7YTrLAdrCNKQU34H3qhIKxESTvFsG9X7OjEzKuDk-1756198142-1.0.1.1-WG8.rT3zC66xxHN6c33AcERCdH0FDum2a7djbEu85gy9rEiq9nTHQVY8g5BAZ_DmviuVxhphMwTsxDclYqQCobIlgurA9g.prg5M_i9PZyM
16
+ host:
17
+ - api.cerebras.ai
18
+ method: POST
19
+ parsed_body:
20
+ messages:
21
+ - content: What is the capital of France?
22
+ role: user
23
+ model: qwen-3-coder-480b
24
+ stream: false
25
+ tool_choice: auto
26
+ tools:
27
+ - function:
28
+ description: The final response which ends this conversation
29
+ name: final_result
30
+ parameters:
31
+ properties:
32
+ city:
33
+ type: string
34
+ country:
35
+ type: string
36
+ required:
37
+ - city
38
+ - country
39
+ title: Location
40
+ type: object
41
+ type: function
42
+ uri: https://api.cerebras.ai/v1/chat/completions
43
+ response:
44
+ headers:
45
+ alt-svc:
46
+ - h3=":443"; ma=86400
47
+ connection:
48
+ - keep-alive
49
+ content-length:
50
+ - '645'
51
+ content-type:
52
+ - application/json
53
+ inference-id:
54
+ - chatcmpl-65763e70-ba85-41a3-a758-4dc3fcb73c9a
55
+ referrer-policy:
56
+ - strict-origin-when-cross-origin
57
+ strict-transport-security:
58
+ - max-age=3600; includeSubDomains
59
+ transfer-encoding:
60
+ - chunked
61
+ parsed_body:
62
+ choices:
63
+ - finish_reason: stop
64
+ index: 0
65
+ message:
66
+ content: The capital of France is Paris. If you need more information about Paris or any other details, feel free
67
+ to ask!
68
+ role: assistant
69
+ created: 1756198142
70
+ id: chatcmpl-65763e70-ba85-41a3-a758-4dc3fcb73c9a
71
+ model: qwen-3-coder-480b
72
+ object: chat.completion
73
+ system_fingerprint: fp_4405be376d055dc5bff7
74
+ time_info:
75
+ completion_time: 0.045860486
76
+ created: 1756198142
77
+ prompt_time: 0.011004894
78
+ queue_time: 0.001344637
79
+ total_time: 0.05971097946166992
80
+ usage:
81
+ completion_tokens: 25
82
+ prompt_tokens: 304
83
+ prompt_tokens_details:
84
+ cached_tokens: 0
85
+ total_tokens: 329
86
+ status:
87
+ code: 200
88
+ message: OK
89
+ - request:
90
+ headers:
91
+ accept:
92
+ - application/json
93
+ accept-encoding:
94
+ - gzip, deflate
95
+ connection:
96
+ - keep-alive
97
+ content-length:
98
+ - '727'
99
+ content-type:
100
+ - application/json
101
+ cookie:
102
+ - __cf_bm=hqG7YTrLAdrCNKQU34H3qhIKxESTvFsG9X7OjEzKuDk-1756198142-1.0.1.1-WG8.rT3zC66xxHN6c33AcERCdH0FDum2a7djbEu85gy9rEiq9nTHQVY8g5BAZ_DmviuVxhphMwTsxDclYqQCobIlgurA9g.prg5M_i9PZyM
103
+ host:
104
+ - api.cerebras.ai
105
+ method: POST
106
+ parsed_body:
107
+ messages:
108
+ - content: What is the capital of France?
109
+ role: user
110
+ - content: The capital of France is Paris. If you need more information about Paris or any other details, feel free
111
+ to ask!
112
+ role: assistant
113
+ - content: |-
114
+ Validation feedback:
115
+ Plain text responses are not permitted, please include your response in a tool call
116
+
117
+ Fix the errors and try again.
118
+ role: user
119
+ model: qwen-3-coder-480b
120
+ stream: false
121
+ tool_choice: auto
122
+ tools:
123
+ - function:
124
+ description: The final response which ends this conversation
125
+ name: final_result
126
+ parameters:
127
+ properties:
128
+ city:
129
+ type: string
130
+ country:
131
+ type: string
132
+ required:
133
+ - city
134
+ - country
135
+ title: Location
136
+ type: object
137
+ type: function
138
+ uri: https://api.cerebras.ai/v1/chat/completions
139
+ response:
140
+ headers:
141
+ alt-svc:
142
+ - h3=":443"; ma=86400
143
+ connection:
144
+ - keep-alive
145
+ content-length:
146
+ - '672'
147
+ content-type:
148
+ - application/json
149
+ inference-id:
150
+ - chatcmpl-6659125c-6d06-402c-be3b-4640aa64ffa2
151
+ referrer-policy:
152
+ - strict-origin-when-cross-origin
153
+ strict-transport-security:
154
+ - max-age=3600; includeSubDomains
155
+ transfer-encoding:
156
+ - chunked
157
+ parsed_body:
158
+ choices:
159
+ - finish_reason: tool_calls
160
+ index: 0
161
+ message:
162
+ role: assistant
163
+ tool_calls:
164
+ - function:
165
+ arguments: '{"city": "Paris", "country": "France"}'
166
+ name: final_result
167
+ id: b8847f144
168
+ type: function
169
+ created: 1756198143
170
+ id: chatcmpl-6659125c-6d06-402c-be3b-4640aa64ffa2
171
+ model: qwen-3-coder-480b
172
+ object: chat.completion
173
+ system_fingerprint: fp_4405be376d055dc5bff7
174
+ time_info:
175
+ completion_time: 0.103362557
176
+ created: 1756198143
177
+ prompt_time: 0.22219986
178
+ queue_time: 0.346436935
179
+ total_time: 0.6736249923706055
180
+ usage:
181
+ completion_tokens: 33
182
+ prompt_tokens: 364
183
+ prompt_tokens_details:
184
+ cached_tokens: 0
185
+ total_tokens: 397
186
+ status:
187
+ code: 200
188
+ message: OK
189
+ version: 1
@@ -24,7 +24,7 @@ from pydantic_ai.usage import RequestUsage
24
24
  from ..conftest import IsDatetime, IsStr, try_import
25
25
 
26
26
  with try_import() as imports_successful:
27
- from pydantic_ai.models.openai import OpenAIModel
27
+ from pydantic_ai.models.openai import OpenAIChatModel
28
28
  from pydantic_ai.providers.deepseek import DeepSeekProvider
29
29
 
30
30
 
@@ -36,7 +36,7 @@ pytestmark = [
36
36
 
37
37
 
38
38
  async def test_deepseek_model_thinking_part(allow_model_requests: None, deepseek_api_key: str):
39
- deepseek_model = OpenAIModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
39
+ deepseek_model = OpenAIChatModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
40
40
  agent = Agent(model=deepseek_model)
41
41
  result = await agent.run('How do I cross the street?')
42
42
  assert result.all_messages() == snapshot(
@@ -63,7 +63,7 @@ async def test_deepseek_model_thinking_part(allow_model_requests: None, deepseek
63
63
 
64
64
 
65
65
  async def test_deepseek_model_thinking_stream(allow_model_requests: None, deepseek_api_key: str):
66
- deepseek_model = OpenAIModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
66
+ deepseek_model = OpenAIChatModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
67
67
  agent = Agent(model=deepseek_model)
68
68
 
69
69
  event_parts: list[Any] = []
@@ -10,10 +10,10 @@ from ..conftest import TestEnv
10
10
  # TODO(Marcelo): We need to add Vertex AI to the test cases.
11
11
 
12
12
  TEST_CASES = [
13
- ('OPENAI_API_KEY', 'openai:gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIModel'),
14
- ('OPENAI_API_KEY', 'gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIModel'),
15
- ('OPENAI_API_KEY', 'o1', 'o1', 'openai', 'openai', 'OpenAIModel'),
16
- ('AZURE_OPENAI_API_KEY', 'azure:gpt-3.5-turbo', 'gpt-3.5-turbo', 'azure', 'azure', 'OpenAIModel'),
13
+ ('OPENAI_API_KEY', 'openai:gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIChatModel'),
14
+ ('OPENAI_API_KEY', 'gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIChatModel'),
15
+ ('OPENAI_API_KEY', 'o1', 'o1', 'openai', 'openai', 'OpenAIChatModel'),
16
+ ('AZURE_OPENAI_API_KEY', 'azure:gpt-3.5-turbo', 'gpt-3.5-turbo', 'azure', 'azure', 'OpenAIChatModel'),
17
17
  ('GEMINI_API_KEY', 'google-gla:gemini-1.5-flash', 'gemini-1.5-flash', 'google-gla', 'google', 'GoogleModel'),
18
18
  ('GEMINI_API_KEY', 'gemini-1.5-flash', 'gemini-1.5-flash', 'google-gla', 'google', 'GoogleModel'),
19
19
  (
@@ -70,7 +70,7 @@ TEST_CASES = [
70
70
  'xai/grok-3-mini',
71
71
  'github',
72
72
  'github',
73
- 'OpenAIModel',
73
+ 'OpenAIChatModel',
74
74
  ),
75
75
  (
76
76
  'MOONSHOTAI_API_KEY',
@@ -78,7 +78,7 @@ TEST_CASES = [
78
78
  'kimi-k2-0711-preview',
79
79
  'moonshotai',
80
80
  'moonshotai',
81
- 'OpenAIModel',
81
+ 'OpenAIChatModel',
82
82
  ),
83
83
  (
84
84
  'GROK_API_KEY',
@@ -86,7 +86,7 @@ TEST_CASES = [
86
86
  'grok-3',
87
87
  'grok',
88
88
  'grok',
89
- 'OpenAIModel',
89
+ 'OpenAIChatModel',
90
90
  ),
91
91
  (
92
92
  'GROK_API_KEY',
@@ -94,7 +94,7 @@ TEST_CASES = [
94
94
  'grok-4',
95
95
  'grok',
96
96
  'grok',
97
- 'OpenAIModel',
97
+ 'OpenAIChatModel',
98
98
  ),
99
99
  (
100
100
  'OPENAI_API_KEY',
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  from collections.abc import Iterator
3
3
  from functools import partial
4
- from typing import Any
4
+ from typing import Any, Literal
5
5
 
6
6
  import httpx
7
7
  import pytest
@@ -43,7 +43,7 @@ def vcr_config(): # pragma: lax no cover
43
43
  return {
44
44
  'record_mode': 'rewrite',
45
45
  'filter_headers': ['accept-encoding'],
46
- 'before_record_response': partial(modify_response, filter_headers=['cache-control']),
46
+ 'before_record_response': partial(modify_response, filter_headers=['cache-control', 'connection']),
47
47
  }
48
48
  return {'record_mode': 'none'}
49
49
 
@@ -74,6 +74,7 @@ def test_known_model_names():
74
74
  deepseek_names = ['deepseek:deepseek-chat', 'deepseek:deepseek-reasoner']
75
75
  huggingface_names = [f'huggingface:{n}' for n in get_model_names(HuggingFaceModelName)]
76
76
  heroku_names = get_heroku_model_names()
77
+ cerebras_names = get_cerebras_model_names()
77
78
  extra_names = ['test']
78
79
 
79
80
  generated_names = sorted(
@@ -89,6 +90,7 @@ def test_known_model_names():
89
90
  + deepseek_names
90
91
  + huggingface_names
91
92
  + heroku_names
93
+ + cerebras_names
92
94
  + extra_names
93
95
  )
94
96
 
@@ -115,3 +117,25 @@ def get_heroku_model_names():
115
117
  if 'text-to-text' in model['type']:
116
118
  models.append(f'heroku:{model["model_id"]}')
117
119
  return sorted(models)
120
+
121
+
122
+ class CerebrasModel(TypedDict):
123
+ created: int
124
+ id: str
125
+ object: Literal['model']
126
+ owned_by: Literal['Cerebras']
127
+
128
+
129
+ def get_cerebras_model_names():
130
+ api_key = os.getenv('CEREBRAS_API_KEY', 'testing')
131
+
132
+ response = httpx.get(
133
+ 'https://api.cerebras.ai/v1/models',
134
+ headers={'Authorization': f'Bearer {api_key}', 'Accept': 'application/json', 'Accept-Encoding': 'identity'},
135
+ )
136
+
137
+ if response.status_code != 200:
138
+ pytest.skip(f'Cerebras returned status code {response.status_code}') # pragma: lax no cover
139
+
140
+ cerebras_models: list[CerebrasModel] = response.json()['data']
141
+ return sorted(f'cerebras:{model["id"]}' for model in cerebras_models)