pydantic-ai 0.8.1__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/Makefile +3 -18
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/PKG-INFO +52 -48
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/README.md +47 -40
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/pyproject.toml +10 -16
- pydantic_ai-1.0.0/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +249 -0
- pydantic_ai-1.0.0/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +335 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/conftest.py +2 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_dataset.py +437 -193
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_evaluator_base.py +3 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_evaluators.py +17 -7
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_reporting.py +474 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_reports.py +1 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_utils.py +2 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/ext/test_langchain.py +11 -11
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_file_persistence.py +0 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_mermaid.py +3 -3
- pydantic_ai-1.0.0/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +133 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +73 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +67 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_groq/test_groq_native_output.yaml +89 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +81 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +98 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +322 -0
- pydantic_ai-1.0.0/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +527 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +7 -41
- pydantic_ai-1.0.0/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +1991 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/mock_openai.py +5 -6
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_anthropic.py +10 -11
- pydantic_ai-1.0.0/tests/models/test_bedrock.py +894 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_cohere.py +3 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_download_item.py +1 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_fallback.py +85 -17
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_gemini.py +10 -5
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_gemini_vertex.py +1 -2
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_google.py +61 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_groq.py +305 -4
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_huggingface.py +3 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_instrumented.py +113 -66
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_mistral.py +3 -4
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model_names.py +6 -4
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_openai.py +38 -111
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_openai_responses.py +106 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_google_vertex.py +0 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_groq.py +32 -0
- pydantic_ai-1.0.0/tests/providers/test_litellm.py +160 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_provider_names.py +2 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_ag_ui.py +20 -10
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_agent.py +311 -73
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_cli.py +2 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_examples.py +76 -23
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_live.py +19 -13
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_logfire.py +108 -96
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_mcp.py +13 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_messages.py +78 -1
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_streaming.py +166 -43
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_temporal.py +416 -30
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_tenacity.py +59 -2
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_tools.py +481 -80
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_toolsets.py +23 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_usage_limits.py +70 -3
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/typed_agent.py +14 -14
- pydantic_ai-0.8.1/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -2053
- pydantic_ai-0.8.1/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -1413
- pydantic_ai-0.8.1/tests/models/test_bedrock.py +0 -1523
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/.gitignore +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/LICENSE +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/import_examples.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.8.1/tests/models/cassettes/test_openai → pydantic_ai-1.0.0/tests/models/cassettes/test_openai_responses}/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/parts_from_messages.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_cerebras.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_moonshotai.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_ollama.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_builtin_tools.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_deps.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_direct.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_settings.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/test_utils.py +0 -0
- {pydantic_ai-0.8.1 → pydantic_ai-1.0.0}/tests/typed_graph.py +0 -0
|
@@ -8,18 +8,13 @@
|
|
|
8
8
|
.pre-commit: ## Check that pre-commit is installed
|
|
9
9
|
@pre-commit -V || echo 'Please install pre-commit: https://pre-commit.com/'
|
|
10
10
|
|
|
11
|
-
.PHONY: .deno
|
|
12
|
-
.deno: ## Check that deno is installed
|
|
13
|
-
@deno --version > /dev/null 2>&1 || (printf "\033[0;31m✖ Error: deno is not installed, but is needed for mcp-run-python\033[0m\n Please install deno: https://docs.deno.com/runtime/getting_started/installation/\n" && exit 1)
|
|
14
|
-
|
|
15
11
|
.PHONY: install
|
|
16
|
-
install: .uv .pre-commit
|
|
12
|
+
install: .uv .pre-commit ## Install the package, dependencies, and pre-commit for local development
|
|
17
13
|
uv sync --frozen --all-extras --all-packages --group lint --group docs
|
|
18
14
|
pre-commit install --install-hooks
|
|
19
15
|
|
|
20
16
|
.PHONY: install-all-python
|
|
21
17
|
install-all-python: ## Install and synchronize an interpreter for every python version
|
|
22
|
-
UV_PROJECT_ENVIRONMENT=.venv39 uv sync --python 3.9 --frozen --all-extras --all-packages --group lint --group docs
|
|
23
18
|
UV_PROJECT_ENVIRONMENT=.venv310 uv sync --python 3.10 --frozen --all-extras --all-packages --group lint --group docs
|
|
24
19
|
UV_PROJECT_ENVIRONMENT=.venv311 uv sync --python 3.11 --frozen --all-extras --all-packages --group lint --group docs
|
|
25
20
|
UV_PROJECT_ENVIRONMENT=.venv312 uv sync --python 3.12 --frozen --all-extras --all-packages --group lint --group docs
|
|
@@ -39,10 +34,6 @@ lint: ## Lint the code
|
|
|
39
34
|
uv run ruff format --check
|
|
40
35
|
uv run ruff check
|
|
41
36
|
|
|
42
|
-
.PHONY: lint-js
|
|
43
|
-
lint-js: ## Lint JS and TS code
|
|
44
|
-
cd mcp-run-python && deno task lint-format
|
|
45
|
-
|
|
46
37
|
.PHONY: typecheck-pyright
|
|
47
38
|
typecheck-pyright:
|
|
48
39
|
@# PYRIGHT_PYTHON_IGNORE_WARNINGS avoids the overhead of making a request to github on every invocation
|
|
@@ -60,13 +51,12 @@ typecheck-both: typecheck-pyright typecheck-mypy
|
|
|
60
51
|
|
|
61
52
|
.PHONY: test
|
|
62
53
|
test: ## Run tests and collect coverage data
|
|
63
|
-
uv run coverage run -m pytest -n auto --dist=loadgroup
|
|
54
|
+
uv run coverage run -m pytest -n auto --dist=loadgroup --durations=20
|
|
64
55
|
@uv run coverage combine
|
|
65
56
|
@uv run coverage report
|
|
66
57
|
|
|
67
58
|
.PHONY: test-all-python
|
|
68
|
-
test-all-python: ## Run tests on Python 3.
|
|
69
|
-
UV_PROJECT_ENVIRONMENT=.venv39 uv run --python 3.9 --all-extras --all-packages coverage run -p -m pytest
|
|
59
|
+
test-all-python: ## Run tests on Python 3.10 to 3.13
|
|
70
60
|
UV_PROJECT_ENVIRONMENT=.venv310 uv run --python 3.10 --all-extras --all-packages coverage run -p -m pytest
|
|
71
61
|
UV_PROJECT_ENVIRONMENT=.venv311 uv run --python 3.11 --all-extras --all-packages coverage run -p -m pytest
|
|
72
62
|
UV_PROJECT_ENVIRONMENT=.venv312 uv run --python 3.12 --all-extras --all-packages coverage run -p -m pytest
|
|
@@ -79,11 +69,6 @@ testcov: test ## Run tests and generate an HTML coverage report
|
|
|
79
69
|
@echo "building coverage html"
|
|
80
70
|
@uv run coverage html
|
|
81
71
|
|
|
82
|
-
.PHONY: test-mrp
|
|
83
|
-
test-mrp: ## Build and tests of mcp-run-python
|
|
84
|
-
cd mcp-run-python && deno task build
|
|
85
|
-
uv run --package mcp-run-python pytest mcp-run-python -v
|
|
86
|
-
|
|
87
72
|
.PHONY: update-examples
|
|
88
73
|
update-examples: ## Update documentation examples
|
|
89
74
|
uv run -m pytest --update-examples tests/test_examples.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs
|
|
5
5
|
Project-URL: Homepage, https://ai.pydantic.dev
|
|
6
6
|
Project-URL: Source, https://github.com/pydantic/pydantic-ai
|
|
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/pydantic/pydantic-ai/releases
|
|
|
9
9
|
Author-email: Samuel Colvin <samuel@pydantic.dev>, Marcelo Trylesinski <marcelotryle@gmail.com>, David Montague <david@pydantic.dev>, Alex Hall <alex@pydantic.dev>, Douwe Maan <douwe@pydantic.dev>
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Classifier: Development Status ::
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Framework :: Pydantic
|
|
14
14
|
Classifier: Framework :: Pydantic :: 2
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -19,7 +19,6 @@ Classifier: Operating System :: OS Independent
|
|
|
19
19
|
Classifier: Programming Language :: Python
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
21
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -27,14 +26,12 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
27
26
|
Classifier: Topic :: Internet
|
|
28
27
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
29
28
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
|
-
Requires-Python: >=3.
|
|
31
|
-
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,temporal,vertexai]==0.
|
|
29
|
+
Requires-Python: >=3.10
|
|
30
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.0.0
|
|
32
31
|
Provides-Extra: a2a
|
|
33
32
|
Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
|
|
34
33
|
Provides-Extra: examples
|
|
35
|
-
Requires-Dist: pydantic-ai-examples==0.
|
|
36
|
-
Provides-Extra: logfire
|
|
37
|
-
Requires-Dist: logfire>=3.14.1; extra == 'logfire'
|
|
34
|
+
Requires-Dist: pydantic-ai-examples==1.0.0; extra == 'examples'
|
|
38
35
|
Description-Content-Type: text/markdown
|
|
39
36
|
|
|
40
37
|
<div align="center">
|
|
@@ -46,7 +43,7 @@ Description-Content-Type: text/markdown
|
|
|
46
43
|
</a>
|
|
47
44
|
</div>
|
|
48
45
|
<div align="center">
|
|
49
|
-
<
|
|
46
|
+
<h3>GenAI Agent Framework, the Pydantic way</h3>
|
|
50
47
|
</div>
|
|
51
48
|
<div align="center">
|
|
52
49
|
<a href="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain"><img src="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml/badge.svg?event=push" alt="CI"></a>
|
|
@@ -63,43 +60,48 @@ Description-Content-Type: text/markdown
|
|
|
63
60
|
|
|
64
61
|
---
|
|
65
62
|
|
|
66
|
-
Pydantic AI is a Python agent framework designed to
|
|
63
|
+
### <em>Pydantic AI is a Python agent framework designed to help you quickly, confidently, and painlessly build production grade applications and workflows with Generative AI.</em>
|
|
67
64
|
|
|
68
|
-
FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev).
|
|
69
65
|
|
|
70
|
-
|
|
66
|
+
FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev) and modern Python features like type hints.
|
|
71
67
|
|
|
72
|
-
|
|
68
|
+
Yet despite virtually every Python agent framework and LLM library using Pydantic Validation, when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
|
|
69
|
+
|
|
70
|
+
We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app and agent development.
|
|
73
71
|
|
|
74
72
|
## Why use Pydantic AI
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
1. **Built by the Pydantic Team**:
|
|
75
|
+
[Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
|
|
76
|
+
|
|
77
|
+
2. **Model-agnostic**:
|
|
78
|
+
Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
|
|
79
|
+
|
|
80
|
+
3. **Seamless Observability**:
|
|
81
|
+
Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
|
|
78
82
|
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
4. **Fully Type-safe**:
|
|
84
|
+
Designed to give your IDE or AI coding agent as much context as possible for auto-completion and [type checking](https://ai.pydantic.dev/agents#static-type-checking), moving entire classes of errors from runtime to write-time for a bit of that Rust "if it compiles, it works" feel.
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
5. **Powerful Evals**:
|
|
87
|
+
Enables you to systematically test and [evaluate](https://ai.pydantic.dev/evals) the performance and accuracy of the agentic systems you build, and monitor the performance over time in Pydantic Logfire.
|
|
84
88
|
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
6. **MCP, A2A, and AG-UI**:
|
|
90
|
+
Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Agent2Agent](https://ai.pydantic.dev/a2a), and [AG-UI](https://ai.pydantic.dev/ag-ui) standards to give your agent access to external tools and data, let it interoperate with other agents, and build interactive applications with streaming event-based communication.
|
|
87
91
|
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
7. **Human-in-the-Loop Tool Approval**:
|
|
93
|
+
Easily lets you flag that certain tool calls [require approval](https://ai.pydantic.dev/deferred-tools#human-in-the-loop-tool-approval) before they can proceed, possibly depending on tool call arguments, conversation history, or user preferences.
|
|
90
94
|
|
|
91
|
-
|
|
92
|
-
|
|
95
|
+
8. **Durable Execution**:
|
|
96
|
+
Enables you to build [durable agents](https://ai.pydantic.dev/temporal) that can preserve their progress across transient API failures and application errors or restarts, and handle long-running, asynchronous, and human-in-the-loop workflows with production-grade reliability.
|
|
93
97
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
This is useful for testing and eval-driven iterative development.
|
|
98
|
+
9. **Streamed Outputs**:
|
|
99
|
+
Provides the ability to [stream](https://ai.pydantic.dev/output#streamed-results) structured output continuously, with immediate validation, ensuring real time access to generated data.
|
|
97
100
|
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
10. **Graph Support**:
|
|
102
|
+
Provides a powerful way to define [graphs](https://ai.pydantic.dev/graph) using type hints, for use in complex applications where standard control flow can degrade to spaghetti code.
|
|
100
103
|
|
|
101
|
-
-
|
|
102
|
-
[Pydantic Graph](https://ai.pydantic.dev/graph) provides a powerful way to define graphs using typing hints, this is useful in complex applications where standard control flow can degrade to spaghetti code.
|
|
104
|
+
Realistically though, no list is going to be as convincing as [giving it a try](#next-steps) and seeing how it makes you feel!
|
|
103
105
|
|
|
104
106
|
## Hello World Example
|
|
105
107
|
|
|
@@ -110,15 +112,13 @@ from pydantic_ai import Agent
|
|
|
110
112
|
|
|
111
113
|
# Define a very simple agent including the model to use, you can also set the model when running the agent.
|
|
112
114
|
agent = Agent(
|
|
113
|
-
'
|
|
114
|
-
# Register
|
|
115
|
-
# For more complex dynamically-generated
|
|
116
|
-
|
|
115
|
+
'anthropic:claude-sonnet-4-0',
|
|
116
|
+
# Register static instructions using a keyword argument to the agent.
|
|
117
|
+
# For more complex dynamically-generated instructions, see the example below.
|
|
118
|
+
instructions='Be concise, reply with one sentence.',
|
|
117
119
|
)
|
|
118
120
|
|
|
119
121
|
# Run the agent synchronously, conducting a conversation with the LLM.
|
|
120
|
-
# Here the exchange should be very short: Pydantic AI will send the system prompt and the user query to the LLM,
|
|
121
|
-
# the model will return a text response. See below for a more complex run.
|
|
122
122
|
result = agent.run_sync('Where does "hello world" come from?')
|
|
123
123
|
print(result.output)
|
|
124
124
|
"""
|
|
@@ -126,9 +126,11 @@ The first known use of "hello, world" was in a 1974 textbook about the C program
|
|
|
126
126
|
"""
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
_(This example is complete, it can be run "as is")_
|
|
129
|
+
_(This example is complete, it can be run "as is", assuming you've [installed the `pydantic_ai` package](https://ai.pydantic.dev/install))_
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
The exchange will be very short: Pydantic AI will send the instructions and the user prompt to the LLM, and the model will return a text response.
|
|
132
|
+
|
|
133
|
+
Not very interesting yet, but we can easily add [tools](https://ai.pydantic.dev/tools), [dynamic instructions](https://ai.pydantic.dev/agents#instructions), and [structured outputs](https://ai.pydantic.dev/output) to build more powerful agents.
|
|
132
134
|
|
|
133
135
|
## Tools & Dependency Injection Example
|
|
134
136
|
|
|
@@ -146,14 +148,14 @@ from bank_database import DatabaseConn
|
|
|
146
148
|
|
|
147
149
|
|
|
148
150
|
# SupportDependencies is used to pass data, connections, and logic into the model that will be needed when running
|
|
149
|
-
#
|
|
151
|
+
# instructions and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
|
|
150
152
|
@dataclass
|
|
151
153
|
class SupportDependencies:
|
|
152
154
|
customer_id: int
|
|
153
155
|
db: DatabaseConn
|
|
154
156
|
|
|
155
157
|
|
|
156
|
-
# This
|
|
158
|
+
# This Pydantic model defines the structure of the output returned by the agent.
|
|
157
159
|
class SupportOutput(BaseModel):
|
|
158
160
|
support_advice: str = Field(description='Advice returned to the customer')
|
|
159
161
|
block_card: bool = Field(description="Whether to block the customer's card")
|
|
@@ -164,28 +166,28 @@ class SupportOutput(BaseModel):
|
|
|
164
166
|
# Agents are generic in the type of dependencies they accept and the type of output they return.
|
|
165
167
|
# In this case, the support agent has type `Agent[SupportDependencies, SupportOutput]`.
|
|
166
168
|
support_agent = Agent(
|
|
167
|
-
'openai:gpt-
|
|
169
|
+
'openai:gpt-5',
|
|
168
170
|
deps_type=SupportDependencies,
|
|
169
171
|
# The response from the agent will, be guaranteed to be a SupportOutput,
|
|
170
172
|
# if validation fails the agent is prompted to try again.
|
|
171
173
|
output_type=SupportOutput,
|
|
172
|
-
|
|
174
|
+
instructions=(
|
|
173
175
|
'You are a support agent in our bank, give the '
|
|
174
176
|
'customer support and judge the risk level of their query.'
|
|
175
177
|
),
|
|
176
178
|
)
|
|
177
179
|
|
|
178
180
|
|
|
179
|
-
# Dynamic
|
|
181
|
+
# Dynamic instructions can make use of dependency injection.
|
|
180
182
|
# Dependencies are carried via the `RunContext` argument, which is parameterized with the `deps_type` from above.
|
|
181
183
|
# If the type annotation here is wrong, static type checkers will catch it.
|
|
182
|
-
@support_agent.
|
|
184
|
+
@support_agent.instructions
|
|
183
185
|
async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
|
|
184
186
|
customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
|
|
185
187
|
return f"The customer's name is {customer_name!r}"
|
|
186
188
|
|
|
187
189
|
|
|
188
|
-
# `tool` let you register functions which the LLM may call while responding to a user.
|
|
190
|
+
# The `tool` decorator let you register functions which the LLM may call while responding to a user.
|
|
189
191
|
# Again, dependencies are carried via `RunContext`, any other arguments become the tool schema passed to the LLM.
|
|
190
192
|
# Pydantic is used to validate these arguments, and errors are passed back to the LLM so it can retry.
|
|
191
193
|
@support_agent.tool
|
|
@@ -226,8 +228,10 @@ async def main():
|
|
|
226
228
|
|
|
227
229
|
## Next Steps
|
|
228
230
|
|
|
229
|
-
To try Pydantic AI yourself, follow the instructions [in the examples](https://ai.pydantic.dev/examples/).
|
|
231
|
+
To try Pydantic AI for yourself, [install it](https://ai.pydantic.dev/install) and follow the instructions [in the examples](https://ai.pydantic.dev/examples/setup).
|
|
230
232
|
|
|
231
233
|
Read the [docs](https://ai.pydantic.dev/agents/) to learn more about building applications with Pydantic AI.
|
|
232
234
|
|
|
233
235
|
Read the [API Reference](https://ai.pydantic.dev/api/agent/) to understand Pydantic AI's interface.
|
|
236
|
+
|
|
237
|
+
Join [Slack](https://logfire.pydantic.dev/docs/join-slack/) or file an issue on [GitHub](https://github.com/pydantic/pydantic-ai/issues) if you have any questions.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</a>
|
|
8
8
|
</div>
|
|
9
9
|
<div align="center">
|
|
10
|
-
<
|
|
10
|
+
<h3>GenAI Agent Framework, the Pydantic way</h3>
|
|
11
11
|
</div>
|
|
12
12
|
<div align="center">
|
|
13
13
|
<a href="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain"><img src="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml/badge.svg?event=push" alt="CI"></a>
|
|
@@ -24,43 +24,48 @@
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
Pydantic AI is a Python agent framework designed to
|
|
27
|
+
### <em>Pydantic AI is a Python agent framework designed to help you quickly, confidently, and painlessly build production grade applications and workflows with Generative AI.</em>
|
|
28
28
|
|
|
29
|
-
FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev).
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
FastAPI revolutionized web development by offering an innovative and ergonomic design, built on the foundation of [Pydantic Validation](https://docs.pydantic.dev) and modern Python features like type hints.
|
|
32
31
|
|
|
33
|
-
|
|
32
|
+
Yet despite virtually every Python agent framework and LLM library using Pydantic Validation, when we began to use LLMs in [Pydantic Logfire](https://pydantic.dev/logfire), we couldn't find anything that gave us the same feeling.
|
|
33
|
+
|
|
34
|
+
We built Pydantic AI with one simple aim: to bring that FastAPI feeling to GenAI app and agent development.
|
|
34
35
|
|
|
35
36
|
## Why use Pydantic AI
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
1. **Built by the Pydantic Team**:
|
|
39
|
+
[Pydantic Validation](https://docs.pydantic.dev/latest/) is the validation layer of the OpenAI SDK, the Google ADK, the Anthropic SDK, LangChain, LlamaIndex, AutoGPT, Transformers, CrewAI, Instructor and many more. _Why use the derivative when you can go straight to the source?_ :smiley:
|
|
40
|
+
|
|
41
|
+
2. **Model-agnostic**:
|
|
42
|
+
Supports virtually every [model](https://ai.pydantic.dev/models/overview) and provider: OpenAI, Anthropic, Gemini, DeepSeek, Grok, Cohere, Mistral, and Perplexity; Azure AI Foundry, Amazon Bedrock, Google Vertex AI, Ollama, LiteLLM, Groq, OpenRouter, Together AI, Fireworks AI, Cerebras, Hugging Face, GitHub, Heroku, Vercel. If your favorite model or provider is not listed, you can easily implement a [custom model](https://ai.pydantic.dev/models/overview#custom-models).
|
|
43
|
+
|
|
44
|
+
3. **Seamless Observability**:
|
|
45
|
+
Tightly [integrates](https://ai.pydantic.dev/logfire) with [Pydantic Logfire](https://pydantic.dev/logfire), our general-purpose OpenTelemetry observability platform, for real-time debugging, evals-based performance monitoring, and behavior, tracing, and cost tracking. If you already have an observability platform that supports OTel, you can [use that too](https://ai.pydantic.dev/logfire#alternative-observability-backends).
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
4. **Fully Type-safe**:
|
|
48
|
+
Designed to give your IDE or AI coding agent as much context as possible for auto-completion and [type checking](https://ai.pydantic.dev/agents#static-type-checking), moving entire classes of errors from runtime to write-time for a bit of that Rust "if it compiles, it works" feel.
|
|
42
49
|
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
5. **Powerful Evals**:
|
|
51
|
+
Enables you to systematically test and [evaluate](https://ai.pydantic.dev/evals) the performance and accuracy of the agentic systems you build, and monitor the performance over time in Pydantic Logfire.
|
|
45
52
|
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
6. **MCP, A2A, and AG-UI**:
|
|
54
|
+
Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Agent2Agent](https://ai.pydantic.dev/a2a), and [AG-UI](https://ai.pydantic.dev/ag-ui) standards to give your agent access to external tools and data, let it interoperate with other agents, and build interactive applications with streaming event-based communication.
|
|
48
55
|
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
7. **Human-in-the-Loop Tool Approval**:
|
|
57
|
+
Easily lets you flag that certain tool calls [require approval](https://ai.pydantic.dev/deferred-tools#human-in-the-loop-tool-approval) before they can proceed, possibly depending on tool call arguments, conversation history, or user preferences.
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
8. **Durable Execution**:
|
|
60
|
+
Enables you to build [durable agents](https://ai.pydantic.dev/temporal) that can preserve their progress across transient API failures and application errors or restarts, and handle long-running, asynchronous, and human-in-the-loop workflows with production-grade reliability.
|
|
54
61
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
This is useful for testing and eval-driven iterative development.
|
|
62
|
+
9. **Streamed Outputs**:
|
|
63
|
+
Provides the ability to [stream](https://ai.pydantic.dev/output#streamed-results) structured output continuously, with immediate validation, ensuring real time access to generated data.
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
10. **Graph Support**:
|
|
66
|
+
Provides a powerful way to define [graphs](https://ai.pydantic.dev/graph) using type hints, for use in complex applications where standard control flow can degrade to spaghetti code.
|
|
61
67
|
|
|
62
|
-
-
|
|
63
|
-
[Pydantic Graph](https://ai.pydantic.dev/graph) provides a powerful way to define graphs using typing hints, this is useful in complex applications where standard control flow can degrade to spaghetti code.
|
|
68
|
+
Realistically though, no list is going to be as convincing as [giving it a try](#next-steps) and seeing how it makes you feel!
|
|
64
69
|
|
|
65
70
|
## Hello World Example
|
|
66
71
|
|
|
@@ -71,15 +76,13 @@ from pydantic_ai import Agent
|
|
|
71
76
|
|
|
72
77
|
# Define a very simple agent including the model to use, you can also set the model when running the agent.
|
|
73
78
|
agent = Agent(
|
|
74
|
-
'
|
|
75
|
-
# Register
|
|
76
|
-
# For more complex dynamically-generated
|
|
77
|
-
|
|
79
|
+
'anthropic:claude-sonnet-4-0',
|
|
80
|
+
# Register static instructions using a keyword argument to the agent.
|
|
81
|
+
# For more complex dynamically-generated instructions, see the example below.
|
|
82
|
+
instructions='Be concise, reply with one sentence.',
|
|
78
83
|
)
|
|
79
84
|
|
|
80
85
|
# Run the agent synchronously, conducting a conversation with the LLM.
|
|
81
|
-
# Here the exchange should be very short: Pydantic AI will send the system prompt and the user query to the LLM,
|
|
82
|
-
# the model will return a text response. See below for a more complex run.
|
|
83
86
|
result = agent.run_sync('Where does "hello world" come from?')
|
|
84
87
|
print(result.output)
|
|
85
88
|
"""
|
|
@@ -87,9 +90,11 @@ The first known use of "hello, world" was in a 1974 textbook about the C program
|
|
|
87
90
|
"""
|
|
88
91
|
```
|
|
89
92
|
|
|
90
|
-
_(This example is complete, it can be run "as is")_
|
|
93
|
+
_(This example is complete, it can be run "as is", assuming you've [installed the `pydantic_ai` package](https://ai.pydantic.dev/install))_
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
The exchange will be very short: Pydantic AI will send the instructions and the user prompt to the LLM, and the model will return a text response.
|
|
96
|
+
|
|
97
|
+
Not very interesting yet, but we can easily add [tools](https://ai.pydantic.dev/tools), [dynamic instructions](https://ai.pydantic.dev/agents#instructions), and [structured outputs](https://ai.pydantic.dev/output) to build more powerful agents.
|
|
93
98
|
|
|
94
99
|
## Tools & Dependency Injection Example
|
|
95
100
|
|
|
@@ -107,14 +112,14 @@ from bank_database import DatabaseConn
|
|
|
107
112
|
|
|
108
113
|
|
|
109
114
|
# SupportDependencies is used to pass data, connections, and logic into the model that will be needed when running
|
|
110
|
-
#
|
|
115
|
+
# instructions and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
|
|
111
116
|
@dataclass
|
|
112
117
|
class SupportDependencies:
|
|
113
118
|
customer_id: int
|
|
114
119
|
db: DatabaseConn
|
|
115
120
|
|
|
116
121
|
|
|
117
|
-
# This
|
|
122
|
+
# This Pydantic model defines the structure of the output returned by the agent.
|
|
118
123
|
class SupportOutput(BaseModel):
|
|
119
124
|
support_advice: str = Field(description='Advice returned to the customer')
|
|
120
125
|
block_card: bool = Field(description="Whether to block the customer's card")
|
|
@@ -125,28 +130,28 @@ class SupportOutput(BaseModel):
|
|
|
125
130
|
# Agents are generic in the type of dependencies they accept and the type of output they return.
|
|
126
131
|
# In this case, the support agent has type `Agent[SupportDependencies, SupportOutput]`.
|
|
127
132
|
support_agent = Agent(
|
|
128
|
-
'openai:gpt-
|
|
133
|
+
'openai:gpt-5',
|
|
129
134
|
deps_type=SupportDependencies,
|
|
130
135
|
# The response from the agent will, be guaranteed to be a SupportOutput,
|
|
131
136
|
# if validation fails the agent is prompted to try again.
|
|
132
137
|
output_type=SupportOutput,
|
|
133
|
-
|
|
138
|
+
instructions=(
|
|
134
139
|
'You are a support agent in our bank, give the '
|
|
135
140
|
'customer support and judge the risk level of their query.'
|
|
136
141
|
),
|
|
137
142
|
)
|
|
138
143
|
|
|
139
144
|
|
|
140
|
-
# Dynamic
|
|
145
|
+
# Dynamic instructions can make use of dependency injection.
|
|
141
146
|
# Dependencies are carried via the `RunContext` argument, which is parameterized with the `deps_type` from above.
|
|
142
147
|
# If the type annotation here is wrong, static type checkers will catch it.
|
|
143
|
-
@support_agent.
|
|
148
|
+
@support_agent.instructions
|
|
144
149
|
async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
|
|
145
150
|
customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
|
|
146
151
|
return f"The customer's name is {customer_name!r}"
|
|
147
152
|
|
|
148
153
|
|
|
149
|
-
# `tool` let you register functions which the LLM may call while responding to a user.
|
|
154
|
+
# The `tool` decorator let you register functions which the LLM may call while responding to a user.
|
|
150
155
|
# Again, dependencies are carried via `RunContext`, any other arguments become the tool schema passed to the LLM.
|
|
151
156
|
# Pydantic is used to validate these arguments, and errors are passed back to the LLM so it can retry.
|
|
152
157
|
@support_agent.tool
|
|
@@ -187,8 +192,10 @@ async def main():
|
|
|
187
192
|
|
|
188
193
|
## Next Steps
|
|
189
194
|
|
|
190
|
-
To try Pydantic AI yourself, follow the instructions [in the examples](https://ai.pydantic.dev/examples/).
|
|
195
|
+
To try Pydantic AI for yourself, [install it](https://ai.pydantic.dev/install) and follow the instructions [in the examples](https://ai.pydantic.dev/examples/setup).
|
|
191
196
|
|
|
192
197
|
Read the [docs](https://ai.pydantic.dev/agents/) to learn more about building applications with Pydantic AI.
|
|
193
198
|
|
|
194
199
|
Read the [API Reference](https://ai.pydantic.dev/api/agent/) to understand Pydantic AI's interface.
|
|
200
|
+
|
|
201
|
+
Join [Slack](https://logfire.pydantic.dev/docs/join-slack/) or file an issue on [GitHub](https://github.com/pydantic/pydantic-ai/issues) if you have any questions.
|
|
@@ -24,11 +24,10 @@ authors = [
|
|
|
24
24
|
license = "MIT"
|
|
25
25
|
readme = "README.md"
|
|
26
26
|
classifiers = [
|
|
27
|
-
"Development Status ::
|
|
27
|
+
"Development Status :: 5 - Production/Stable",
|
|
28
28
|
"Programming Language :: Python",
|
|
29
29
|
"Programming Language :: Python :: 3",
|
|
30
30
|
"Programming Language :: Python :: 3 :: Only",
|
|
31
|
-
"Programming Language :: Python :: 3.9",
|
|
32
31
|
"Programming Language :: Python :: 3.10",
|
|
33
32
|
"Programming Language :: Python :: 3.11",
|
|
34
33
|
"Programming Language :: Python :: 3.12",
|
|
@@ -43,16 +42,15 @@ classifiers = [
|
|
|
43
42
|
"Framework :: Pydantic",
|
|
44
43
|
"Framework :: Pydantic :: 2",
|
|
45
44
|
]
|
|
46
|
-
requires-python = ">=3.
|
|
45
|
+
requires-python = ">=3.10"
|
|
47
46
|
|
|
48
47
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
|
49
48
|
dependencies = [
|
|
50
|
-
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,huggingface,cli,mcp,evals,ag-ui,retries,temporal]=={{ version }}",
|
|
49
|
+
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,huggingface,cli,mcp,evals,ag-ui,retries,temporal,logfire]=={{ version }}",
|
|
51
50
|
]
|
|
52
51
|
|
|
53
52
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies]
|
|
54
53
|
examples = ["pydantic-ai-examples=={{ version }}"]
|
|
55
|
-
logfire = ["logfire>=3.14.1"]
|
|
56
54
|
a2a = ["fasta2a>=0.4.1"]
|
|
57
55
|
|
|
58
56
|
[project.urls]
|
|
@@ -76,7 +74,6 @@ members = [
|
|
|
76
74
|
"pydantic_ai_slim",
|
|
77
75
|
"pydantic_evals",
|
|
78
76
|
"pydantic_graph",
|
|
79
|
-
"mcp-run-python",
|
|
80
77
|
"clai",
|
|
81
78
|
"examples",
|
|
82
79
|
]
|
|
@@ -105,6 +102,7 @@ dev = [
|
|
|
105
102
|
# Needed for PyCharm users
|
|
106
103
|
"pip>=25.2",
|
|
107
104
|
"genai-prices>=0.0.22",
|
|
105
|
+
"mcp-run-python>=0.0.20",
|
|
108
106
|
]
|
|
109
107
|
lint = ["mypy>=1.11.2", "pyright>=1.1.390", "ruff>=0.6.9"]
|
|
110
108
|
docs = [
|
|
@@ -113,6 +111,7 @@ docs = [
|
|
|
113
111
|
"mkdocs>=1.6.1",
|
|
114
112
|
"mkdocs-glightbox>=0.4.0",
|
|
115
113
|
"mkdocs-llmstxt>=0.2.0",
|
|
114
|
+
'mkdocs-redirects>=1.2.2',
|
|
116
115
|
"mkdocs-material[imaging]>=9.5.45",
|
|
117
116
|
"mkdocstrings-python>=1.12.2",
|
|
118
117
|
"griffe-warnings-deprecated>=1.1.0",
|
|
@@ -127,12 +126,11 @@ include = ["/README.md", "/Makefile", "/tests"]
|
|
|
127
126
|
|
|
128
127
|
[tool.ruff]
|
|
129
128
|
line-length = 120
|
|
130
|
-
target-version = "
|
|
129
|
+
target-version = "py310"
|
|
131
130
|
include = [
|
|
132
131
|
"pydantic_ai_slim/**/*.py",
|
|
133
132
|
"pydantic_evals/**/*.py",
|
|
134
133
|
"pydantic_graph/**/*.py",
|
|
135
|
-
"mcp-run-python/**/*.py",
|
|
136
134
|
"examples/**/*.py",
|
|
137
135
|
"clai/**/*.py",
|
|
138
136
|
"tests/**/*.py",
|
|
@@ -162,7 +160,7 @@ ignore = [
|
|
|
162
160
|
|
|
163
161
|
[tool.ruff.lint.isort]
|
|
164
162
|
combine-as-imports = true
|
|
165
|
-
known-first-party = ["pydantic_ai"]
|
|
163
|
+
known-first-party = ["pydantic_ai", "pydantic_evals", "pydantic_graph"]
|
|
166
164
|
# weird issue with ruff thinking fasta2a is still editable
|
|
167
165
|
known-third-party = ["fasta2a"]
|
|
168
166
|
|
|
@@ -178,7 +176,6 @@ docstring-code-format = false
|
|
|
178
176
|
quote-style = "single"
|
|
179
177
|
|
|
180
178
|
[tool.ruff.lint.per-file-ignores]
|
|
181
|
-
"mcp-run-python/**/*.py" = ["D", "TID251"]
|
|
182
179
|
"examples/**/*.py" = ["D101", "D103"]
|
|
183
180
|
"tests/**/*.py" = ["D"]
|
|
184
181
|
"docs/**/*.py" = ["D"]
|
|
@@ -194,7 +191,6 @@ include = [
|
|
|
194
191
|
"pydantic_ai_slim",
|
|
195
192
|
"pydantic_evals",
|
|
196
193
|
"pydantic_graph",
|
|
197
|
-
"mcp-run-python",
|
|
198
194
|
"tests",
|
|
199
195
|
"examples",
|
|
200
196
|
"clai",
|
|
@@ -208,10 +204,8 @@ executionEnvironments = [
|
|
|
208
204
|
]
|
|
209
205
|
exclude = [
|
|
210
206
|
"examples/pydantic_ai_examples/weather_agent_gradio.py",
|
|
211
|
-
"
|
|
212
|
-
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk requires Python 3.10+ so cannot be added as an (optional) dependency
|
|
207
|
+
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk is too niche to be added as an (optional) dependency
|
|
213
208
|
]
|
|
214
|
-
extraPaths = ["mcp-run-python/stubs"]
|
|
215
209
|
|
|
216
210
|
[tool.mypy]
|
|
217
211
|
files = "tests/typed_agent.py,tests/typed_graph.py"
|
|
@@ -253,7 +247,7 @@ include = [
|
|
|
253
247
|
omit = [
|
|
254
248
|
"tests/test_live.py",
|
|
255
249
|
"tests/example_modules/*.py",
|
|
256
|
-
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk
|
|
250
|
+
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk is too niche to be added as an (optional) dependency
|
|
257
251
|
]
|
|
258
252
|
branch = true
|
|
259
253
|
# Disable include-ignored warnings as --source is enabled automatically causing a self conflict as per:
|
|
@@ -268,7 +262,7 @@ disable_warnings = ["include-ignored"]
|
|
|
268
262
|
source = [
|
|
269
263
|
".",
|
|
270
264
|
"/home/runner/work/pydantic-ai/pydantic-ai",
|
|
271
|
-
"/System/Volumes/Data/home/runner/work/pydantic-ai/pydantic-ai"
|
|
265
|
+
"/System/Volumes/Data/home/runner/work/pydantic-ai/pydantic-ai",
|
|
272
266
|
]
|
|
273
267
|
|
|
274
268
|
# https://coverage.readthedocs.io/en/latest/config.html#report
|