pydantic-ai 0.2.1__tar.gz → 0.2.2__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.2.1 → pydantic_ai-0.2.2}/PKG-INFO +3 -3
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_cli.py +98 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/.gitignore +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/LICENSE +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/Makefile +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/README.md +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/pyproject.toml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/__init__.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/conftest.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/import_examples.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_openai.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_agent.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_deps.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_examples.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_live.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_logfire.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_messages.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_settings.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_tools.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/test_utils.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
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.2.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,groq,mcp,mistral,openai,vertexai]==0.2.2
|
|
32
32
|
Provides-Extra: examples
|
|
33
|
-
Requires-Dist: pydantic-ai-examples==0.2.
|
|
33
|
+
Requires-Dist: pydantic-ai-examples==0.2.2; extra == 'examples'
|
|
34
34
|
Provides-Extra: logfire
|
|
35
35
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
from io import StringIO
|
|
2
3
|
from typing import Any
|
|
3
4
|
|
|
@@ -36,6 +37,72 @@ def test_invalid_model(capfd: CaptureFixture[str]):
|
|
|
36
37
|
)
|
|
37
38
|
|
|
38
39
|
|
|
40
|
+
def test_agent_flag(capfd: CaptureFixture[str], mocker: MockerFixture, env: TestEnv):
|
|
41
|
+
env.set('OPENAI_API_KEY', 'test')
|
|
42
|
+
|
|
43
|
+
# Create a dynamic module using types.ModuleType
|
|
44
|
+
import types
|
|
45
|
+
|
|
46
|
+
test_module = types.ModuleType('test_module')
|
|
47
|
+
|
|
48
|
+
# Create and add agent to the module
|
|
49
|
+
test_agent = Agent()
|
|
50
|
+
test_agent.model = TestModel(custom_output_text='Hello from custom agent')
|
|
51
|
+
setattr(test_module, 'custom_agent', test_agent)
|
|
52
|
+
|
|
53
|
+
# Register the module in sys.modules
|
|
54
|
+
sys.modules['test_module'] = test_module
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
# Mock ask_agent to avoid actual execution but capture the agent
|
|
58
|
+
mock_ask = mocker.patch('pydantic_ai._cli.ask_agent')
|
|
59
|
+
|
|
60
|
+
# Test CLI with custom agent
|
|
61
|
+
assert cli(['--agent', 'test_module:custom_agent', 'hello']) == 0
|
|
62
|
+
|
|
63
|
+
# Verify the output contains the custom agent message
|
|
64
|
+
assert 'Using custom agent: test_module:custom_agent' in capfd.readouterr().out
|
|
65
|
+
|
|
66
|
+
# Verify ask_agent was called with our custom agent
|
|
67
|
+
mock_ask.assert_called_once()
|
|
68
|
+
assert mock_ask.call_args[0][0] is test_agent
|
|
69
|
+
|
|
70
|
+
finally:
|
|
71
|
+
# Clean up by removing the module from sys.modules
|
|
72
|
+
if 'test_module' in sys.modules:
|
|
73
|
+
del sys.modules['test_module']
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_agent_flag_non_agent(capfd: CaptureFixture[str], mocker: MockerFixture, env: TestEnv):
|
|
77
|
+
env.set('OPENAI_API_KEY', 'test')
|
|
78
|
+
|
|
79
|
+
# Create a dynamic module using types.ModuleType
|
|
80
|
+
import types
|
|
81
|
+
|
|
82
|
+
test_module = types.ModuleType('test_module')
|
|
83
|
+
|
|
84
|
+
# Create and add agent to the module
|
|
85
|
+
test_agent = 'Not an Agent object'
|
|
86
|
+
setattr(test_module, 'custom_agent', test_agent)
|
|
87
|
+
|
|
88
|
+
# Register the module in sys.modules
|
|
89
|
+
sys.modules['test_module'] = test_module
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
assert cli(['--agent', 'test_module:custom_agent', 'hello']) == 1
|
|
93
|
+
assert 'is not an Agent' in capfd.readouterr().out
|
|
94
|
+
|
|
95
|
+
finally:
|
|
96
|
+
# Clean up by removing the module from sys.modules
|
|
97
|
+
if 'test_module' in sys.modules:
|
|
98
|
+
del sys.modules['test_module']
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def test_agent_flag_bad_module_variable_path(capfd: CaptureFixture[str], mocker: MockerFixture, env: TestEnv):
|
|
102
|
+
assert cli(['--agent', 'bad_path', 'hello']) == 1
|
|
103
|
+
assert 'Agent must be specified in "module:variable" format' in capfd.readouterr().out
|
|
104
|
+
|
|
105
|
+
|
|
39
106
|
def test_list_models(capfd: CaptureFixture[str]):
|
|
40
107
|
assert cli(['--list-models']) == 0
|
|
41
108
|
output = capfd.readouterr().out.splitlines()
|
|
@@ -153,3 +220,34 @@ def test_code_theme_dark(mocker: MockerFixture, env: TestEnv):
|
|
|
153
220
|
mock_run_chat.assert_awaited_once_with(
|
|
154
221
|
IsInstance(PromptSession), True, IsInstance(Agent), IsInstance(Console), 'monokai', 'pai'
|
|
155
222
|
)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def test_agent_to_cli_sync(mocker: MockerFixture, env: TestEnv):
|
|
226
|
+
env.set('OPENAI_API_KEY', 'test')
|
|
227
|
+
mock_run_chat = mocker.patch('pydantic_ai._cli.run_chat')
|
|
228
|
+
cli_agent.to_cli_sync()
|
|
229
|
+
mock_run_chat.assert_awaited_once_with(
|
|
230
|
+
session=IsInstance(PromptSession),
|
|
231
|
+
stream=True,
|
|
232
|
+
agent=IsInstance(Agent),
|
|
233
|
+
console=IsInstance(Console),
|
|
234
|
+
code_theme='monokai',
|
|
235
|
+
prog_name='pydantic-ai',
|
|
236
|
+
deps=None,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
@pytest.mark.anyio
|
|
241
|
+
async def test_agent_to_cli_async(mocker: MockerFixture, env: TestEnv):
|
|
242
|
+
env.set('OPENAI_API_KEY', 'test')
|
|
243
|
+
mock_run_chat = mocker.patch('pydantic_ai._cli.run_chat')
|
|
244
|
+
await cli_agent.to_cli()
|
|
245
|
+
mock_run_chat.assert_awaited_once_with(
|
|
246
|
+
session=IsInstance(PromptSession),
|
|
247
|
+
stream=True,
|
|
248
|
+
agent=IsInstance(Agent),
|
|
249
|
+
console=IsInstance(Console),
|
|
250
|
+
code_theme='monokai',
|
|
251
|
+
prog_name='pydantic-ai',
|
|
252
|
+
deps=None,
|
|
253
|
+
)
|
|
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.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_error.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_image.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/cassettes/test_mcp/test_tool_returning_none.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/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.2.1 → pydantic_ai-0.2.2}/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.2.1 → pydantic_ai-0.2.2}/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
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_image_url_input.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/tests/models/cassettes/test_gemini/test_video_url_input.yaml
RENAMED
|
File without changes
|
{pydantic_ai-0.2.1 → pydantic_ai-0.2.2}/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.2.1 → pydantic_ai-0.2.2}/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.2.1 → pydantic_ai-0.2.2}/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.2.1 → pydantic_ai-0.2.2}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|