pydantic-ai 0.3.7__tar.gz → 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pydantic-ai might be problematic. Click here for more details.
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/PKG-INFO +5 -3
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/pyproject.toml +3 -1
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_dataset.py +61 -10
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_otel.py +4 -3
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_reports.py +4 -2
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/fasta2a/test_applications.py +2 -1
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_bedrock.py +3 -3
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_gemini.py +36 -27
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_openai.py +10 -7
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_openai_responses.py +3 -3
- pydantic_ai-0.4.1/tests/test_a2a.py +990 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_direct.py +1 -3
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_logfire.py +1 -1
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_mcp.py +1 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_messages.py +4 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_tools.py +5 -10
- pydantic_ai-0.3.7/tests/test_a2a.py +0 -352
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/.gitignore +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/LICENSE +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/Makefile +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/README.md +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/conftest.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/fasta2a/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/import_examples.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_google.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_agent.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_cli.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_deps.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_examples.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_live.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_settings.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/test_utils.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.3.7 → pydantic_ai-0.4.1}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs
|
|
5
5
|
Project-URL: Homepage, https://ai.pydantic.dev
|
|
6
6
|
Project-URL: Source, https://github.com/pydantic/pydantic-ai
|
|
@@ -28,9 +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[
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.4.1
|
|
32
|
+
Provides-Extra: a2a
|
|
33
|
+
Requires-Dist: fasta2a==0.4.1; extra == 'a2a'
|
|
32
34
|
Provides-Extra: examples
|
|
33
|
-
Requires-Dist: pydantic-ai-examples==0.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==0.4.1; extra == 'examples'
|
|
34
36
|
Provides-Extra: logfire
|
|
35
37
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
36
38
|
Description-Content-Type: text/markdown
|
|
@@ -46,12 +46,13 @@ requires-python = ">=3.9"
|
|
|
46
46
|
|
|
47
47
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
|
48
48
|
dependencies = [
|
|
49
|
-
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,cli,mcp,evals
|
|
49
|
+
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,cli,mcp,evals]=={{ version }}",
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies]
|
|
53
53
|
examples = ["pydantic-ai-examples=={{ version }}"]
|
|
54
54
|
logfire = ["logfire>=3.11.0"]
|
|
55
|
+
a2a = ["fasta2a=={{ version }}"]
|
|
55
56
|
|
|
56
57
|
[project.urls]
|
|
57
58
|
Homepage = "https://ai.pydantic.dev"
|
|
@@ -84,6 +85,7 @@ members = [
|
|
|
84
85
|
# dev dependencies are defined in `pydantic-ai-slim/pyproject.toml` to allow for minimal testing
|
|
85
86
|
lint = ["mypy>=1.11.2", "pyright>=1.1.390", "ruff>=0.6.9"]
|
|
86
87
|
docs = [
|
|
88
|
+
"pydantic-ai[a2a]",
|
|
87
89
|
"black>=24.10.0",
|
|
88
90
|
"mkdocs>=1.6.1",
|
|
89
91
|
"mkdocs-glightbox>=0.4.0",
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations as _annotations
|
|
2
2
|
|
|
3
|
-
import asyncio
|
|
4
3
|
import json
|
|
5
4
|
import sys
|
|
6
5
|
from dataclasses import dataclass
|
|
@@ -8,7 +7,7 @@ from pathlib import Path
|
|
|
8
7
|
from typing import Any
|
|
9
8
|
|
|
10
9
|
import pytest
|
|
11
|
-
from dirty_equals import HasRepr
|
|
10
|
+
from dirty_equals import HasRepr, IsNumber
|
|
12
11
|
from inline_snapshot import snapshot
|
|
13
12
|
from pydantic import BaseModel
|
|
14
13
|
|
|
@@ -33,7 +32,7 @@ with try_import() as imports_successful:
|
|
|
33
32
|
def evaluate(self, ctx: EvaluatorContext[object, object, object]) -> EvaluatorOutput:
|
|
34
33
|
return self.output
|
|
35
34
|
|
|
36
|
-
from pydantic_evals.reporting import ReportCase
|
|
35
|
+
from pydantic_evals.reporting import ReportCase, ReportCaseAdapter
|
|
37
36
|
|
|
38
37
|
pytestmark = [pytest.mark.skipif(not imports_successful(), reason='pydantic-evals not installed'), pytest.mark.anyio]
|
|
39
38
|
|
|
@@ -178,25 +177,25 @@ async def test_add_evaluator(
|
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
|
|
181
|
-
async def
|
|
180
|
+
async def test_evaluate_async(
|
|
182
181
|
example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
|
|
183
182
|
simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
|
|
184
183
|
):
|
|
185
184
|
"""Test evaluating a dataset."""
|
|
186
185
|
example_dataset.add_evaluator(simple_evaluator())
|
|
187
186
|
|
|
188
|
-
async def
|
|
187
|
+
async def mock_async_task(inputs: TaskInput) -> TaskOutput:
|
|
189
188
|
if inputs.query == 'What is 2+2?':
|
|
190
189
|
return TaskOutput(answer='4')
|
|
191
190
|
elif inputs.query == 'What is the capital of France?':
|
|
192
191
|
return TaskOutput(answer='Paris')
|
|
193
192
|
return TaskOutput(answer='Unknown') # pragma: no cover
|
|
194
193
|
|
|
195
|
-
report = await example_dataset.evaluate(
|
|
194
|
+
report = await example_dataset.evaluate(mock_async_task)
|
|
196
195
|
|
|
197
196
|
assert report is not None
|
|
198
197
|
assert len(report.cases) == 2
|
|
199
|
-
assert report.cases[0]
|
|
198
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
200
199
|
{
|
|
201
200
|
'assertions': {
|
|
202
201
|
'correct': {
|
|
@@ -230,6 +229,58 @@ async def test_evaluate(
|
|
|
230
229
|
)
|
|
231
230
|
|
|
232
231
|
|
|
232
|
+
async def test_evaluate_sync(
|
|
233
|
+
example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
|
|
234
|
+
simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
|
|
235
|
+
):
|
|
236
|
+
"""Test evaluating a dataset."""
|
|
237
|
+
example_dataset.add_evaluator(simple_evaluator())
|
|
238
|
+
|
|
239
|
+
def mock_sync_task(inputs: TaskInput) -> TaskOutput:
|
|
240
|
+
if inputs.query == 'What is 2+2?':
|
|
241
|
+
return TaskOutput(answer='4')
|
|
242
|
+
elif inputs.query == 'What is the capital of France?':
|
|
243
|
+
return TaskOutput(answer='Paris')
|
|
244
|
+
return TaskOutput(answer='Unknown') # pragma: no cover
|
|
245
|
+
|
|
246
|
+
report = await example_dataset.evaluate(mock_sync_task)
|
|
247
|
+
|
|
248
|
+
assert report is not None
|
|
249
|
+
assert len(report.cases) == 2
|
|
250
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
251
|
+
{
|
|
252
|
+
'assertions': {
|
|
253
|
+
'correct': {
|
|
254
|
+
'name': 'correct',
|
|
255
|
+
'reason': None,
|
|
256
|
+
'source': {'name': 'SimpleEvaluator', 'arguments': None},
|
|
257
|
+
'value': True,
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
'attributes': {},
|
|
261
|
+
'expected_output': {'answer': '4', 'confidence': 1.0},
|
|
262
|
+
'inputs': {'query': 'What is 2+2?'},
|
|
263
|
+
'labels': {},
|
|
264
|
+
'metadata': {'category': 'general', 'difficulty': 'easy'},
|
|
265
|
+
'metrics': {},
|
|
266
|
+
'name': 'case1',
|
|
267
|
+
'output': {'answer': '4', 'confidence': 1.0},
|
|
268
|
+
'scores': {
|
|
269
|
+
'confidence': {
|
|
270
|
+
'name': 'confidence',
|
|
271
|
+
'reason': None,
|
|
272
|
+
'source': {'name': 'SimpleEvaluator', 'arguments': None},
|
|
273
|
+
'value': 1.0,
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
'span_id': '0000000000000003',
|
|
277
|
+
'task_duration': IsNumber(), # the runtime behavior is not deterministic due to threading
|
|
278
|
+
'total_duration': IsNumber(), # the runtime behavior is not deterministic due to threading
|
|
279
|
+
'trace_id': '00000000000000000000000000000001',
|
|
280
|
+
}
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
|
|
233
284
|
async def test_evaluate_with_concurrency(
|
|
234
285
|
example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata],
|
|
235
286
|
simple_evaluator: type[Evaluator[TaskInput, TaskOutput, TaskMetadata]],
|
|
@@ -248,7 +299,7 @@ async def test_evaluate_with_concurrency(
|
|
|
248
299
|
|
|
249
300
|
assert report is not None
|
|
250
301
|
assert len(report.cases) == 2
|
|
251
|
-
assert report.cases[0]
|
|
302
|
+
assert ReportCaseAdapter.dump_python(report.cases[0]) == snapshot(
|
|
252
303
|
{
|
|
253
304
|
'assertions': {
|
|
254
305
|
'correct': {
|
|
@@ -828,8 +879,8 @@ async def test_dataset_evaluate_with_sync_task(example_dataset: Dataset[TaskInpu
|
|
|
828
879
|
def sync_task(inputs: TaskInput) -> TaskOutput:
|
|
829
880
|
return TaskOutput(answer=inputs.query.upper())
|
|
830
881
|
|
|
831
|
-
report = await example_dataset.evaluate(
|
|
832
|
-
assert report.name == '
|
|
882
|
+
report = await example_dataset.evaluate(sync_task)
|
|
883
|
+
assert report.name == 'sync_task'
|
|
833
884
|
assert len(report.cases) == 2
|
|
834
885
|
|
|
835
886
|
|
|
@@ -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': {
|
|
@@ -34,12 +34,13 @@ async def test_agent_card():
|
|
|
34
34
|
assert response.json() == snapshot(
|
|
35
35
|
{
|
|
36
36
|
'name': 'Agent',
|
|
37
|
+
'description': 'FastA2A Agent',
|
|
37
38
|
'url': 'http://localhost:8000',
|
|
38
39
|
'version': '1.0.0',
|
|
40
|
+
'protocolVersion': '0.2.5',
|
|
39
41
|
'skills': [],
|
|
40
42
|
'defaultInputModes': ['application/json'],
|
|
41
43
|
'defaultOutputModes': ['application/json'],
|
|
42
44
|
'capabilities': {'streaming': False, 'pushNotifications': False, 'stateTransitionHistory': False},
|
|
43
|
-
'authentication': {'schemes': []},
|
|
44
45
|
}
|
|
45
46
|
)
|
|
@@ -1443,9 +1443,9 @@ async def test_bedrock_mistral_tool_result_format(bedrock_provider: BedrockProvi
|
|
|
1443
1443
|
|
|
1444
1444
|
async def test_bedrock_anthropic_no_tool_choice(bedrock_provider: BedrockProvider):
|
|
1445
1445
|
my_tool = ToolDefinition(
|
|
1446
|
-
'my_tool',
|
|
1447
|
-
'This is my tool',
|
|
1448
|
-
{'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
1446
|
+
name='my_tool',
|
|
1447
|
+
description='This is my tool',
|
|
1448
|
+
parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
1449
1449
|
)
|
|
1450
1450
|
mrp = ModelRequestParameters(output_mode='tool', function_tools=[my_tool], allow_text_output=False, output_tools=[])
|
|
1451
1451
|
|
|
@@ -83,14 +83,18 @@ async def test_model_tools(allow_model_requests: None):
|
|
|
83
83
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
84
84
|
tools = [
|
|
85
85
|
ToolDefinition(
|
|
86
|
-
'foo',
|
|
87
|
-
'This is foo',
|
|
88
|
-
{
|
|
86
|
+
name='foo',
|
|
87
|
+
description='This is foo',
|
|
88
|
+
parameters_json_schema={
|
|
89
|
+
'type': 'object',
|
|
90
|
+
'title': 'Foo',
|
|
91
|
+
'properties': {'bar': {'type': 'number', 'title': 'Bar'}},
|
|
92
|
+
},
|
|
89
93
|
),
|
|
90
94
|
ToolDefinition(
|
|
91
|
-
'apple',
|
|
92
|
-
'This is apple',
|
|
93
|
-
{
|
|
95
|
+
name='apple',
|
|
96
|
+
description='This is apple',
|
|
97
|
+
parameters_json_schema={
|
|
94
98
|
'type': 'object',
|
|
95
99
|
'properties': {
|
|
96
100
|
'banana': {'type': 'array', 'title': 'Banana', 'items': {'type': 'number', 'title': 'Bar'}}
|
|
@@ -99,9 +103,14 @@ async def test_model_tools(allow_model_requests: None):
|
|
|
99
103
|
),
|
|
100
104
|
]
|
|
101
105
|
output_tool = ToolDefinition(
|
|
102
|
-
'result',
|
|
103
|
-
'This is the tool for the final Result',
|
|
104
|
-
{
|
|
106
|
+
name='result',
|
|
107
|
+
description='This is the tool for the final Result',
|
|
108
|
+
parameters_json_schema={
|
|
109
|
+
'type': 'object',
|
|
110
|
+
'title': 'Result',
|
|
111
|
+
'properties': {'spam': {'type': 'number'}},
|
|
112
|
+
'required': ['spam'],
|
|
113
|
+
},
|
|
105
114
|
)
|
|
106
115
|
|
|
107
116
|
mrp = ModelRequestParameters(
|
|
@@ -148,9 +157,9 @@ async def test_model_tools(allow_model_requests: None):
|
|
|
148
157
|
async def test_require_response_tool(allow_model_requests: None):
|
|
149
158
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
150
159
|
output_tool = ToolDefinition(
|
|
151
|
-
'result',
|
|
152
|
-
'This is the tool for the final Result',
|
|
153
|
-
{'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
160
|
+
name='result',
|
|
161
|
+
description='This is the tool for the final Result',
|
|
162
|
+
parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
154
163
|
)
|
|
155
164
|
mrp = ModelRequestParameters(
|
|
156
165
|
function_tools=[],
|
|
@@ -235,9 +244,9 @@ async def test_json_def_replaced(allow_model_requests: None):
|
|
|
235
244
|
|
|
236
245
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
237
246
|
output_tool = ToolDefinition(
|
|
238
|
-
'result',
|
|
239
|
-
'This is the tool for the final Result',
|
|
240
|
-
json_schema,
|
|
247
|
+
name='result',
|
|
248
|
+
description='This is the tool for the final Result',
|
|
249
|
+
parameters_json_schema=json_schema,
|
|
241
250
|
)
|
|
242
251
|
mrp = ModelRequestParameters(
|
|
243
252
|
function_tools=[],
|
|
@@ -320,9 +329,9 @@ async def test_json_def_enum(allow_model_requests: None):
|
|
|
320
329
|
)
|
|
321
330
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
322
331
|
output_tool = ToolDefinition(
|
|
323
|
-
'result',
|
|
324
|
-
'This is the tool for the final Result',
|
|
325
|
-
json_schema,
|
|
332
|
+
name='result',
|
|
333
|
+
description='This is the tool for the final Result',
|
|
334
|
+
parameters_json_schema=json_schema,
|
|
326
335
|
)
|
|
327
336
|
mrp = ModelRequestParameters(
|
|
328
337
|
function_tools=[],
|
|
@@ -368,9 +377,9 @@ async def test_json_def_replaced_any_of(allow_model_requests: None):
|
|
|
368
377
|
|
|
369
378
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
370
379
|
output_tool = ToolDefinition(
|
|
371
|
-
'result',
|
|
372
|
-
'This is the tool for the final Result',
|
|
373
|
-
json_schema,
|
|
380
|
+
name='result',
|
|
381
|
+
description='This is the tool for the final Result',
|
|
382
|
+
parameters_json_schema=json_schema,
|
|
374
383
|
)
|
|
375
384
|
mrp = ModelRequestParameters(
|
|
376
385
|
function_tools=[],
|
|
@@ -437,9 +446,9 @@ async def test_json_def_recursive(allow_model_requests: None):
|
|
|
437
446
|
|
|
438
447
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
439
448
|
output_tool = ToolDefinition(
|
|
440
|
-
'result',
|
|
441
|
-
'This is the tool for the final Result',
|
|
442
|
-
json_schema,
|
|
449
|
+
name='result',
|
|
450
|
+
description='This is the tool for the final Result',
|
|
451
|
+
parameters_json_schema=json_schema,
|
|
443
452
|
)
|
|
444
453
|
with pytest.raises(UserError, match=r'Recursive `\$ref`s in JSON Schema are not supported by Gemini'):
|
|
445
454
|
mrp = ModelRequestParameters(
|
|
@@ -476,9 +485,9 @@ async def test_json_def_date(allow_model_requests: None):
|
|
|
476
485
|
|
|
477
486
|
m = GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key='via-arg'))
|
|
478
487
|
output_tool = ToolDefinition(
|
|
479
|
-
'result',
|
|
480
|
-
'This is the tool for the final Result',
|
|
481
|
-
json_schema,
|
|
488
|
+
name='result',
|
|
489
|
+
description='This is the tool for the final Result',
|
|
490
|
+
parameters_json_schema=json_schema,
|
|
482
491
|
)
|
|
483
492
|
mrp = ModelRequestParameters(
|
|
484
493
|
function_tools=[],
|
|
@@ -1095,7 +1095,10 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
|
|
|
1095
1095
|
'$defs': {
|
|
1096
1096
|
'MyDefaultRecursiveDc': {
|
|
1097
1097
|
'properties': {
|
|
1098
|
-
'field': {
|
|
1098
|
+
'field': {
|
|
1099
|
+
'anyOf': [{'$ref': '#/$defs/MyDefaultRecursiveDc'}, {'type': 'null'}],
|
|
1100
|
+
'default': None,
|
|
1101
|
+
}
|
|
1099
1102
|
},
|
|
1100
1103
|
'type': 'object',
|
|
1101
1104
|
},
|
|
@@ -1213,7 +1216,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
|
|
|
1213
1216
|
{
|
|
1214
1217
|
'$defs': {
|
|
1215
1218
|
'MyDefaultDc': {
|
|
1216
|
-
'properties': {'x': {'type': 'integer'}},
|
|
1219
|
+
'properties': {'x': {'default': 1, 'type': 'integer'}},
|
|
1217
1220
|
'type': 'object',
|
|
1218
1221
|
}
|
|
1219
1222
|
},
|
|
@@ -1253,7 +1256,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
|
|
|
1253
1256
|
{
|
|
1254
1257
|
'$defs': {
|
|
1255
1258
|
'MyDefaultDc': {
|
|
1256
|
-
'properties': {'x': {'type': 'integer'}},
|
|
1259
|
+
'properties': {'x': {'default': 1, 'type': 'integer'}},
|
|
1257
1260
|
'type': 'object',
|
|
1258
1261
|
}
|
|
1259
1262
|
},
|
|
@@ -1293,7 +1296,7 @@ def tool_with_tuples(x: tuple[int], y: tuple[str] = ('abc',)) -> str:
|
|
|
1293
1296
|
{
|
|
1294
1297
|
'$defs': {
|
|
1295
1298
|
'MyDefaultDc': {
|
|
1296
|
-
'properties': {'x': {'type': 'integer'}},
|
|
1299
|
+
'properties': {'x': {'default': 1, 'type': 'integer'}},
|
|
1297
1300
|
'type': 'object',
|
|
1298
1301
|
}
|
|
1299
1302
|
},
|
|
@@ -1913,9 +1916,9 @@ def test_openai_model_profile_from_provider():
|
|
|
1913
1916
|
|
|
1914
1917
|
def test_model_profile_strict_not_supported():
|
|
1915
1918
|
my_tool = ToolDefinition(
|
|
1916
|
-
'my_tool',
|
|
1917
|
-
'This is my tool',
|
|
1918
|
-
{'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
1919
|
+
name='my_tool',
|
|
1920
|
+
description='This is my tool',
|
|
1921
|
+
parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
1919
1922
|
strict=True,
|
|
1920
1923
|
)
|
|
1921
1924
|
|
|
@@ -473,9 +473,9 @@ async def test_openai_responses_model_instructions(allow_model_requests: None, o
|
|
|
473
473
|
|
|
474
474
|
def test_model_profile_strict_not_supported():
|
|
475
475
|
my_tool = ToolDefinition(
|
|
476
|
-
'my_tool',
|
|
477
|
-
'This is my tool',
|
|
478
|
-
{'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
476
|
+
name='my_tool',
|
|
477
|
+
description='This is my tool',
|
|
478
|
+
parameters_json_schema={'type': 'object', 'title': 'Result', 'properties': {'spam': {'type': 'number'}}},
|
|
479
479
|
strict=True,
|
|
480
480
|
)
|
|
481
481
|
|