pydantic-ai 0.1.12__tar.gz → 0.2.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.
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/PKG-INFO +3 -3
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_anthropic.py +16 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_gemini.py +48 -11
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_instrumented.py +2 -2
- pydantic_ai-0.2.1/tests/models/test_model_request_parameters.py +12 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_parts_manager.py +3 -3
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/.gitignore +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/LICENSE +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/Makefile +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/README.md +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/pyproject.toml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/__init__.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/conftest.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/import_examples.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_openai.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_agent.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_cli.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_deps.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_examples.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_live.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_logfire.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_messages.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_settings.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_tools.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/test_utils.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.1.12 → pydantic_ai-0.2.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.1
|
|
3
|
+
Version: 0.2.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,9 @@ Classifier: Topic :: Internet
|
|
|
28
28
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Requires-Python: >=3.9
|
|
31
|
-
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,groq,mcp,mistral,openai,vertexai]==0.1
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,groq,mcp,mistral,openai,vertexai]==0.2.1
|
|
32
32
|
Provides-Extra: examples
|
|
33
|
-
Requires-Dist: pydantic-ai-examples==0.1
|
|
33
|
+
Requires-Dist: pydantic-ai-examples==0.2.1; extra == 'examples'
|
|
34
34
|
Provides-Extra: logfire
|
|
35
35
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
@@ -927,6 +927,22 @@ async def test_anthropic_model_instructions(allow_model_requests: None, anthropi
|
|
|
927
927
|
)
|
|
928
928
|
|
|
929
929
|
|
|
930
|
+
async def test_multiple_system_prompt_formatting(allow_model_requests: None):
|
|
931
|
+
c = completion_message([TextBlock(text='world', type='text')], AnthropicUsage(input_tokens=5, output_tokens=10))
|
|
932
|
+
mock_client = MockAnthropic().create_mock(c)
|
|
933
|
+
m = AnthropicModel('claude-3-5-haiku-latest', provider=AnthropicProvider(anthropic_client=mock_client))
|
|
934
|
+
agent = Agent(m, system_prompt='this is the system prompt')
|
|
935
|
+
|
|
936
|
+
@agent.system_prompt
|
|
937
|
+
def system_prompt() -> str:
|
|
938
|
+
return 'and this is another'
|
|
939
|
+
|
|
940
|
+
await agent.run('hello')
|
|
941
|
+
completion_kwargs = get_mock_chat_completion_kwargs(mock_client)[0]
|
|
942
|
+
assert 'system' in completion_kwargs
|
|
943
|
+
assert completion_kwargs['system'] == 'this is the system prompt\n\nand this is another'
|
|
944
|
+
|
|
945
|
+
|
|
930
946
|
def anth_msg(usage: AnthropicUsage) -> AnthropicMessage:
|
|
931
947
|
return AnthropicMessage(
|
|
932
948
|
id='x',
|
|
@@ -164,9 +164,17 @@ async def test_require_response_tool(allow_model_requests: None):
|
|
|
164
164
|
|
|
165
165
|
|
|
166
166
|
async def test_json_def_replaced(allow_model_requests: None):
|
|
167
|
+
class Axis(BaseModel):
|
|
168
|
+
label: str
|
|
169
|
+
|
|
170
|
+
class Chart(BaseModel):
|
|
171
|
+
x_axis: Axis
|
|
172
|
+
y_axis: Axis
|
|
173
|
+
|
|
167
174
|
class Location(BaseModel):
|
|
168
175
|
lat: float
|
|
169
176
|
lng: float = 1.1
|
|
177
|
+
chart: Chart
|
|
170
178
|
|
|
171
179
|
class Locations(BaseModel):
|
|
172
180
|
locations: list[Location]
|
|
@@ -175,15 +183,28 @@ async def test_json_def_replaced(allow_model_requests: None):
|
|
|
175
183
|
assert json_schema == snapshot(
|
|
176
184
|
{
|
|
177
185
|
'$defs': {
|
|
186
|
+
'Axis': {
|
|
187
|
+
'properties': {'label': {'title': 'Label', 'type': 'string'}},
|
|
188
|
+
'required': ['label'],
|
|
189
|
+
'title': 'Axis',
|
|
190
|
+
'type': 'object',
|
|
191
|
+
},
|
|
192
|
+
'Chart': {
|
|
193
|
+
'properties': {'x_axis': {'$ref': '#/$defs/Axis'}, 'y_axis': {'$ref': '#/$defs/Axis'}},
|
|
194
|
+
'required': ['x_axis', 'y_axis'],
|
|
195
|
+
'title': 'Chart',
|
|
196
|
+
'type': 'object',
|
|
197
|
+
},
|
|
178
198
|
'Location': {
|
|
179
199
|
'properties': {
|
|
180
200
|
'lat': {'title': 'Lat', 'type': 'number'},
|
|
181
201
|
'lng': {'default': 1.1, 'title': 'Lng', 'type': 'number'},
|
|
202
|
+
'chart': {'$ref': '#/$defs/Chart'},
|
|
182
203
|
},
|
|
183
|
-
'required': ['lat'],
|
|
204
|
+
'required': ['lat', 'chart'],
|
|
184
205
|
'title': 'Location',
|
|
185
206
|
'type': 'object',
|
|
186
|
-
}
|
|
207
|
+
},
|
|
187
208
|
},
|
|
188
209
|
'properties': {'locations': {'items': {'$ref': '#/$defs/Location'}, 'title': 'Locations', 'type': 'array'}},
|
|
189
210
|
'required': ['locations'],
|
|
@@ -201,20 +222,36 @@ async def test_json_def_replaced(allow_model_requests: None):
|
|
|
201
222
|
mrp = ModelRequestParameters(function_tools=[], allow_text_output=True, output_tools=[output_tool])
|
|
202
223
|
mrp = m.customize_request_parameters(mrp)
|
|
203
224
|
assert m._get_tools(mrp) == snapshot(
|
|
204
|
-
|
|
205
|
-
function_declarations
|
|
206
|
-
|
|
207
|
-
name
|
|
208
|
-
description
|
|
209
|
-
parameters
|
|
225
|
+
{
|
|
226
|
+
'function_declarations': [
|
|
227
|
+
{
|
|
228
|
+
'name': 'result',
|
|
229
|
+
'description': 'This is the tool for the final Result',
|
|
230
|
+
'parameters': {
|
|
210
231
|
'properties': {
|
|
211
232
|
'locations': {
|
|
212
233
|
'items': {
|
|
213
234
|
'properties': {
|
|
214
235
|
'lat': {'type': 'number'},
|
|
215
236
|
'lng': {'type': 'number'},
|
|
237
|
+
'chart': {
|
|
238
|
+
'properties': {
|
|
239
|
+
'x_axis': {
|
|
240
|
+
'properties': {'label': {'type': 'string'}},
|
|
241
|
+
'required': ['label'],
|
|
242
|
+
'type': 'object',
|
|
243
|
+
},
|
|
244
|
+
'y_axis': {
|
|
245
|
+
'properties': {'label': {'type': 'string'}},
|
|
246
|
+
'required': ['label'],
|
|
247
|
+
'type': 'object',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
'required': ['x_axis', 'y_axis'],
|
|
251
|
+
'type': 'object',
|
|
252
|
+
},
|
|
216
253
|
},
|
|
217
|
-
'required': ['lat'],
|
|
254
|
+
'required': ['lat', 'chart'],
|
|
218
255
|
'type': 'object',
|
|
219
256
|
},
|
|
220
257
|
'type': 'array',
|
|
@@ -223,9 +260,9 @@ async def test_json_def_replaced(allow_model_requests: None):
|
|
|
223
260
|
'required': ['locations'],
|
|
224
261
|
'type': 'object',
|
|
225
262
|
},
|
|
226
|
-
|
|
263
|
+
}
|
|
227
264
|
]
|
|
228
|
-
|
|
265
|
+
}
|
|
229
266
|
)
|
|
230
267
|
|
|
231
268
|
|
|
@@ -36,7 +36,7 @@ from pydantic_ai.models.instrumented import InstrumentationSettings, Instrumente
|
|
|
36
36
|
from pydantic_ai.settings import ModelSettings
|
|
37
37
|
from pydantic_ai.usage import Usage
|
|
38
38
|
|
|
39
|
-
from ..conftest import try_import
|
|
39
|
+
from ..conftest import IsStr, try_import
|
|
40
40
|
|
|
41
41
|
with try_import() as imports_successful:
|
|
42
42
|
from logfire.testing import CaptureLogfire
|
|
@@ -796,7 +796,7 @@ def test_messages_to_otel_events_image_url(document_content: BinaryContent):
|
|
|
796
796
|
'event.name': 'gen_ai.user.message',
|
|
797
797
|
},
|
|
798
798
|
{
|
|
799
|
-
'content': ['user_prompt6', {'kind': 'binary'}],
|
|
799
|
+
'content': ['user_prompt6', {'kind': 'binary', 'content': IsStr(), 'media_type': 'application/pdf'}],
|
|
800
800
|
'role': 'user',
|
|
801
801
|
'gen_ai.message.index': 5,
|
|
802
802
|
'event.name': 'gen_ai.user.message',
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from pydantic import TypeAdapter
|
|
2
|
+
|
|
3
|
+
from pydantic_ai.models import ModelRequestParameters
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_model_request_parameters_are_serializable():
|
|
7
|
+
params = ModelRequestParameters(function_tools=[], allow_text_output=False, output_tools=[])
|
|
8
|
+
assert TypeAdapter(ModelRequestParameters).dump_python(params) == {
|
|
9
|
+
'function_tools': [],
|
|
10
|
+
'allow_text_output': False,
|
|
11
|
+
'output_tools': [],
|
|
12
|
+
}
|
|
@@ -104,7 +104,7 @@ def test_handle_tool_call_deltas():
|
|
|
104
104
|
PartDeltaEvent(
|
|
105
105
|
index=0,
|
|
106
106
|
delta=ToolCallPartDelta(
|
|
107
|
-
tool_name_delta='1', args_delta=None, tool_call_id=
|
|
107
|
+
tool_name_delta='1', args_delta=None, tool_call_id=IsStr(), part_delta_kind='tool_call'
|
|
108
108
|
),
|
|
109
109
|
event_kind='part_delta',
|
|
110
110
|
)
|
|
@@ -118,7 +118,7 @@ def test_handle_tool_call_deltas():
|
|
|
118
118
|
PartDeltaEvent(
|
|
119
119
|
index=0,
|
|
120
120
|
delta=ToolCallPartDelta(
|
|
121
|
-
tool_name_delta=None, args_delta='"value1"}', tool_call_id=
|
|
121
|
+
tool_name_delta=None, args_delta='"value1"}', tool_call_id=IsStr(), part_delta_kind='tool_call'
|
|
122
122
|
),
|
|
123
123
|
event_kind='part_delta',
|
|
124
124
|
)
|
|
@@ -196,7 +196,7 @@ def test_handle_tool_call_part():
|
|
|
196
196
|
PartDeltaEvent(
|
|
197
197
|
index=0,
|
|
198
198
|
delta=ToolCallPartDelta(
|
|
199
|
-
tool_name_delta=None, args_delta='"value1"}', tool_call_id=
|
|
199
|
+
tool_name_delta=None, args_delta='"value1"}', tool_call_id=IsStr(), part_delta_kind='tool_call'
|
|
200
200
|
),
|
|
201
201
|
event_kind='part_delta',
|
|
202
202
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_error.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_image.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_none.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_mcp/test_tool_returning_str.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/cassettes/test_settings/test_stop_settings[groq].yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_extra_headers.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_groq/test_image_url_input.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_extra_headers.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.1.12 → pydantic_ai-0.2.1}/tests/models/cassettes/test_openai/test_user_id.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|