pydantic-ai 0.3.6__tar.gz → 0.4.0__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.3.6 → pydantic_ai-0.4.0}/PKG-INFO +3 -3
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/pyproject.toml +7 -2
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/conftest.py +25 -1
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_dataset.py +3 -3
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_otel.py +4 -3
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_reports.py +4 -2
- pydantic_ai-0.4.0/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +80 -0
- pydantic_ai-0.4.0/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +73 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_bedrock.py +3 -3
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_gemini.py +36 -27
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_google.py +43 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_model.py +8 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_openai.py +10 -7
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_openai_responses.py +3 -3
- pydantic_ai-0.4.0/tests/providers/test_github.py +112 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_provider_names.py +2 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_agent.py +4 -1
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_direct.py +100 -3
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_logfire.py +1 -1
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_mcp.py +1 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_messages.py +4 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_streaming.py +25 -1
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_tools.py +5 -10
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/.gitignore +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/LICENSE +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/Makefile +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/README.md +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/fasta2a/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/fasta2a/test_applications.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/import_examples.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_cli.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_deps.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_examples.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_live.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_settings.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/test_utils.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.3.6 → pydantic_ai-0.4.0}/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.4.0
|
|
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.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.4.0
|
|
32
32
|
Provides-Extra: examples
|
|
33
|
-
Requires-Dist: pydantic-ai-examples==0.
|
|
33
|
+
Requires-Dist: pydantic-ai-examples==0.4.0; extra == 'examples'
|
|
34
34
|
Provides-Extra: logfire
|
|
35
35
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
@@ -180,6 +180,7 @@ executionEnvironments = [
|
|
|
180
180
|
exclude = [
|
|
181
181
|
"examples/pydantic_ai_examples/weather_agent_gradio.py",
|
|
182
182
|
"mcp-run-python/node_modules",
|
|
183
|
+
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk requires Python 3.10+ so cannot be added as an (optional) dependency
|
|
183
184
|
]
|
|
184
185
|
extraPaths = ["mcp-run-python/stubs"]
|
|
185
186
|
|
|
@@ -219,7 +220,11 @@ include = [
|
|
|
219
220
|
# "fasta2a/**/*.py",
|
|
220
221
|
"tests/**/*.py",
|
|
221
222
|
]
|
|
222
|
-
omit = [
|
|
223
|
+
omit = [
|
|
224
|
+
"tests/test_live.py",
|
|
225
|
+
"tests/example_modules/*.py",
|
|
226
|
+
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk requires Python 3.10+ so cannot be added as an (optional) dependency
|
|
227
|
+
]
|
|
223
228
|
branch = true
|
|
224
229
|
|
|
225
230
|
# https://coverage.readthedocs.io/en/latest/config.html#report
|
|
@@ -265,4 +270,4 @@ skip = '.git*,*.svg,*.lock,*.css,*.yaml'
|
|
|
265
270
|
check-hidden = true
|
|
266
271
|
# Ignore "formatting" like **L**anguage
|
|
267
272
|
ignore-regex = '\*\*[A-Z]\*\*[a-z]+\b'
|
|
268
|
-
ignore-words-list = 'asend'
|
|
273
|
+
ignore-words-list = 'asend,aci'
|
|
@@ -10,6 +10,7 @@ from collections.abc import AsyncIterator, Iterator
|
|
|
10
10
|
from contextlib import contextmanager
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from datetime import datetime
|
|
13
|
+
from functools import cached_property
|
|
13
14
|
from pathlib import Path
|
|
14
15
|
from types import ModuleType
|
|
15
16
|
from typing import TYPE_CHECKING, Any, Callable
|
|
@@ -19,7 +20,7 @@ import pytest
|
|
|
19
20
|
from _pytest.assertion.rewrite import AssertionRewritingHook
|
|
20
21
|
from pytest_mock import MockerFixture
|
|
21
22
|
from typing_extensions import TypeAlias
|
|
22
|
-
from vcr import VCR
|
|
23
|
+
from vcr import VCR, request as vcr_request
|
|
23
24
|
|
|
24
25
|
import pydantic_ai.models
|
|
25
26
|
from pydantic_ai.messages import BinaryContent
|
|
@@ -194,6 +195,29 @@ def pytest_recording_configure(config: Any, vcr: VCR):
|
|
|
194
195
|
|
|
195
196
|
vcr.register_serializer('yaml', json_body_serializer)
|
|
196
197
|
|
|
198
|
+
def method_matcher(r1: vcr_request.Request, r2: vcr_request.Request) -> None:
|
|
199
|
+
if r1.method.upper() != r2.method.upper():
|
|
200
|
+
raise AssertionError(f'{r1.method} != {r2.method}')
|
|
201
|
+
|
|
202
|
+
vcr.register_matcher('method', method_matcher)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
@pytest.fixture(autouse=True)
|
|
206
|
+
def mock_vcr_aiohttp_content(mocker: MockerFixture):
|
|
207
|
+
try:
|
|
208
|
+
from vcr.stubs import aiohttp_stubs
|
|
209
|
+
except ImportError:
|
|
210
|
+
return
|
|
211
|
+
|
|
212
|
+
# google-genai calls `self.response_stream.content.readline()` where `self.response_stream` is a `MockClientResponse`,
|
|
213
|
+
# which creates a new `MockStream` each time instead of returning the same one, resulting in the readline cursor not being respected.
|
|
214
|
+
# So we turn `content` into a cached property to return the same one each time.
|
|
215
|
+
# VCR issue: https://github.com/kevin1024/vcrpy/issues/927. Once that's is resolved, we can remove this patch.
|
|
216
|
+
cached_content = cached_property(aiohttp_stubs.MockClientResponse.content.fget) # type: ignore
|
|
217
|
+
cached_content.__set_name__(aiohttp_stubs.MockClientResponse, 'content')
|
|
218
|
+
mocker.patch('vcr.stubs.aiohttp_stubs.MockClientResponse.content', new=cached_content)
|
|
219
|
+
mocker.patch('vcr.stubs.aiohttp_stubs.MockStream.set_exception', return_value=None)
|
|
220
|
+
|
|
197
221
|
|
|
198
222
|
@pytest.fixture(scope='module')
|
|
199
223
|
def vcr_config():
|
|
@@ -33,7 +33,7 @@ with try_import() as imports_successful:
|
|
|
33
33
|
def evaluate(self, ctx: EvaluatorContext[object, object, object]) -> EvaluatorOutput:
|
|
34
34
|
return self.output
|
|
35
35
|
|
|
36
|
-
from pydantic_evals.reporting import ReportCase
|
|
36
|
+
from pydantic_evals.reporting import ReportCase, ReportCaseAdapter
|
|
37
37
|
|
|
38
38
|
pytestmark = [pytest.mark.skipif(not imports_successful(), reason='pydantic-evals not installed'), pytest.mark.anyio]
|
|
39
39
|
|
|
@@ -196,7 +196,7 @@ async def test_evaluate(
|
|
|
196
196
|
|
|
197
197
|
assert report is not None
|
|
198
198
|
assert len(report.cases) == 2
|
|
199
|
-
assert report.cases[0]
|
|
199
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
200
200
|
{
|
|
201
201
|
'assertions': {
|
|
202
202
|
'correct': {
|
|
@@ -248,7 +248,7 @@ async def test_evaluate_with_concurrency(
|
|
|
248
248
|
|
|
249
249
|
assert report is not None
|
|
250
250
|
assert len(report.cases) == 2
|
|
251
|
-
assert report.cases[0]
|
|
251
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
252
252
|
{
|
|
253
253
|
'assertions': {
|
|
254
254
|
'correct': {
|
|
@@ -65,9 +65,10 @@ async def test_context_subtree_concurrent():
|
|
|
65
65
|
task1_root = tree1.roots[0]
|
|
66
66
|
assert len(task1_root.children) == 2, 'task1 should have exactly two children'
|
|
67
67
|
task1_child_names = {child.name for child in task1_root.children}
|
|
68
|
-
assert task1_child_names == {
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
assert task1_child_names == {
|
|
69
|
+
'task1_child1',
|
|
70
|
+
'task1_child2',
|
|
71
|
+
}, "task1's children should be task1_child1 and task1_child2"
|
|
71
72
|
|
|
72
73
|
# Verify that tree2 only contains spans from task2
|
|
73
74
|
assert len(tree2.roots) == 1, 'tree2 should have exactly one root span'
|
|
@@ -12,9 +12,11 @@ with try_import() as imports_successful:
|
|
|
12
12
|
from pydantic_evals.evaluators import EvaluationResult, Evaluator, EvaluatorContext
|
|
13
13
|
from pydantic_evals.reporting import (
|
|
14
14
|
EvaluationReport,
|
|
15
|
+
EvaluationReportAdapter,
|
|
15
16
|
RenderNumberConfig,
|
|
16
17
|
RenderValueConfig,
|
|
17
18
|
ReportCase,
|
|
19
|
+
ReportCaseAdapter,
|
|
18
20
|
ReportCaseAggregate,
|
|
19
21
|
)
|
|
20
22
|
|
|
@@ -157,7 +159,7 @@ async def test_report_case_aggregate():
|
|
|
157
159
|
async def test_report_serialization(sample_report: EvaluationReport):
|
|
158
160
|
"""Test serializing a report to dict."""
|
|
159
161
|
# Serialize the report
|
|
160
|
-
serialized =
|
|
162
|
+
serialized = EvaluationReportAdapter.dump_python(sample_report)
|
|
161
163
|
|
|
162
164
|
# Check the serialized structure
|
|
163
165
|
assert 'cases' in serialized
|
|
@@ -202,7 +204,7 @@ async def test_report_with_error(mock_evaluator: Evaluator[TaskInput, TaskOutput
|
|
|
202
204
|
name='error_report',
|
|
203
205
|
)
|
|
204
206
|
|
|
205
|
-
assert report.cases[0]
|
|
207
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
206
208
|
{
|
|
207
209
|
'assertions': {
|
|
208
210
|
'error_evaluator': {
|