pydantic-ai 0.5.1__tar.gz → 0.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pydantic-ai might be problematic. Click here for more details.
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/PKG-INFO +3 -3
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/pyproject.toml +1 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/conftest.py +1 -1
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_graph.py +0 -33
- pydantic_ai-0.6.1/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +116 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +18 -1
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_bedrock.py +23 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_gemini.py +5 -1
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_gemini_vertex.py +1 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_openai.py +39 -1
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_google_gla.py +5 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_google_vertex.py +4 -2
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_provider_names.py +9 -5
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_agent.py +1 -56
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_examples.py +1 -6
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_streaming.py +1 -1
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/typed_agent.py +1 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/.gitignore +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/LICENSE +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/Makefile +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/README.md +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/import_examples.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_google.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_huggingface.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_moonshotai.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_cli.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_deps.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_direct.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_live.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_logfire.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_messages.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_settings.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_tenacity.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_tools.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_toolsets.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/test_utils.py +0 -0
- {pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.1
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs
|
|
5
5
|
Project-URL: Homepage, https://ai.pydantic.dev
|
|
6
6
|
Project-URL: Source, https://github.com/pydantic/pydantic-ai
|
|
@@ -28,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,vertexai]==0.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,vertexai]==0.6.1
|
|
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.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==0.6.1; extra == 'examples'
|
|
36
36
|
Provides-Extra: logfire
|
|
37
37
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
@@ -479,7 +479,7 @@ def model(
|
|
|
479
479
|
return CohereModel('command-r-plus', provider=CohereProvider(api_key=co_api_key))
|
|
480
480
|
elif request.param == 'gemini':
|
|
481
481
|
from pydantic_ai.models.gemini import GeminiModel # type: ignore[reportDeprecated]
|
|
482
|
-
from pydantic_ai.providers.google_gla import GoogleGLAProvider
|
|
482
|
+
from pydantic_ai.providers.google_gla import GoogleGLAProvider # type: ignore[reportDeprecated]
|
|
483
483
|
|
|
484
484
|
return GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key=gemini_api_key)) # type: ignore[reportDeprecated]
|
|
485
485
|
elif request.param == 'google':
|
|
@@ -401,39 +401,6 @@ async def test_iter_next_error(mock_snapshot_id: object):
|
|
|
401
401
|
await run.next()
|
|
402
402
|
|
|
403
403
|
|
|
404
|
-
async def test_next(mock_snapshot_id: object):
|
|
405
|
-
@dataclass
|
|
406
|
-
class Foo(BaseNode):
|
|
407
|
-
async def run(self, ctx: GraphRunContext) -> Bar:
|
|
408
|
-
return Bar()
|
|
409
|
-
|
|
410
|
-
@dataclass
|
|
411
|
-
class Bar(BaseNode):
|
|
412
|
-
async def run(self, ctx: GraphRunContext) -> Foo:
|
|
413
|
-
return Foo() # pragma: no cover
|
|
414
|
-
|
|
415
|
-
g = Graph(nodes=(Foo, Bar))
|
|
416
|
-
assert g.name is None
|
|
417
|
-
sp = FullStatePersistence()
|
|
418
|
-
with pytest.warns(DeprecationWarning, match='`next` is deprecated, use `async with graph.iter(...)'):
|
|
419
|
-
n = await g.next(Foo(), persistence=sp) # pyright: ignore[reportDeprecated]
|
|
420
|
-
assert n == Bar()
|
|
421
|
-
assert g.name == 'g'
|
|
422
|
-
assert sp.history == snapshot(
|
|
423
|
-
[
|
|
424
|
-
NodeSnapshot(
|
|
425
|
-
state=None,
|
|
426
|
-
node=Foo(),
|
|
427
|
-
start_ts=IsNow(tz=timezone.utc),
|
|
428
|
-
duration=IsFloat(),
|
|
429
|
-
status='success',
|
|
430
|
-
id='Foo:1',
|
|
431
|
-
),
|
|
432
|
-
NodeSnapshot(state=None, node=Bar(), id='Bar:2'),
|
|
433
|
-
]
|
|
434
|
-
)
|
|
435
|
-
|
|
436
|
-
|
|
437
404
|
async def test_deps(mock_snapshot_id: object):
|
|
438
405
|
@dataclass
|
|
439
406
|
class Deps:
|
pydantic_ai-0.6.1/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
body: '{"messages": [{"role": "user", "content": [{"text": "What is the largest city in the user country?"}]}], "system":
|
|
4
|
+
[], "inferenceConfig": {}, "toolConfig": {"tools": [{"toolSpec": {"name": "get_user_country", "inputSchema": {"json":
|
|
5
|
+
{"additionalProperties": false, "properties": {}, "type": "object"}}}}]}, "additionalModelRequestFields": {"thinking":
|
|
6
|
+
{"type": "enabled", "budget_tokens": 1024}}}'
|
|
7
|
+
headers:
|
|
8
|
+
amz-sdk-invocation-id:
|
|
9
|
+
- !!binary |
|
|
10
|
+
MmM5YzRmZDctMmNlZS00Yzk2LWIwZWMtZjMxN2NkZDEwYmM5
|
|
11
|
+
amz-sdk-request:
|
|
12
|
+
- !!binary |
|
|
13
|
+
YXR0ZW1wdD0x
|
|
14
|
+
content-length:
|
|
15
|
+
- '396'
|
|
16
|
+
content-type:
|
|
17
|
+
- !!binary |
|
|
18
|
+
YXBwbGljYXRpb24vanNvbg==
|
|
19
|
+
method: POST
|
|
20
|
+
uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-7-sonnet-20250219-v1%3A0/converse
|
|
21
|
+
response:
|
|
22
|
+
headers:
|
|
23
|
+
connection:
|
|
24
|
+
- keep-alive
|
|
25
|
+
content-length:
|
|
26
|
+
- '1085'
|
|
27
|
+
content-type:
|
|
28
|
+
- application/json
|
|
29
|
+
parsed_body:
|
|
30
|
+
metrics:
|
|
31
|
+
latencyMs: 3896
|
|
32
|
+
output:
|
|
33
|
+
message:
|
|
34
|
+
content:
|
|
35
|
+
- reasoningContent:
|
|
36
|
+
reasoningText:
|
|
37
|
+
signature: ErcBCkgIBhABGAIiQDYN+P1S3ACL3r24cAMKCrRNiuPPxvmT2uzREPLRyKEUXagRbXn97QCke6L7OEZvlh7NdA/MQNTwMZV8TuB4qPASDLNxYxDx1S3luCIfARoMIwLZXwhsvjjTN72XIjAJrEl5ryAvv6C1+6YMCPC73ffE+kgwB96IcZaOuDFQtyaoWwcFcDPBguM6YNp5e3cqHbDQ3QF5dR4PP5q+3K23pual3pUdT/0e7khyIxXkGAI=
|
|
38
|
+
text: |-
|
|
39
|
+
The user is asking for the largest city in their country. To answer this, I first need to determine what country the user is from. I can use the `get_user_country` function to retrieve this information.
|
|
40
|
+
|
|
41
|
+
Once I have the user's country, I can then provide information about the largest city in that country.
|
|
42
|
+
- text: I'll need to check what country you're from to answer that question.
|
|
43
|
+
- toolUse:
|
|
44
|
+
input: {}
|
|
45
|
+
name: get_user_country
|
|
46
|
+
toolUseId: tooluse_W9DaUFg4Tj2cRPpndqxWSg
|
|
47
|
+
role: assistant
|
|
48
|
+
stopReason: tool_use
|
|
49
|
+
usage:
|
|
50
|
+
cacheReadInputTokenCount: 0
|
|
51
|
+
cacheReadInputTokens: 0
|
|
52
|
+
cacheWriteInputTokenCount: 0
|
|
53
|
+
cacheWriteInputTokens: 0
|
|
54
|
+
inputTokens: 397
|
|
55
|
+
outputTokens: 130
|
|
56
|
+
totalTokens: 527
|
|
57
|
+
status:
|
|
58
|
+
code: 200
|
|
59
|
+
message: OK
|
|
60
|
+
- request:
|
|
61
|
+
body: '{"messages": [{"role": "user", "content": [{"text": "What is the largest city in the user country?"}]}, {"role":
|
|
62
|
+
"assistant", "content": [{"reasoningContent": {"reasoningText": {"text": "The user is asking for the largest city in
|
|
63
|
+
their country. To answer this, I first need to determine what country the user is from. I can use the `get_user_country`
|
|
64
|
+
function to retrieve this information.\n\nOnce I have the user''s country, I can then provide information about the
|
|
65
|
+
largest city in that country.", "signature": "ErcBCkgIBhABGAIiQDYN+P1S3ACL3r24cAMKCrRNiuPPxvmT2uzREPLRyKEUXagRbXn97QCke6L7OEZvlh7NdA/MQNTwMZV8TuB4qPASDLNxYxDx1S3luCIfARoMIwLZXwhsvjjTN72XIjAJrEl5ryAvv6C1+6YMCPC73ffE+kgwB96IcZaOuDFQtyaoWwcFcDPBguM6YNp5e3cqHbDQ3QF5dR4PP5q+3K23pual3pUdT/0e7khyIxXkGAI="}}},
|
|
66
|
+
{"text": "I''ll need to check what country you''re from to answer that question."}, {"toolUse": {"toolUseId": "tooluse_W9DaUFg4Tj2cRPpndqxWSg",
|
|
67
|
+
"name": "get_user_country", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_W9DaUFg4Tj2cRPpndqxWSg",
|
|
68
|
+
"content": [{"text": "Mexico"}], "status": "success"}}]}], "system": [], "inferenceConfig": {}, "toolConfig": {"tools":
|
|
69
|
+
[{"toolSpec": {"name": "get_user_country", "inputSchema": {"json": {"additionalProperties": false, "properties": {},
|
|
70
|
+
"type": "object"}}}}]}, "additionalModelRequestFields": {"thinking": {"type": "enabled", "budget_tokens": 1024}}}'
|
|
71
|
+
headers:
|
|
72
|
+
amz-sdk-invocation-id:
|
|
73
|
+
- !!binary |
|
|
74
|
+
ZWM5NzBkMzYtZTZhYi00MjdlLWFmMzItMTBhNTc2ZjBiMWNl
|
|
75
|
+
amz-sdk-request:
|
|
76
|
+
- !!binary |
|
|
77
|
+
YXR0ZW1wdD0x
|
|
78
|
+
content-length:
|
|
79
|
+
- '1399'
|
|
80
|
+
content-type:
|
|
81
|
+
- !!binary |
|
|
82
|
+
YXBwbGljYXRpb24vanNvbg==
|
|
83
|
+
method: POST
|
|
84
|
+
uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-7-sonnet-20250219-v1%3A0/converse
|
|
85
|
+
response:
|
|
86
|
+
headers:
|
|
87
|
+
connection:
|
|
88
|
+
- keep-alive
|
|
89
|
+
content-length:
|
|
90
|
+
- '756'
|
|
91
|
+
content-type:
|
|
92
|
+
- application/json
|
|
93
|
+
parsed_body:
|
|
94
|
+
metrics:
|
|
95
|
+
latencyMs: 4529
|
|
96
|
+
output:
|
|
97
|
+
message:
|
|
98
|
+
content:
|
|
99
|
+
- text: |-
|
|
100
|
+
Based on your location in Mexico, the largest city is Mexico City (Ciudad de México). It's not only the capital but also the most populous city in Mexico with a metropolitan area population of over 21 million people, making it one of the largest urban agglomerations in the world.
|
|
101
|
+
|
|
102
|
+
Mexico City is an important cultural, financial, and political center for the country and has a rich history dating back to the Aztec empire when it was known as Tenochtitlán.
|
|
103
|
+
role: assistant
|
|
104
|
+
stopReason: end_turn
|
|
105
|
+
usage:
|
|
106
|
+
cacheReadInputTokenCount: 0
|
|
107
|
+
cacheReadInputTokens: 0
|
|
108
|
+
cacheWriteInputTokenCount: 0
|
|
109
|
+
cacheWriteInputTokens: 0
|
|
110
|
+
inputTokens: 539
|
|
111
|
+
outputTokens: 106
|
|
112
|
+
totalTokens: 645
|
|
113
|
+
status:
|
|
114
|
+
code: 200
|
|
115
|
+
message: OK
|
|
116
|
+
version: 1
|
|
@@ -15,7 +15,7 @@ interactions:
|
|
|
15
15
|
response:
|
|
16
16
|
headers:
|
|
17
17
|
content-length:
|
|
18
|
-
- '
|
|
18
|
+
- '760'
|
|
19
19
|
content-security-policy:
|
|
20
20
|
- default-src 'none'; frame-ancestors 'none'
|
|
21
21
|
content-type:
|
|
@@ -56,6 +56,23 @@ interactions:
|
|
|
56
56
|
- us
|
|
57
57
|
type:
|
|
58
58
|
- text-to-embedding
|
|
59
|
+
- model_id: gpt-oss-120b
|
|
60
|
+
regions:
|
|
61
|
+
- us
|
|
62
|
+
type:
|
|
63
|
+
- text-to-text
|
|
64
|
+
- model_id: nova-lite
|
|
65
|
+
regions:
|
|
66
|
+
- eu
|
|
67
|
+
- us
|
|
68
|
+
type:
|
|
69
|
+
- text-to-text
|
|
70
|
+
- model_id: nova-pro
|
|
71
|
+
regions:
|
|
72
|
+
- eu
|
|
73
|
+
- us
|
|
74
|
+
type:
|
|
75
|
+
- text-to-text
|
|
59
76
|
- model_id: stable-image-ultra
|
|
60
77
|
regions:
|
|
61
78
|
- us
|
|
@@ -654,6 +654,29 @@ async def test_bedrock_model_thinking_part(allow_model_requests: None, bedrock_p
|
|
|
654
654
|
)
|
|
655
655
|
|
|
656
656
|
|
|
657
|
+
async def test_bedrock_anthropic_tool_with_thinking(allow_model_requests: None, bedrock_provider: BedrockProvider):
|
|
658
|
+
"""When using thinking with tool calls in Anthropic, we need to send the thinking part back to the provider.
|
|
659
|
+
|
|
660
|
+
This tests the issue raised in https://github.com/pydantic/pydantic-ai/issues/2453.
|
|
661
|
+
"""
|
|
662
|
+
m = BedrockConverseModel('us.anthropic.claude-3-7-sonnet-20250219-v1:0', provider=bedrock_provider)
|
|
663
|
+
settings = BedrockModelSettings(
|
|
664
|
+
bedrock_additional_model_requests_fields={'thinking': {'type': 'enabled', 'budget_tokens': 1024}},
|
|
665
|
+
)
|
|
666
|
+
agent = Agent(m, model_settings=settings)
|
|
667
|
+
|
|
668
|
+
@agent.tool_plain
|
|
669
|
+
async def get_user_country() -> str:
|
|
670
|
+
return 'Mexico'
|
|
671
|
+
|
|
672
|
+
result = await agent.run('What is the largest city in the user country?')
|
|
673
|
+
assert result.output == snapshot("""\
|
|
674
|
+
Based on your location in Mexico, the largest city is Mexico City (Ciudad de México). It's not only the capital but also the most populous city in Mexico with a metropolitan area population of over 21 million people, making it one of the largest urban agglomerations in the world.
|
|
675
|
+
|
|
676
|
+
Mexico City is an important cultural, financial, and political center for the country and has a rich history dating back to the Aztec empire when it was known as Tenochtitlán.\
|
|
677
|
+
""")
|
|
678
|
+
|
|
679
|
+
|
|
657
680
|
async def test_bedrock_group_consecutive_tool_return_parts(bedrock_provider: BedrockProvider):
|
|
658
681
|
"""
|
|
659
682
|
Test that consecutive ToolReturnPart objects are grouped into a single user message for Bedrock.
|
|
@@ -61,7 +61,11 @@ from pydantic_ai.tools import ToolDefinition
|
|
|
61
61
|
|
|
62
62
|
from ..conftest import ClientWithHandler, IsDatetime, IsInstance, IsNow, IsStr, TestEnv, try_import
|
|
63
63
|
|
|
64
|
-
pytestmark = [
|
|
64
|
+
pytestmark = [
|
|
65
|
+
pytest.mark.anyio,
|
|
66
|
+
pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
|
|
67
|
+
pytest.mark.filterwarnings('ignore:`GoogleGLAProvider` is deprecated.:DeprecationWarning'),
|
|
68
|
+
]
|
|
65
69
|
|
|
66
70
|
|
|
67
71
|
async def test_model_simple(allow_model_requests: None):
|
|
@@ -34,6 +34,7 @@ pytestmark = [
|
|
|
34
34
|
pytest.mark.skipif(not imports_successful(), reason='google-auth not installed'),
|
|
35
35
|
pytest.mark.anyio,
|
|
36
36
|
pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
|
|
37
|
+
pytest.mark.filterwarnings('ignore:`GoogleVertexProvider` is deprecated.:DeprecationWarning'),
|
|
37
38
|
]
|
|
38
39
|
|
|
39
40
|
|
|
@@ -12,7 +12,7 @@ import httpx
|
|
|
12
12
|
import pytest
|
|
13
13
|
from dirty_equals import IsListOrTuple
|
|
14
14
|
from inline_snapshot import snapshot
|
|
15
|
-
from pydantic import AnyUrl, BaseModel, Discriminator, Field, Tag
|
|
15
|
+
from pydantic import AnyUrl, BaseModel, ConfigDict, Discriminator, Field, Tag
|
|
16
16
|
from typing_extensions import NotRequired, TypedDict
|
|
17
17
|
|
|
18
18
|
from pydantic_ai import Agent, ModelHTTPError, ModelRetry, UnexpectedModelBehavior
|
|
@@ -1777,6 +1777,44 @@ def test_strict_schema():
|
|
|
1777
1777
|
)
|
|
1778
1778
|
|
|
1779
1779
|
|
|
1780
|
+
def test_native_output_strict_mode(allow_model_requests: None):
|
|
1781
|
+
class CityLocation(BaseModel):
|
|
1782
|
+
city: str
|
|
1783
|
+
country: str
|
|
1784
|
+
|
|
1785
|
+
c = completion_message(
|
|
1786
|
+
ChatCompletionMessage(content='{"city": "Mexico City", "country": "Mexico"}', role='assistant'),
|
|
1787
|
+
)
|
|
1788
|
+
mock_client = MockOpenAI.create_mock(c)
|
|
1789
|
+
model = OpenAIModel('gpt-4o', provider=OpenAIProvider(openai_client=mock_client))
|
|
1790
|
+
|
|
1791
|
+
# Explicit strict=True
|
|
1792
|
+
agent = Agent(model, output_type=NativeOutput(CityLocation, strict=True))
|
|
1793
|
+
|
|
1794
|
+
agent.run_sync('What is the capital of Mexico?')
|
|
1795
|
+
assert get_mock_chat_completion_kwargs(mock_client)[-1]['response_format']['json_schema']['strict'] is True
|
|
1796
|
+
|
|
1797
|
+
# Explicit strict=False
|
|
1798
|
+
agent = Agent(model, output_type=NativeOutput(CityLocation, strict=False))
|
|
1799
|
+
|
|
1800
|
+
agent.run_sync('What is the capital of Mexico?')
|
|
1801
|
+
assert get_mock_chat_completion_kwargs(mock_client)[-1]['response_format']['json_schema']['strict'] is False
|
|
1802
|
+
|
|
1803
|
+
# Strict-compatible
|
|
1804
|
+
agent = Agent(model, output_type=NativeOutput(CityLocation))
|
|
1805
|
+
|
|
1806
|
+
agent.run_sync('What is the capital of Mexico?')
|
|
1807
|
+
assert get_mock_chat_completion_kwargs(mock_client)[-1]['response_format']['json_schema']['strict'] is True
|
|
1808
|
+
|
|
1809
|
+
# Strict-incompatible
|
|
1810
|
+
CityLocation.model_config = ConfigDict(extra='allow')
|
|
1811
|
+
|
|
1812
|
+
agent = Agent(model, output_type=NativeOutput(CityLocation))
|
|
1813
|
+
|
|
1814
|
+
agent.run_sync('What is the capital of Mexico?')
|
|
1815
|
+
assert get_mock_chat_completion_kwargs(mock_client)[-1]['response_format']['json_schema']['strict'] is False
|
|
1816
|
+
|
|
1817
|
+
|
|
1780
1818
|
async def test_openai_instructions(allow_model_requests: None, openai_api_key: str):
|
|
1781
1819
|
m = OpenAIModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
|
|
1782
1820
|
agent = Agent(m, instructions='You are a helpful assistant.')
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# pyright: reportDeprecated=false
|
|
1
2
|
import re
|
|
2
3
|
|
|
3
4
|
import pytest
|
|
@@ -7,6 +8,10 @@ from pydantic_ai.providers.google_gla import GoogleGLAProvider
|
|
|
7
8
|
|
|
8
9
|
from ..conftest import TestEnv
|
|
9
10
|
|
|
11
|
+
pytestmark = [
|
|
12
|
+
pytest.mark.filterwarnings('ignore:`GoogleGLAProvider` is deprecated.:DeprecationWarning'),
|
|
13
|
+
]
|
|
14
|
+
|
|
10
15
|
|
|
11
16
|
def test_api_key_arg(env: TestEnv):
|
|
12
17
|
env.set('GEMINI_API_KEY', 'via-env-var')
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# pyright: reportDeprecated=false
|
|
1
2
|
from __future__ import annotations as _annotations
|
|
2
3
|
|
|
3
4
|
import json
|
|
@@ -13,7 +14,7 @@ from inline_snapshot import snapshot
|
|
|
13
14
|
from pytest_mock import MockerFixture
|
|
14
15
|
|
|
15
16
|
from pydantic_ai.agent import Agent
|
|
16
|
-
from pydantic_ai.models.gemini import GeminiModel
|
|
17
|
+
from pydantic_ai.models.gemini import GeminiModel
|
|
17
18
|
|
|
18
19
|
from ..conftest import try_import
|
|
19
20
|
|
|
@@ -26,6 +27,7 @@ pytestmark = [
|
|
|
26
27
|
pytest.mark.skipif(not imports_successful(), reason='google-genai not installed'),
|
|
27
28
|
pytest.mark.anyio(),
|
|
28
29
|
pytest.mark.filterwarnings('ignore:Use `GoogleModel` instead.:DeprecationWarning'),
|
|
30
|
+
pytest.mark.filterwarnings('ignore:`GoogleVertexProvider` is deprecated.:DeprecationWarning'),
|
|
29
31
|
]
|
|
30
32
|
|
|
31
33
|
|
|
@@ -168,7 +170,7 @@ def vertex_provider_auth(mocker: MockerFixture) -> None: # pragma: lax no cover
|
|
|
168
170
|
)
|
|
169
171
|
@pytest.mark.vcr()
|
|
170
172
|
async def test_vertexai_provider(allow_model_requests: None): # pragma: lax no cover
|
|
171
|
-
m = GeminiModel('gemini-2.0-flash', provider='google-vertex')
|
|
173
|
+
m = GeminiModel('gemini-2.0-flash', provider='google-vertex')
|
|
172
174
|
agent = Agent(m)
|
|
173
175
|
|
|
174
176
|
result = await agent.run('What is the capital of France?')
|
|
@@ -20,8 +20,8 @@ with try_import() as imports_successful:
|
|
|
20
20
|
from pydantic_ai.providers.deepseek import DeepSeekProvider
|
|
21
21
|
from pydantic_ai.providers.fireworks import FireworksProvider
|
|
22
22
|
from pydantic_ai.providers.github import GitHubProvider
|
|
23
|
-
from pydantic_ai.providers.google_gla import GoogleGLAProvider
|
|
24
|
-
from pydantic_ai.providers.google_vertex import GoogleVertexProvider
|
|
23
|
+
from pydantic_ai.providers.google_gla import GoogleGLAProvider # type: ignore[reportDeprecated]
|
|
24
|
+
from pydantic_ai.providers.google_vertex import GoogleVertexProvider # type: ignore[reportDeprecated]
|
|
25
25
|
from pydantic_ai.providers.grok import GrokProvider
|
|
26
26
|
from pydantic_ai.providers.groq import GroqProvider
|
|
27
27
|
from pydantic_ai.providers.heroku import HerokuProvider
|
|
@@ -40,8 +40,8 @@ with try_import() as imports_successful:
|
|
|
40
40
|
('vercel', VercelProvider, 'VERCEL_AI_GATEWAY_API_KEY'),
|
|
41
41
|
('openai', OpenAIProvider, 'OPENAI_API_KEY'),
|
|
42
42
|
('azure', AzureProvider, 'AZURE_OPENAI'),
|
|
43
|
-
('google-vertex', GoogleVertexProvider, None),
|
|
44
|
-
('google-gla', GoogleGLAProvider, 'GEMINI_API_KEY'),
|
|
43
|
+
('google-vertex', GoogleVertexProvider, None), # type: ignore[reportDeprecated]
|
|
44
|
+
('google-gla', GoogleGLAProvider, 'GEMINI_API_KEY'), # type: ignore[reportDeprecated]
|
|
45
45
|
('groq', GroqProvider, 'GROQ_API_KEY'),
|
|
46
46
|
('mistral', MistralProvider, 'MISTRAL_API_KEY'),
|
|
47
47
|
('grok', GrokProvider, 'GROK_API_KEY'),
|
|
@@ -55,7 +55,11 @@ with try_import() as imports_successful:
|
|
|
55
55
|
if not imports_successful():
|
|
56
56
|
test_infer_provider_params = [] # pragma: lax no cover
|
|
57
57
|
|
|
58
|
-
pytestmark =
|
|
58
|
+
pytestmark = [
|
|
59
|
+
pytest.mark.skipif(not imports_successful(), reason='need to install all extra packages'),
|
|
60
|
+
pytest.mark.filterwarnings('ignore:`GoogleGLAProvider` is deprecated:DeprecationWarning'),
|
|
61
|
+
pytest.mark.filterwarnings('ignore:`GoogleVertexProvider` is deprecated:DeprecationWarning'),
|
|
62
|
+
]
|
|
59
63
|
|
|
60
64
|
|
|
61
65
|
@pytest.fixture(autouse=True)
|
|
@@ -2617,13 +2617,6 @@ def test_heterogeneous_responses_non_streaming() -> None:
|
|
|
2617
2617
|
)
|
|
2618
2618
|
|
|
2619
2619
|
|
|
2620
|
-
def test_last_run_messages() -> None:
|
|
2621
|
-
agent = Agent('test')
|
|
2622
|
-
|
|
2623
|
-
with pytest.raises(AttributeError, match='The `last_run_messages` attribute has been removed,'):
|
|
2624
|
-
agent.last_run_messages # pyright: ignore[reportDeprecated]
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
2620
|
def test_nested_capture_run_messages() -> None:
|
|
2628
2621
|
agent = Agent('test')
|
|
2629
2622
|
|
|
@@ -3638,46 +3631,13 @@ def test_deprecated_kwargs_still_work():
|
|
|
3638
3631
|
"""Test that valid deprecated kwargs still work with warnings."""
|
|
3639
3632
|
import warnings
|
|
3640
3633
|
|
|
3641
|
-
with warnings.catch_warnings(record=True) as w:
|
|
3642
|
-
warnings.simplefilter('always')
|
|
3643
|
-
|
|
3644
|
-
agent = Agent('test', result_type=str) # type: ignore[call-arg]
|
|
3645
|
-
assert len(w) == 1
|
|
3646
|
-
assert issubclass(w[0].category, DeprecationWarning)
|
|
3647
|
-
assert '`result_type` is deprecated' in str(w[0].message)
|
|
3648
|
-
assert agent.output_type is str
|
|
3649
|
-
|
|
3650
|
-
with warnings.catch_warnings(record=True) as w:
|
|
3651
|
-
warnings.simplefilter('always')
|
|
3652
|
-
|
|
3653
|
-
agent = Agent('test', result_tool_name='test_tool') # type: ignore[call-arg]
|
|
3654
|
-
assert len(w) == 1
|
|
3655
|
-
assert issubclass(w[0].category, DeprecationWarning)
|
|
3656
|
-
assert '`result_tool_name` is deprecated' in str(w[0].message)
|
|
3657
|
-
|
|
3658
|
-
with warnings.catch_warnings(record=True) as w:
|
|
3659
|
-
warnings.simplefilter('always')
|
|
3660
|
-
|
|
3661
|
-
agent = Agent('test', result_tool_description='test description') # type: ignore[call-arg]
|
|
3662
|
-
assert len(w) == 1
|
|
3663
|
-
assert issubclass(w[0].category, DeprecationWarning)
|
|
3664
|
-
assert '`result_tool_description` is deprecated' in str(w[0].message)
|
|
3665
|
-
|
|
3666
|
-
with warnings.catch_warnings(record=True) as w:
|
|
3667
|
-
warnings.simplefilter('always')
|
|
3668
|
-
|
|
3669
|
-
agent = Agent('test', result_retries=3) # type: ignore[call-arg]
|
|
3670
|
-
assert len(w) == 1
|
|
3671
|
-
assert issubclass(w[0].category, DeprecationWarning)
|
|
3672
|
-
assert '`result_retries` is deprecated' in str(w[0].message)
|
|
3673
|
-
|
|
3674
3634
|
try:
|
|
3675
3635
|
from pydantic_ai.mcp import MCPServerStdio
|
|
3676
3636
|
|
|
3677
3637
|
with warnings.catch_warnings(record=True) as w:
|
|
3678
3638
|
warnings.simplefilter('always')
|
|
3679
3639
|
|
|
3680
|
-
|
|
3640
|
+
Agent('test', mcp_servers=[MCPServerStdio('python', ['-m', 'tests.mcp_server'])]) # type: ignore[call-arg]
|
|
3681
3641
|
assert len(w) == 1
|
|
3682
3642
|
assert issubclass(w[0].category, DeprecationWarning)
|
|
3683
3643
|
assert '`mcp_servers` is deprecated' in str(w[0].message)
|
|
@@ -3685,21 +3645,6 @@ def test_deprecated_kwargs_still_work():
|
|
|
3685
3645
|
pass
|
|
3686
3646
|
|
|
3687
3647
|
|
|
3688
|
-
def test_deprecated_kwargs_mixed_valid_invalid():
|
|
3689
|
-
"""Test that mix of valid deprecated and invalid kwargs raises error for invalid ones."""
|
|
3690
|
-
import warnings
|
|
3691
|
-
|
|
3692
|
-
with pytest.raises(UserError, match='Unknown keyword arguments: `usage_limits`'):
|
|
3693
|
-
with warnings.catch_warnings():
|
|
3694
|
-
warnings.simplefilter('ignore', DeprecationWarning) # Ignore the deprecation warning for result_type
|
|
3695
|
-
Agent('test', result_type=str, usage_limits='invalid') # type: ignore[call-arg]
|
|
3696
|
-
|
|
3697
|
-
with pytest.raises(UserError, match='Unknown keyword arguments: `foo`, `bar`'):
|
|
3698
|
-
with warnings.catch_warnings():
|
|
3699
|
-
warnings.simplefilter('ignore', DeprecationWarning) # Ignore the deprecation warning for result_tool_name
|
|
3700
|
-
Agent('test', result_tool_name='test', foo='value1', bar='value2') # type: ignore[call-arg]
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
3648
|
def test_override_toolsets():
|
|
3704
3649
|
foo_toolset = FunctionToolset()
|
|
3705
3650
|
|
|
@@ -45,9 +45,7 @@ from .conftest import ClientWithHandler, TestEnv, try_import
|
|
|
45
45
|
|
|
46
46
|
try:
|
|
47
47
|
from pydantic_ai.providers.google import GoogleProvider
|
|
48
|
-
from pydantic_ai.providers.google_vertex import GoogleVertexProvider
|
|
49
48
|
except ImportError: # pragma: lax no cover
|
|
50
|
-
GoogleVertexProvider = None
|
|
51
49
|
GoogleProvider = None
|
|
52
50
|
|
|
53
51
|
|
|
@@ -63,10 +61,7 @@ with try_import() as imports_successful:
|
|
|
63
61
|
|
|
64
62
|
pytestmark = [
|
|
65
63
|
pytest.mark.skipif(not imports_successful(), reason='extras not installed'),
|
|
66
|
-
pytest.mark.skipif(
|
|
67
|
-
GoogleVertexProvider is None or logfire is None or GoogleProvider is None,
|
|
68
|
-
reason='google-auth or logfire or google-provider not installed',
|
|
69
|
-
),
|
|
64
|
+
pytest.mark.skipif(logfire is None or GoogleProvider is None, reason='logfire or google-provider not installed'),
|
|
70
65
|
]
|
|
71
66
|
code_examples: dict[str, CodeExample] = {}
|
|
72
67
|
|
|
@@ -926,7 +926,7 @@ async def test_stream_iter_structured_validator() -> None:
|
|
|
926
926
|
class NotOutputType(BaseModel):
|
|
927
927
|
not_value: str
|
|
928
928
|
|
|
929
|
-
agent = Agent[None, Union[OutputType, NotOutputType]]('test', output_type=Union[OutputType, NotOutputType])
|
|
929
|
+
agent = Agent[None, Union[OutputType, NotOutputType]]('test', output_type=Union[OutputType, NotOutputType])
|
|
930
930
|
|
|
931
931
|
@agent.output_validator
|
|
932
932
|
def output_validator(data: OutputType | NotOutputType) -> OutputType | NotOutputType:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.5.1 → pydantic_ai-0.6.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|