pydantic-ai 0.2.15__tar.gz → 0.2.16__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 (233) hide show
  1. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/PKG-INFO +3 -3
  2. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +7 -7
  3. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +10 -10
  4. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +11 -11
  5. pydantic_ai-0.2.16/tests/cassettes/test_settings/test_stop_settings[google].yaml +65 -0
  6. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +16 -16
  7. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +6 -14
  8. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +11 -12
  9. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/conftest.py +10 -0
  10. pydantic_ai-0.2.16/tests/ext/test_langchain.py +244 -0
  11. pydantic_ai-0.2.16/tests/models/cassettes/test_model_names/test_known_model_names.yaml +66 -0
  12. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_gemini_vertexai.py +1 -1
  13. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_google.py +1 -1
  14. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_model_names.py +30 -1
  15. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_model_test.py +33 -0
  16. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_openai.py +17 -0
  17. pydantic_ai-0.2.16/tests/providers/__init__.py +0 -0
  18. pydantic_ai-0.2.16/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +55 -0
  19. pydantic_ai-0.2.16/tests/providers/test_heroku.py +73 -0
  20. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_provider_names.py +2 -0
  21. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_cli.py +1 -0
  22. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_live.py +1 -1
  23. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_settings.py +6 -2
  24. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_tools.py +71 -0
  25. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/.gitignore +0 -0
  26. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/LICENSE +0 -0
  27. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/Makefile +0 -0
  28. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/README.md +0 -0
  29. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/pyproject.toml +0 -0
  30. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/__init__.py +0 -0
  31. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/assets/dummy.pdf +0 -0
  32. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/assets/kiwi.png +0 -0
  33. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/assets/marcelo.mp3 +0 -0
  34. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/assets/small_video.mp4 +0 -0
  35. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  36. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  37. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  38. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  39. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  40. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  41. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  42. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  43. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  44. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  45. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/__init__.py +0 -0
  46. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_dataset.py +0 -0
  47. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_evaluator_base.py +0 -0
  48. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_evaluator_common.py +0 -0
  49. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_evaluator_context.py +0 -0
  50. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_evaluator_spec.py +0 -0
  51. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_evaluators.py +0 -0
  52. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_llm_as_a_judge.py +0 -0
  53. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_otel.py +0 -0
  54. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_render_numbers.py +0 -0
  55. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_reporting.py +0 -0
  56. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_reports.py +0 -0
  57. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/test_utils.py +0 -0
  58. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/evals/utils.py +0 -0
  59. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/example_modules/README.md +0 -0
  60. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/example_modules/bank_database.py +0 -0
  61. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/example_modules/fake_database.py +0 -0
  62. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/example_modules/weather_service.py +0 -0
  63. {pydantic_ai-0.2.15/tests/fasta2a → pydantic_ai-0.2.16/tests/ext}/__init__.py +0 -0
  64. {pydantic_ai-0.2.15/tests/graph → pydantic_ai-0.2.16/tests/fasta2a}/__init__.py +0 -0
  65. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/fasta2a/test_applications.py +0 -0
  66. {pydantic_ai-0.2.15/tests/models → pydantic_ai-0.2.16/tests/graph}/__init__.py +0 -0
  67. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_file_persistence.py +0 -0
  68. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_graph.py +0 -0
  69. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_mermaid.py +0 -0
  70. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_persistence.py +0 -0
  71. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_state.py +0 -0
  72. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/graph/test_utils.py +0 -0
  73. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/import_examples.py +0 -0
  74. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/json_body_serializer.py +0 -0
  75. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/mcp_server.py +0 -0
  76. {pydantic_ai-0.2.15/tests/providers → pydantic_ai-0.2.16/tests/models}/__init__.py +0 -0
  77. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  78. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  79. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  80. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  81. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  82. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  83. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  84. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  85. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  86. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  87. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  88. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  89. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  90. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  91. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  92. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  93. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  94. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  95. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  96. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  97. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  98. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
  99. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  100. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  101. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  102. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  103. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  104. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  105. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  106. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  107. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  108. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  109. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  110. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  111. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  112. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  113. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  114. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  115. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  116. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  117. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  118. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  119. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  120. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  121. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  122. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_gemini_vertexai/test_labels.yaml +0 -0
  123. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  124. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  125. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  126. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  127. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  128. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  129. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  130. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  131. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  132. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  133. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  134. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  135. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_structured_response.yaml +0 -0
  136. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  137. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  138. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  139. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  140. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  141. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  142. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  143. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  144. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  145. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  146. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  147. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  148. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  149. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  150. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  151. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  152. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  153. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  154. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  155. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  156. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  157. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  158. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  159. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  160. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  161. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  162. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  163. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  164. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  165. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  166. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  167. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  168. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  169. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  170. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  171. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  172. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  173. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  174. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  175. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  176. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  177. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  178. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  179. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  180. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  181. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  182. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  183. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  184. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  185. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  186. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  187. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  188. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/mock_async_stream.py +0 -0
  189. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_anthropic.py +0 -0
  190. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_bedrock.py +0 -0
  191. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_cohere.py +0 -0
  192. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_fallback.py +0 -0
  193. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_gemini.py +0 -0
  194. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_groq.py +0 -0
  195. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_instrumented.py +0 -0
  196. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_mistral.py +0 -0
  197. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_model.py +0 -0
  198. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_model_function.py +0 -0
  199. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_model_request_parameters.py +0 -0
  200. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/models/test_openai_responses.py +0 -0
  201. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  202. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  203. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  204. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_anthropic.py +0 -0
  205. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_azure.py +0 -0
  206. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_bedrock.py +0 -0
  207. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_cohere.py +0 -0
  208. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_deepseek.py +0 -0
  209. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_fireworks.py +0 -0
  210. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_google_gla.py +0 -0
  211. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_google_vertex.py +0 -0
  212. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_grok.py +0 -0
  213. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_groq.py +0 -0
  214. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_mistral.py +0 -0
  215. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_openai.py +0 -0
  216. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_openrouter.py +0 -0
  217. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/providers/test_together.py +0 -0
  218. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_a2a.py +0 -0
  219. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_agent.py +0 -0
  220. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_deps.py +0 -0
  221. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_direct.py +0 -0
  222. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_examples.py +0 -0
  223. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_format_as_xml.py +0 -0
  224. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_json_body_serializer.py +0 -0
  225. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_logfire.py +0 -0
  226. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_mcp.py +0 -0
  227. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_messages.py +0 -0
  228. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_parts_manager.py +0 -0
  229. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_streaming.py +0 -0
  230. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_usage_limits.py +0 -0
  231. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/test_utils.py +0 -0
  232. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/typed_agent.py +0 -0
  233. {pydantic_ai-0.2.15 → pydantic_ai-0.2.16}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs
5
5
  Project-URL: Homepage, https://ai.pydantic.dev
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai
@@ -28,9 +28,9 @@ Classifier: Topic :: Internet
28
28
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Requires-Python: >=3.9
31
- Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.2.15
31
+ Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.2.16
32
32
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.2.15; extra == 'examples'
33
+ Requires-Dist: pydantic-ai-examples==0.2.16; extra == 'examples'
34
34
  Provides-Extra: logfire
35
35
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
36
36
  Description-Content-Type: text/markdown
@@ -8,7 +8,7 @@ interactions:
8
8
  connection:
9
9
  - keep-alive
10
10
  content-length:
11
- - '193'
11
+ - '272'
12
12
  content-type:
13
13
  - application/json
14
14
  host:
@@ -18,7 +18,7 @@ interactions:
18
18
  max_tokens: 1024
19
19
  messages:
20
20
  - content:
21
- - text: What is the capital of France?
21
+ - text: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
22
22
  type: text
23
23
  role: user
24
24
  model: claude-3-5-sonnet-latest
@@ -31,7 +31,7 @@ interactions:
31
31
  connection:
32
32
  - keep-alive
33
33
  content-length:
34
- - '359'
34
+ - '356'
35
35
  content-type:
36
36
  - application/json
37
37
  strict-transport-security:
@@ -40,9 +40,9 @@ interactions:
40
40
  - chunked
41
41
  parsed_body:
42
42
  content:
43
- - text: 'The capital of France is '
43
+ - text: 'The beautiful city of '
44
44
  type: text
45
- id: msg_01SVFZqkSLhUPkAA4w6rhzFD
45
+ id: msg_01376yZQxHcw9pER2Ab2SvQb
46
46
  model: claude-3-5-sonnet-20241022
47
47
  role: assistant
48
48
  stop_reason: stop_sequence
@@ -51,8 +51,8 @@ interactions:
51
51
  usage:
52
52
  cache_creation_input_tokens: 0
53
53
  cache_read_input_tokens: 0
54
- input_tokens: 14
55
- output_tokens: 6
54
+ input_tokens: 32
55
+ output_tokens: 5
56
56
  service_tier: standard
57
57
  status:
58
58
  code: 200
@@ -1,16 +1,16 @@
1
1
  interactions:
2
2
  - request:
3
- body: '{"messages": [{"role": "user", "content": [{"text": "What is the capital of France?"}]}], "system": [], "inferenceConfig":
4
- {"stopSequences": ["Paris"]}}'
3
+ body: '{"messages": [{"role": "user", "content": [{"text": "What is the capital of France? Give me an answer that contains
4
+ the word \"Paris\", but is not the first word."}]}], "system": [], "inferenceConfig": {"stopSequences": ["Paris"]}}'
5
5
  headers:
6
6
  amz-sdk-invocation-id:
7
7
  - !!binary |
8
- YzVkZjljOTMtMDQ1Zi00NWE0LWJhY2YtMDAwMjdjYTg1NmRl
8
+ YWEyMWExMDYtNjJjMy00MmNiLTlkNjUtYTEwYzYzYTIxNGFk
9
9
  amz-sdk-request:
10
10
  - !!binary |
11
11
  YXR0ZW1wdD0x
12
12
  content-length:
13
- - '152'
13
+ - '231'
14
14
  content-type:
15
15
  - !!binary |
16
16
  YXBwbGljYXRpb24vanNvbg==
@@ -21,22 +21,22 @@ interactions:
21
21
  connection:
22
22
  - keep-alive
23
23
  content-length:
24
- - '209'
24
+ - '197'
25
25
  content-type:
26
26
  - application/json
27
27
  parsed_body:
28
28
  metrics:
29
- latencyMs: 179
29
+ latencyMs: 189
30
30
  output:
31
31
  message:
32
32
  content:
33
- - text: The capital of France is Paris
33
+ - text: The city of Paris
34
34
  role: assistant
35
35
  stopReason: end_turn
36
36
  usage:
37
- inputTokens: 7
38
- outputTokens: 6
39
- totalTokens: 13
37
+ inputTokens: 25
38
+ outputTokens: 4
39
+ totalTokens: 29
40
40
  status:
41
41
  code: 200
42
42
  message: OK
@@ -8,7 +8,7 @@ interactions:
8
8
  connection:
9
9
  - keep-alive
10
10
  content-length:
11
- - '140'
11
+ - '219'
12
12
  content-type:
13
13
  - application/json
14
14
  host:
@@ -16,7 +16,7 @@ interactions:
16
16
  method: POST
17
17
  parsed_body:
18
18
  messages:
19
- - content: What is the capital of France?
19
+ - content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
20
20
  role: user
21
21
  model: command-r-plus
22
22
  stop_sequences:
@@ -32,34 +32,34 @@ interactions:
32
32
  cache-control:
33
33
  - no-cache, no-store, no-transform, must-revalidate, private, max-age=0
34
34
  content-length:
35
- - '280'
35
+ - '297'
36
36
  content-type:
37
37
  - application/json
38
38
  expires:
39
39
  - Thu, 01 Jan 1970 00:00:00 UTC
40
40
  num_chars:
41
- - '1200'
41
+ - '521'
42
42
  num_tokens:
43
- - '12'
43
+ - '34'
44
44
  pragma:
45
45
  - no-cache
46
46
  vary:
47
47
  - Origin
48
48
  parsed_body:
49
49
  finish_reason: STOP_SEQUENCE
50
- id: 2ed6908c-e5cb-4063-b2a3-0ac4990d1b85
50
+ id: 02069ccc-65d6-4286-ba8c-097e317431c5
51
51
  message:
52
52
  content:
53
- - text: The capital of France is
53
+ - text: The capital of France is a city known as
54
54
  type: text
55
55
  role: assistant
56
56
  usage:
57
57
  billed_units:
58
- input_tokens: 7
59
- output_tokens: 5
58
+ input_tokens: 25
59
+ output_tokens: 9
60
60
  tokens:
61
- input_tokens: 200
62
- output_tokens: 7
61
+ input_tokens: 91
62
+ output_tokens: 11
63
63
  status:
64
64
  code: 200
65
65
  message: OK
@@ -0,0 +1,65 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - '*/*'
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '216'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - generativelanguage.googleapis.com
16
+ method: POST
17
+ parsed_body:
18
+ contents:
19
+ - parts:
20
+ - text: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
21
+ role: user
22
+ generationConfig:
23
+ stopSequences:
24
+ - Paris
25
+ uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent
26
+ response:
27
+ headers:
28
+ alt-svc:
29
+ - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
30
+ content-length:
31
+ - '677'
32
+ content-type:
33
+ - application/json; charset=UTF-8
34
+ server-timing:
35
+ - gfet4t7; dur=362
36
+ transfer-encoding:
37
+ - chunked
38
+ vary:
39
+ - Origin
40
+ - X-Origin
41
+ - Referer
42
+ parsed_body:
43
+ candidates:
44
+ - avgLogprobs: -0.5998413562774658
45
+ content:
46
+ parts:
47
+ - text: 'The most iconic city in France is '
48
+ role: model
49
+ finishReason: STOP
50
+ modelVersion: gemini-1.5-flash
51
+ responseId: UB5DaMfEN7jFnvgPocrJaA
52
+ usageMetadata:
53
+ candidatesTokenCount: 8
54
+ candidatesTokensDetails:
55
+ - modality: TEXT
56
+ tokenCount: 8
57
+ promptTokenCount: 25
58
+ promptTokensDetails:
59
+ - modality: TEXT
60
+ tokenCount: 25
61
+ totalTokenCount: 33
62
+ status:
63
+ code: 200
64
+ message: OK
65
+ version: 1
@@ -8,7 +8,7 @@ interactions:
8
8
  connection:
9
9
  - keep-alive
10
10
  content-length:
11
- - '136'
11
+ - '215'
12
12
  content-type:
13
13
  - application/json
14
14
  host:
@@ -16,7 +16,7 @@ interactions:
16
16
  method: POST
17
17
  parsed_body:
18
18
  messages:
19
- - content: What is the capital of France?
19
+ - content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
20
20
  role: user
21
21
  model: llama3-8b-8192
22
22
  n: 1
@@ -33,38 +33,38 @@ interactions:
33
33
  connection:
34
34
  - keep-alive
35
35
  content-length:
36
- - '562'
36
+ - '603'
37
37
  content-type:
38
38
  - application/json
39
39
  transfer-encoding:
40
40
  - chunked
41
41
  vary:
42
- - Origin, Accept-Encoding
42
+ - Origin
43
43
  parsed_body:
44
44
  choices:
45
45
  - finish_reason: stop
46
46
  index: 0
47
47
  logprobs: null
48
48
  message:
49
- content: 'The capital of France is '
49
+ content: "Bien sûr!\n\nThe lovely city that is the capital of France is "
50
50
  role: assistant
51
- created: 1744190899
52
- id: chatcmpl-9de98446-dccf-439b-bcb8-996ee77471d8
51
+ created: 1749229135
52
+ id: chatcmpl-69930f13-fe23-4584-9d09-c1e1612a2183
53
53
  model: llama3-8b-8192
54
54
  object: chat.completion
55
- system_fingerprint: fp_dadc9d6142
55
+ system_fingerprint: fp_179b0f92c9
56
56
  usage:
57
- completion_time: 0.006666667
58
- completion_tokens: 8
59
- prompt_time: 0.003914844
60
- prompt_tokens: 17
61
- queue_time: 0.5322581550000001
62
- total_time: 0.010581511
63
- total_tokens: 25
57
+ completion_time: 0.020833333
58
+ completion_tokens: 25
59
+ prompt_time: 0.004837532
60
+ prompt_tokens: 35
61
+ queue_time: 0.022124504000000003
62
+ total_time: 0.025670865
63
+ total_tokens: 60
64
64
  usage_breakdown:
65
65
  models: null
66
66
  x_groq:
67
- id: req_01jrcy20hceg1t9cpsg7cmj7f9
67
+ id: req_01jx32wsk4fwf98jtfjm1agphs
68
68
  status:
69
69
  code: 200
70
70
  message: OK
@@ -8,7 +8,7 @@ interactions:
8
8
  connection:
9
9
  - keep-alive
10
10
  content-length:
11
- - '153'
11
+ - '232'
12
12
  content-type:
13
13
  - application/json
14
14
  host:
@@ -16,7 +16,7 @@ interactions:
16
16
  method: POST
17
17
  parsed_body:
18
18
  messages:
19
- - content: What is the capital of France?
19
+ - content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
20
20
  role: user
21
21
  model: ministral-8b-latest
22
22
  n: 1
@@ -37,14 +37,6 @@ interactions:
37
37
  - '322'
38
38
  content-type:
39
39
  - application/json
40
- ratelimitbysize-limit:
41
- - '500000'
42
- ratelimitbysize-query-cost:
43
- - '32008'
44
- ratelimitbysize-remaining:
45
- - '467992'
46
- ratelimitbysize-reset:
47
- - '42'
48
40
  transfer-encoding:
49
41
  - chunked
50
42
  parsed_body:
@@ -55,14 +47,14 @@ interactions:
55
47
  content: 'The capital of France is '
56
48
  role: assistant
57
49
  tool_calls: null
58
- created: 1744190898
59
- id: 0bbc8cf8fc76455fae759fb9109f8547
50
+ created: 1749229172
51
+ id: 59bee455a928496eb22bbf8b8b817252
60
52
  model: ministral-8b-latest
61
53
  object: chat.completion
62
54
  usage:
63
55
  completion_tokens: 6
64
- prompt_tokens: 10
65
- total_tokens: 16
56
+ prompt_tokens: 28
57
+ total_tokens: 34
66
58
  status:
67
59
  code: 200
68
60
  message: OK
@@ -8,7 +8,7 @@ interactions:
8
8
  connection:
9
9
  - keep-alive
10
10
  content-length:
11
- - '129'
11
+ - '202'
12
12
  content-type:
13
13
  - application/json
14
14
  host:
@@ -16,10 +16,9 @@ interactions:
16
16
  method: POST
17
17
  parsed_body:
18
18
  messages:
19
- - content: What is the capital of France?
19
+ - content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
20
20
  role: user
21
21
  model: o3-mini
22
- n: 1
23
22
  stop:
24
23
  - Paris
25
24
  stream: false
@@ -33,13 +32,13 @@ interactions:
33
32
  connection:
34
33
  - keep-alive
35
34
  content-length:
36
- - '805'
35
+ - '808'
37
36
  content-type:
38
37
  - application/json
39
38
  openai-organization:
40
39
  - pydantic-28gund
41
40
  openai-processing-ms:
42
- - '3852'
41
+ - '3788'
43
42
  openai-version:
44
43
  - '2020-10-01'
45
44
  strict-transport-security:
@@ -55,24 +54,24 @@ interactions:
55
54
  content: 'The capital of France is '
56
55
  refusal: null
57
56
  role: assistant
58
- created: 1744190892
59
- id: chatcmpl-BKM16LEJBCFN3jeeR1O8sFXn6OMZt
57
+ created: 1749229128
58
+ id: chatcmpl-BfUgyreG4fpnDXvHKXtRkevWb6i3p
60
59
  model: o3-mini-2025-01-31
61
60
  object: chat.completion
62
61
  service_tier: default
63
- system_fingerprint: fp_617f206dd9
62
+ system_fingerprint: fp_e20469f047
64
63
  usage:
65
- completion_tokens: 80
64
+ completion_tokens: 467
66
65
  completion_tokens_details:
67
66
  accepted_prediction_tokens: 0
68
67
  audio_tokens: 0
69
- reasoning_tokens: 64
68
+ reasoning_tokens: 448
70
69
  rejected_prediction_tokens: 0
71
- prompt_tokens: 13
70
+ prompt_tokens: 31
72
71
  prompt_tokens_details:
73
72
  audio_tokens: 0
74
73
  cached_tokens: 0
75
- total_tokens: 93
74
+ total_tokens: 498
76
75
  status:
77
76
  code: 200
78
77
  message: OK
@@ -281,6 +281,11 @@ def openrouter_api_key() -> str:
281
281
  return os.getenv('OPENROUTER_API_KEY', 'mock-api-key')
282
282
 
283
283
 
284
+ @pytest.fixture(scope='session')
285
+ def heroku_inference_key() -> str:
286
+ return os.getenv('HEROKU_INFERENCE_KEY', 'mock-api-key')
287
+
288
+
284
289
  @pytest.fixture(scope='session')
285
290
  def bedrock_provider():
286
291
  try:
@@ -342,6 +347,11 @@ def model(
342
347
  from pydantic_ai.providers.google_gla import GoogleGLAProvider
343
348
 
344
349
  return GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key=gemini_api_key))
350
+ elif request.param == 'google':
351
+ from pydantic_ai.models.google import GoogleModel
352
+ from pydantic_ai.providers.google import GoogleProvider
353
+
354
+ return GoogleModel('gemini-1.5-flash', provider=GoogleProvider(api_key=gemini_api_key))
345
355
  elif request.param == 'bedrock':
346
356
  from pydantic_ai.models.bedrock import BedrockConverseModel
347
357