pydantic-ai 0.4.4__tar.gz → 0.4.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/.gitignore +0 -1
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/PKG-INFO +3 -3
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_dataset.py +132 -1
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_llm_as_a_judge.py +189 -7
- pydantic_ai-0.4.6/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +487 -0
- pydantic_ai-0.4.6/tests/models/cassettes/test_openai/test_invalid_response.yaml +51 -0
- pydantic_ai-0.4.6/tests/models/cassettes/test_openai/test_text_response.yaml +49 -0
- pydantic_ai-0.4.6/tests/models/cassettes/test_openai/test_valid_response.yaml +79 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_download_item.py +10 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_mistral.py +87 -3
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_openai.py +41 -1
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_examples.py +1 -1
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_format_as_xml.py +23 -25
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_logfire.py +0 -3
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_messages.py +1 -8
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_tools.py +20 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/LICENSE +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/Makefile +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/README.md +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/pyproject.toml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/conftest.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/import_examples.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_google.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_huggingface.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_agent.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_cli.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_deps.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_direct.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_live.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_settings.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_toolsets.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/test_utils.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.4.4 → pydantic_ai-0.4.6}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs
|
|
5
5
|
Project-URL: Homepage, https://ai.pydantic.dev
|
|
6
6
|
Project-URL: Source, https://github.com/pydantic/pydantic-ai
|
|
@@ -28,11 +28,11 @@ Classifier: Topic :: Internet
|
|
|
28
28
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Requires-Python: >=3.9
|
|
31
|
-
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,vertexai]==0.4.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,vertexai]==0.4.6
|
|
32
32
|
Provides-Extra: a2a
|
|
33
33
|
Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
|
|
34
34
|
Provides-Extra: examples
|
|
35
|
-
Requires-Dist: pydantic-ai-examples==0.4.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==0.4.6; extra == 'examples'
|
|
36
36
|
Provides-Extra: logfire
|
|
37
37
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
@@ -11,7 +11,7 @@ from dirty_equals import HasRepr, IsNumber
|
|
|
11
11
|
from inline_snapshot import snapshot
|
|
12
12
|
from pydantic import BaseModel
|
|
13
13
|
|
|
14
|
-
from ..conftest import try_import
|
|
14
|
+
from ..conftest import IsStr, try_import
|
|
15
15
|
from .utils import render_table
|
|
16
16
|
|
|
17
17
|
with try_import() as imports_successful:
|
|
@@ -1086,3 +1086,134 @@ def test_evaluate_non_serializable_inputs():
|
|
|
1086
1086
|
│ Averages │ │ 1.0s │
|
|
1087
1087
|
└──────────┴────────────────────────────────────────────────────────────────────────────────────┴──────────┘
|
|
1088
1088
|
""")
|
|
1089
|
+
|
|
1090
|
+
|
|
1091
|
+
async def test_evaluate_async_logfire(
|
|
1092
|
+
example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
|
|
1093
|
+
simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
|
|
1094
|
+
capfire: CaptureLogfire,
|
|
1095
|
+
):
|
|
1096
|
+
"""Test evaluating a dataset."""
|
|
1097
|
+
example_dataset.add_evaluator(simple_evaluator())
|
|
1098
|
+
|
|
1099
|
+
async def mock_async_task(inputs: TaskInput) -> TaskOutput:
|
|
1100
|
+
if inputs.query == 'What is 2+2?':
|
|
1101
|
+
return TaskOutput(answer='4')
|
|
1102
|
+
elif inputs.query == 'What is the capital of France?':
|
|
1103
|
+
return TaskOutput(answer='Paris')
|
|
1104
|
+
return TaskOutput(answer='Unknown') # pragma: no cover
|
|
1105
|
+
|
|
1106
|
+
await example_dataset.evaluate(mock_async_task)
|
|
1107
|
+
|
|
1108
|
+
spans = capfire.exporter.exported_spans_as_dict()
|
|
1109
|
+
spans.sort(key=lambda s: s['start_time'])
|
|
1110
|
+
assert spans == [
|
|
1111
|
+
{
|
|
1112
|
+
'attributes': {
|
|
1113
|
+
'averages': '{"name":"Averages","scores":{"confidence":1.0},"labels":{},"metrics":{},"assertions":1.0,"task_duration":1.0,"total_duration":5.0}',
|
|
1114
|
+
'cases': '[{"name":"case1","inputs":{"query":"What is '
|
|
1115
|
+
'2+2?"},"metadata":{"difficulty":"easy","category":"general"},"expected_output":{"answer":"4","confidence":1.0},"output":{"answer":"4","confidence":1.0},"metrics":{},"attributes":{},"scores":{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}},"labels":{},"assertions":{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}},"task_duration":1.0,"total_duration":6.0,"trace_id":"00000000000000000000000000000001","span_id":"0000000000000003"},{"name":"case2","inputs":{"query":"What '
|
|
1116
|
+
'is the capital of '
|
|
1117
|
+
'France?"},"metadata":{"difficulty":"medium","category":"geography"},"expected_output":{"answer":"Paris","confidence":1.0},"output":{"answer":"Paris","confidence":1.0},"metrics":{},"attributes":{},"scores":{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}},"labels":{},"assertions":{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}},"task_duration":1.0,"total_duration":4.0,"trace_id":"00000000000000000000000000000001","span_id":"0000000000000007"}]',
|
|
1118
|
+
'code.filepath': 'test_dataset.py',
|
|
1119
|
+
'code.function': 'test_evaluate_async_logfire',
|
|
1120
|
+
'code.lineno': 123,
|
|
1121
|
+
'logfire.json_schema': '{"type":"object","properties":{"name":{},"cases":{"type":"array"},"averages":{"type":"object"}}}',
|
|
1122
|
+
'logfire.msg': 'evaluate mock_async_task',
|
|
1123
|
+
'logfire.msg_template': 'evaluate {name}',
|
|
1124
|
+
'logfire.span_type': 'span',
|
|
1125
|
+
'name': 'mock_async_task',
|
|
1126
|
+
},
|
|
1127
|
+
'context': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
|
|
1128
|
+
'end_time': 10000000000,
|
|
1129
|
+
'name': 'evaluate {name}',
|
|
1130
|
+
'parent': None,
|
|
1131
|
+
'start_time': 1000000000,
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
'attributes': {
|
|
1135
|
+
'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
|
|
1136
|
+
'attributes': '{}',
|
|
1137
|
+
'case_name': 'case1',
|
|
1138
|
+
'code.filepath': IsStr(),
|
|
1139
|
+
'code.lineno': 123,
|
|
1140
|
+
'expected_output': '{"answer":"4","confidence":1.0}',
|
|
1141
|
+
'inputs': '{"query":"What is 2+2?"}',
|
|
1142
|
+
'labels': '{}',
|
|
1143
|
+
'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
|
|
1144
|
+
'logfire.msg': 'case: case1',
|
|
1145
|
+
'logfire.msg_template': 'case: {case_name}',
|
|
1146
|
+
'logfire.span_type': 'span',
|
|
1147
|
+
'metadata': '{"difficulty":"easy","category":"general"}',
|
|
1148
|
+
'metrics': '{}',
|
|
1149
|
+
'output': '{"answer":"4","confidence":1.0}',
|
|
1150
|
+
'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
|
|
1151
|
+
'task_duration': 1.0,
|
|
1152
|
+
'task_name': 'mock_async_task',
|
|
1153
|
+
},
|
|
1154
|
+
'context': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
|
|
1155
|
+
'end_time': 8000000000,
|
|
1156
|
+
'name': 'case: {case_name}',
|
|
1157
|
+
'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
|
|
1158
|
+
'start_time': 2000000000,
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
'attributes': {
|
|
1162
|
+
'code.filepath': IsStr(),
|
|
1163
|
+
'code.lineno': 123,
|
|
1164
|
+
'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
|
|
1165
|
+
'logfire.msg': 'execute mock_async_task',
|
|
1166
|
+
'logfire.msg_template': 'execute {task}',
|
|
1167
|
+
'logfire.span_type': 'span',
|
|
1168
|
+
'task': 'mock_async_task',
|
|
1169
|
+
},
|
|
1170
|
+
'context': {'is_remote': False, 'span_id': 5, 'trace_id': 1},
|
|
1171
|
+
'end_time': 4000000000,
|
|
1172
|
+
'name': 'execute {task}',
|
|
1173
|
+
'parent': {'is_remote': False, 'span_id': 3, 'trace_id': 1},
|
|
1174
|
+
'start_time': 3000000000,
|
|
1175
|
+
},
|
|
1176
|
+
{
|
|
1177
|
+
'attributes': {
|
|
1178
|
+
'assertions': '{"correct":{"name":"correct","value":true,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
|
|
1179
|
+
'attributes': '{}',
|
|
1180
|
+
'case_name': 'case2',
|
|
1181
|
+
'code.filepath': IsStr(),
|
|
1182
|
+
'code.lineno': 123,
|
|
1183
|
+
'expected_output': '{"answer":"Paris","confidence":1.0}',
|
|
1184
|
+
'inputs': '{"query":"What is the capital of France?"}',
|
|
1185
|
+
'labels': '{}',
|
|
1186
|
+
'logfire.json_schema': '{"type":"object","properties":{"task_name":{},"case_name":{},"inputs":{"type":"object","title":"TaskInput","x-python-datatype":"PydanticModel"},"metadata":{"type":"object","title":"TaskMetadata","x-python-datatype":"PydanticModel"},"expected_output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"output":{"type":"object","title":"TaskOutput","x-python-datatype":"PydanticModel"},"task_duration":{},"metrics":{"type":"object"},"attributes":{"type":"object"},"assertions":{"type":"object"},"scores":{"type":"object"},"labels":{"type":"object"}}}',
|
|
1187
|
+
'logfire.msg': 'case: case2',
|
|
1188
|
+
'logfire.msg_template': 'case: {case_name}',
|
|
1189
|
+
'logfire.span_type': 'span',
|
|
1190
|
+
'metadata': '{"difficulty":"medium","category":"geography"}',
|
|
1191
|
+
'metrics': '{}',
|
|
1192
|
+
'output': '{"answer":"Paris","confidence":1.0}',
|
|
1193
|
+
'scores': '{"confidence":{"name":"confidence","value":1.0,"reason":null,"source":{"name":"SimpleEvaluator","arguments":null}}}',
|
|
1194
|
+
'task_duration': 1.0,
|
|
1195
|
+
'task_name': 'mock_async_task',
|
|
1196
|
+
},
|
|
1197
|
+
'context': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
|
|
1198
|
+
'end_time': 9000000000,
|
|
1199
|
+
'name': 'case: {case_name}',
|
|
1200
|
+
'parent': {'is_remote': False, 'span_id': 1, 'trace_id': 1},
|
|
1201
|
+
'start_time': 5000000000,
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
'attributes': {
|
|
1205
|
+
'code.filepath': IsStr(),
|
|
1206
|
+
'code.lineno': 123,
|
|
1207
|
+
'logfire.json_schema': '{"type":"object","properties":{"task":{}}}',
|
|
1208
|
+
'logfire.msg': 'execute mock_async_task',
|
|
1209
|
+
'logfire.msg_template': 'execute {task}',
|
|
1210
|
+
'logfire.span_type': 'span',
|
|
1211
|
+
'task': 'mock_async_task',
|
|
1212
|
+
},
|
|
1213
|
+
'context': {'is_remote': False, 'span_id': 9, 'trace_id': 1},
|
|
1214
|
+
'end_time': 7000000000,
|
|
1215
|
+
'name': 'execute {task}',
|
|
1216
|
+
'parent': {'is_remote': False, 'span_id': 7, 'trace_id': 1},
|
|
1217
|
+
'start_time': 6000000000,
|
|
1218
|
+
},
|
|
1219
|
+
]
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from __future__ import annotations as _annotations
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
+
from inline_snapshot import snapshot
|
|
4
5
|
from pytest_mock import MockerFixture
|
|
5
6
|
|
|
6
|
-
from ..conftest import try_import
|
|
7
|
+
from ..conftest import BinaryContent, try_import
|
|
7
8
|
|
|
8
9
|
with try_import() as imports_successful:
|
|
9
10
|
from pydantic_ai.settings import ModelSettings
|
|
@@ -141,6 +142,54 @@ async def test_judge_input_output_mock(mocker: MockerFixture):
|
|
|
141
142
|
assert '<Rubric>\nOutput contains input\n</Rubric>' in call_args[0]
|
|
142
143
|
|
|
143
144
|
|
|
145
|
+
async def test_judge_input_output_binary_content_list_mock(mocker: MockerFixture, image_content: BinaryContent):
|
|
146
|
+
"""Test judge_input_output function with mocked agent."""
|
|
147
|
+
# Mock the agent run method
|
|
148
|
+
mock_result = mocker.MagicMock()
|
|
149
|
+
mock_result.output = GradingOutput(reason='Test passed', pass_=True, score=1.0)
|
|
150
|
+
mock_run = mocker.patch('pydantic_ai.Agent.run', return_value=mock_result)
|
|
151
|
+
|
|
152
|
+
result = await judge_input_output([image_content, image_content], 'Hello world', 'Output contains input')
|
|
153
|
+
assert isinstance(result, GradingOutput)
|
|
154
|
+
assert result.reason == 'Test passed'
|
|
155
|
+
assert result.pass_ is True
|
|
156
|
+
assert result.score == 1.0
|
|
157
|
+
|
|
158
|
+
# Verify the agent was called with correct prompt
|
|
159
|
+
mock_run.assert_called_once()
|
|
160
|
+
raw_prompt = mock_run.call_args[0][0]
|
|
161
|
+
|
|
162
|
+
# 1) It must be a list
|
|
163
|
+
assert isinstance(raw_prompt, list), 'Expected prompt to be a list when passing binary'
|
|
164
|
+
|
|
165
|
+
# 2) The BinaryContent you passed in should be one of the elements
|
|
166
|
+
assert image_content in raw_prompt, 'Expected the exact BinaryContent instance to be in the prompt list'
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
async def test_judge_input_output_binary_content_mock(mocker: MockerFixture, image_content: BinaryContent):
|
|
170
|
+
"""Test judge_input_output function with mocked agent."""
|
|
171
|
+
# Mock the agent run method
|
|
172
|
+
mock_result = mocker.MagicMock()
|
|
173
|
+
mock_result.output = GradingOutput(reason='Test passed', pass_=True, score=1.0)
|
|
174
|
+
mock_run = mocker.patch('pydantic_ai.Agent.run', return_value=mock_result)
|
|
175
|
+
|
|
176
|
+
result = await judge_input_output(image_content, 'Hello world', 'Output contains input')
|
|
177
|
+
assert isinstance(result, GradingOutput)
|
|
178
|
+
assert result.reason == 'Test passed'
|
|
179
|
+
assert result.pass_ is True
|
|
180
|
+
assert result.score == 1.0
|
|
181
|
+
|
|
182
|
+
# Verify the agent was called with correct prompt
|
|
183
|
+
mock_run.assert_called_once()
|
|
184
|
+
raw_prompt = mock_run.call_args[0][0]
|
|
185
|
+
|
|
186
|
+
# 1) It must be a list
|
|
187
|
+
assert isinstance(raw_prompt, list), 'Expected prompt to be a list when passing binary'
|
|
188
|
+
|
|
189
|
+
# 2) The BinaryContent you passed in should be one of the elements
|
|
190
|
+
assert image_content in raw_prompt, 'Expected the exact BinaryContent instance to be in the prompt list'
|
|
191
|
+
|
|
192
|
+
|
|
144
193
|
@pytest.mark.anyio
|
|
145
194
|
async def test_judge_input_output_with_model_settings_mock(mocker: MockerFixture):
|
|
146
195
|
"""Test judge_input_output function with model_settings and mocked agent."""
|
|
@@ -172,7 +221,7 @@ async def test_judge_input_output_with_model_settings_mock(mocker: MockerFixture
|
|
|
172
221
|
|
|
173
222
|
|
|
174
223
|
@pytest.mark.anyio
|
|
175
|
-
async def test_judge_input_output_expected_mock(mocker: MockerFixture):
|
|
224
|
+
async def test_judge_input_output_expected_mock(mocker: MockerFixture, image_content: BinaryContent):
|
|
176
225
|
"""Test judge_input_output_expected function with mocked agent."""
|
|
177
226
|
# Mock the agent run method
|
|
178
227
|
mock_result = mocker.MagicMock()
|
|
@@ -187,16 +236,29 @@ async def test_judge_input_output_expected_mock(mocker: MockerFixture):
|
|
|
187
236
|
assert result.score == 1.0
|
|
188
237
|
|
|
189
238
|
# Verify the agent was called with correct prompt
|
|
190
|
-
mock_run.assert_called_once()
|
|
191
239
|
call_args = mock_run.call_args[0]
|
|
192
240
|
assert '<Input>\nHello\n</Input>' in call_args[0]
|
|
193
241
|
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
194
242
|
assert '<Output>\nHello world\n</Output>' in call_args[0]
|
|
195
243
|
assert '<Rubric>\nOutput contains input\n</Rubric>' in call_args[0]
|
|
196
244
|
|
|
245
|
+
result = await judge_input_output_expected(image_content, 'Hello world', 'Hello', 'Output contains input')
|
|
246
|
+
assert isinstance(result, GradingOutput)
|
|
247
|
+
assert result.reason == 'Test passed'
|
|
248
|
+
assert result.pass_ is True
|
|
249
|
+
assert result.score == 1.0
|
|
250
|
+
|
|
251
|
+
call_args = mock_run.call_args[0]
|
|
252
|
+
assert image_content in call_args[0]
|
|
253
|
+
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
254
|
+
assert '<Output>\nHello world\n</Output>' in call_args[0]
|
|
255
|
+
assert '<Rubric>\nOutput contains input\n</Rubric>' in call_args[0]
|
|
256
|
+
|
|
197
257
|
|
|
198
258
|
@pytest.mark.anyio
|
|
199
|
-
async def test_judge_input_output_expected_with_model_settings_mock(
|
|
259
|
+
async def test_judge_input_output_expected_with_model_settings_mock(
|
|
260
|
+
mocker: MockerFixture, image_content: BinaryContent
|
|
261
|
+
):
|
|
200
262
|
"""Test judge_input_output_expected function with model_settings and mocked agent."""
|
|
201
263
|
mock_result = mocker.MagicMock()
|
|
202
264
|
mock_result.output = GradingOutput(reason='Test passed with settings', pass_=True, score=1.0)
|
|
@@ -216,7 +278,6 @@ async def test_judge_input_output_expected_with_model_settings_mock(mocker: Mock
|
|
|
216
278
|
assert result.pass_ is True
|
|
217
279
|
assert result.score == 1.0
|
|
218
280
|
|
|
219
|
-
mock_run.assert_called_once()
|
|
220
281
|
call_args, call_kwargs = mock_run.call_args
|
|
221
282
|
assert '<Input>\nHello settings\n</Input>' in call_args[0]
|
|
222
283
|
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
@@ -226,6 +287,108 @@ async def test_judge_input_output_expected_with_model_settings_mock(mocker: Mock
|
|
|
226
287
|
# Check if 'model' kwarg is passed, its value will be the default model or None
|
|
227
288
|
assert 'model' in call_kwargs
|
|
228
289
|
|
|
290
|
+
result = await judge_input_output_expected(
|
|
291
|
+
image_content,
|
|
292
|
+
'Hello world with settings',
|
|
293
|
+
'Hello',
|
|
294
|
+
'Output contains input with settings',
|
|
295
|
+
model_settings=test_model_settings,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
assert isinstance(result, GradingOutput)
|
|
299
|
+
assert result.reason == 'Test passed with settings'
|
|
300
|
+
assert result.pass_ is True
|
|
301
|
+
assert result.score == 1.0
|
|
302
|
+
|
|
303
|
+
call_args, call_kwargs = mock_run.call_args
|
|
304
|
+
assert image_content in call_args[0]
|
|
305
|
+
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
306
|
+
assert '<Output>\nHello world with settings\n</Output>' in call_args[0]
|
|
307
|
+
assert '<Rubric>\nOutput contains input with settings\n</Rubric>' in call_args[0]
|
|
308
|
+
assert call_kwargs['model_settings'] == test_model_settings
|
|
309
|
+
# Check if 'model' kwarg is passed, its value will be the default model or None
|
|
310
|
+
assert 'model' in call_kwargs
|
|
311
|
+
|
|
312
|
+
result = await judge_input_output_expected(
|
|
313
|
+
123,
|
|
314
|
+
'Hello world with settings',
|
|
315
|
+
'Hello',
|
|
316
|
+
'Output contains input with settings',
|
|
317
|
+
model_settings=test_model_settings,
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
assert isinstance(result, GradingOutput)
|
|
321
|
+
assert result.reason == 'Test passed with settings'
|
|
322
|
+
assert result.pass_ is True
|
|
323
|
+
assert result.score == 1.0
|
|
324
|
+
|
|
325
|
+
call_args, call_kwargs = mock_run.call_args
|
|
326
|
+
|
|
327
|
+
assert call_args == snapshot(
|
|
328
|
+
(
|
|
329
|
+
[
|
|
330
|
+
'<Input>\n',
|
|
331
|
+
'123',
|
|
332
|
+
'</Input>',
|
|
333
|
+
"""\
|
|
334
|
+
<Output>
|
|
335
|
+
Hello world with settings
|
|
336
|
+
</Output>\
|
|
337
|
+
""",
|
|
338
|
+
"""\
|
|
339
|
+
<Rubric>
|
|
340
|
+
Output contains input with settings
|
|
341
|
+
</Rubric>\
|
|
342
|
+
""",
|
|
343
|
+
"""\
|
|
344
|
+
<ExpectedOutput>
|
|
345
|
+
Hello
|
|
346
|
+
</ExpectedOutput>\
|
|
347
|
+
""",
|
|
348
|
+
],
|
|
349
|
+
)
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
result = await judge_input_output_expected(
|
|
353
|
+
[123],
|
|
354
|
+
'Hello world with settings',
|
|
355
|
+
'Hello',
|
|
356
|
+
'Output contains input with settings',
|
|
357
|
+
model_settings=test_model_settings,
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
assert isinstance(result, GradingOutput)
|
|
361
|
+
assert result.reason == 'Test passed with settings'
|
|
362
|
+
assert result.pass_ is True
|
|
363
|
+
assert result.score == 1.0
|
|
364
|
+
|
|
365
|
+
call_args, call_kwargs = mock_run.call_args
|
|
366
|
+
|
|
367
|
+
assert call_args == snapshot(
|
|
368
|
+
(
|
|
369
|
+
[
|
|
370
|
+
'<Input>\n',
|
|
371
|
+
'123',
|
|
372
|
+
'</Input>',
|
|
373
|
+
"""\
|
|
374
|
+
<Output>
|
|
375
|
+
Hello world with settings
|
|
376
|
+
</Output>\
|
|
377
|
+
""",
|
|
378
|
+
"""\
|
|
379
|
+
<Rubric>
|
|
380
|
+
Output contains input with settings
|
|
381
|
+
</Rubric>\
|
|
382
|
+
""",
|
|
383
|
+
"""\
|
|
384
|
+
<ExpectedOutput>
|
|
385
|
+
Hello
|
|
386
|
+
</ExpectedOutput>\
|
|
387
|
+
""",
|
|
388
|
+
],
|
|
389
|
+
)
|
|
390
|
+
)
|
|
391
|
+
|
|
229
392
|
|
|
230
393
|
@pytest.mark.anyio
|
|
231
394
|
async def test_judge_output_expected_mock(mocker: MockerFixture):
|
|
@@ -243,7 +406,6 @@ async def test_judge_output_expected_mock(mocker: MockerFixture):
|
|
|
243
406
|
assert result.score == 1.0
|
|
244
407
|
|
|
245
408
|
# Verify the agent was called with correct prompt
|
|
246
|
-
mock_run.assert_called_once()
|
|
247
409
|
call_args = mock_run.call_args[0]
|
|
248
410
|
assert '<Input>' not in call_args[0]
|
|
249
411
|
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
@@ -252,7 +414,7 @@ async def test_judge_output_expected_mock(mocker: MockerFixture):
|
|
|
252
414
|
|
|
253
415
|
|
|
254
416
|
@pytest.mark.anyio
|
|
255
|
-
async def test_judge_output_expected_with_model_settings_mock(mocker: MockerFixture):
|
|
417
|
+
async def test_judge_output_expected_with_model_settings_mock(mocker: MockerFixture, image_content: BinaryContent):
|
|
256
418
|
"""Test judge_output_expected function with model_settings and mocked agent."""
|
|
257
419
|
mock_result = mocker.MagicMock()
|
|
258
420
|
mock_result.output = GradingOutput(reason='Test passed with settings', pass_=True, score=1.0)
|
|
@@ -280,3 +442,23 @@ async def test_judge_output_expected_with_model_settings_mock(mocker: MockerFixt
|
|
|
280
442
|
assert call_kwargs['model_settings'] == test_model_settings
|
|
281
443
|
# Check if 'model' kwarg is passed, its value will be the default model or None
|
|
282
444
|
assert 'model' in call_kwargs
|
|
445
|
+
|
|
446
|
+
result = await judge_output_expected(
|
|
447
|
+
image_content,
|
|
448
|
+
'Hello',
|
|
449
|
+
'Output contains input with settings',
|
|
450
|
+
model_settings=test_model_settings,
|
|
451
|
+
)
|
|
452
|
+
assert isinstance(result, GradingOutput)
|
|
453
|
+
assert result.reason == 'Test passed with settings'
|
|
454
|
+
assert result.pass_ is True
|
|
455
|
+
assert result.score == 1.0
|
|
456
|
+
|
|
457
|
+
call_args, call_kwargs = mock_run.call_args
|
|
458
|
+
assert '<Input>' not in call_args[0]
|
|
459
|
+
assert '<ExpectedOutput>\nHello\n</ExpectedOutput>' in call_args[0]
|
|
460
|
+
assert '<Output>' in call_args[0]
|
|
461
|
+
assert '<Rubric>\nOutput contains input with settings\n</Rubric>' in call_args[0]
|
|
462
|
+
assert call_kwargs['model_settings'] == test_model_settings
|
|
463
|
+
# Check if 'model' kwarg is passed, its value will be the default model or None
|
|
464
|
+
assert 'model' in call_kwargs
|