pydantic-ai 1.0.12__tar.gz → 1.0.14__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-1.0.12 → pydantic_ai-1.0.14}/PKG-INFO +4 -4
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_dataset.py +40 -8
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_fallback.py +3 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_huggingface.py +0 -45
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model_settings.py +42 -1
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_agent.py +363 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_direct.py +10 -10
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_logfire.py +321 -27
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_mcp.py +10 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/.gitignore +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/LICENSE +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/Makefile +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/README.md +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/pyproject.toml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/dummy.txt +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_mcp/test_tool_returning_unstructured_dict.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/conftest.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/evals/utils.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/example_modules/README.md +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/ext/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_state.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/import_examples.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/mcp_server.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_memory_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_output_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_text_parts_ahead_of_built_in_tool_call.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_text_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools_web_search.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_non_reasoning_model_no_item_ids.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/mock_openai.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_google.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_groq.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_openai.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/parts_from_messages.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/__init__.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_cerebras.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_gateway.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_github.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_litellm.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_moonshotai.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_ollama.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_together.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_a2a.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_builtin_tools.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_cli.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_dbos.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_deps.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_examples.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_function_schema.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_history_processor.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_live.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_messages.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_settings.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_streaming.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_temporal.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_tenacity.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_tools.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_toolsets.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/test_utils.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/typed_agent.py +0 -0
- {pydantic_ai-1.0.12 → pydantic_ai-1.0.14}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.14
|
|
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
|
|
@@ -26,13 +26,13 @@ Classifier: Topic :: Internet
|
|
|
26
26
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
27
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
28
|
Requires-Python: >=3.10
|
|
29
|
-
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.0.
|
|
29
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.0.14
|
|
30
30
|
Provides-Extra: a2a
|
|
31
31
|
Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
|
|
32
32
|
Provides-Extra: dbos
|
|
33
|
-
Requires-Dist: pydantic-ai-slim[dbos]==1.0.
|
|
33
|
+
Requires-Dist: pydantic-ai-slim[dbos]==1.0.14; extra == 'dbos'
|
|
34
34
|
Provides-Extra: examples
|
|
35
|
-
Requires-Dist: pydantic-ai-examples==1.0.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==1.0.14; extra == 'examples'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
37
37
|
|
|
38
38
|
<div align="center">
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
+
import yaml
|
|
10
11
|
from dirty_equals import HasRepr, IsNumber
|
|
11
12
|
from inline_snapshot import snapshot
|
|
12
13
|
from pydantic import BaseModel, TypeAdapter
|
|
@@ -106,7 +107,7 @@ def example_cases() -> list[Case[TaskInput, TaskOutput, TaskMetadata]]:
|
|
|
106
107
|
def example_dataset(
|
|
107
108
|
example_cases: list[Case[TaskInput, TaskOutput, TaskMetadata]],
|
|
108
109
|
) -> Dataset[TaskInput, TaskOutput, TaskMetadata]:
|
|
109
|
-
return Dataset[TaskInput, TaskOutput, TaskMetadata](cases=example_cases)
|
|
110
|
+
return Dataset[TaskInput, TaskOutput, TaskMetadata](name='example', cases=example_cases)
|
|
110
111
|
|
|
111
112
|
|
|
112
113
|
@pytest.fixture
|
|
@@ -820,10 +821,29 @@ async def test_serialization_to_yaml(example_dataset: Dataset[TaskInput, TaskOut
|
|
|
820
821
|
# Test loading back
|
|
821
822
|
loaded_dataset = Dataset[TaskInput, TaskOutput, TaskMetadata].from_file(yaml_path)
|
|
822
823
|
assert len(loaded_dataset.cases) == 2
|
|
824
|
+
assert loaded_dataset.name == 'example'
|
|
823
825
|
assert loaded_dataset.cases[0].name == 'case1'
|
|
824
826
|
assert loaded_dataset.cases[0].inputs.query == 'What is 2+2?'
|
|
825
827
|
|
|
826
828
|
|
|
829
|
+
async def test_deserializing_without_name(
|
|
830
|
+
example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata], tmp_path: Path
|
|
831
|
+
):
|
|
832
|
+
"""Test serializing a dataset to YAML."""
|
|
833
|
+
# Save the dataset
|
|
834
|
+
yaml_path = tmp_path / 'test_cases.yaml'
|
|
835
|
+
example_dataset.to_file(yaml_path)
|
|
836
|
+
|
|
837
|
+
# Rewrite the file _without_ a name to test deserializing a name-less file
|
|
838
|
+
obj = yaml.safe_load(yaml_path.read_text())
|
|
839
|
+
obj.pop('name', None)
|
|
840
|
+
yaml_path.write_text(yaml.dump(obj))
|
|
841
|
+
|
|
842
|
+
# Test loading results in the name coming from the filename stem
|
|
843
|
+
loaded_dataset = Dataset[TaskInput, TaskOutput, TaskMetadata].from_file(yaml_path)
|
|
844
|
+
assert loaded_dataset.name == 'test_cases'
|
|
845
|
+
|
|
846
|
+
|
|
827
847
|
async def test_serialization_to_json(example_dataset: Dataset[TaskInput, TaskOutput, TaskMetadata], tmp_path: Path):
|
|
828
848
|
"""Test serializing a dataset to JSON."""
|
|
829
849
|
json_path = tmp_path / 'test_cases.json'
|
|
@@ -855,6 +875,7 @@ def test_serialization_errors(tmp_path: Path):
|
|
|
855
875
|
async def test_from_text():
|
|
856
876
|
"""Test creating a dataset from text."""
|
|
857
877
|
dataset_dict = {
|
|
878
|
+
'name': 'my dataset',
|
|
858
879
|
'cases': [
|
|
859
880
|
{
|
|
860
881
|
'name': '1',
|
|
@@ -874,6 +895,7 @@ async def test_from_text():
|
|
|
874
895
|
}
|
|
875
896
|
|
|
876
897
|
loaded_dataset = Dataset[TaskInput, TaskOutput, TaskMetadata].from_text(json.dumps(dataset_dict))
|
|
898
|
+
assert loaded_dataset.name == 'my dataset'
|
|
877
899
|
assert loaded_dataset.cases == snapshot(
|
|
878
900
|
[
|
|
879
901
|
Case(
|
|
@@ -1241,7 +1263,7 @@ async def test_dataset_evaluate_with_custom_name(example_dataset: Dataset[TaskIn
|
|
|
1241
1263
|
async def task(inputs: TaskInput) -> TaskOutput:
|
|
1242
1264
|
return TaskOutput(answer=inputs.query.upper())
|
|
1243
1265
|
|
|
1244
|
-
report = await example_dataset.evaluate(task,
|
|
1266
|
+
report = await example_dataset.evaluate(task, task_name='custom_task')
|
|
1245
1267
|
assert report.name == 'custom_task'
|
|
1246
1268
|
|
|
1247
1269
|
|
|
@@ -1491,16 +1513,26 @@ async def test_evaluate_async_logfire(
|
|
|
1491
1513
|
(
|
|
1492
1514
|
'evaluate {name}',
|
|
1493
1515
|
{
|
|
1494
|
-
'name': 'mock_async_task',
|
|
1495
|
-
'n_cases': 2,
|
|
1496
1516
|
'assertion_pass_rate': 1.0,
|
|
1497
|
-
'
|
|
1498
|
-
'
|
|
1499
|
-
'logfire.span_type': 'span',
|
|
1517
|
+
'dataset_name': 'example',
|
|
1518
|
+
'gen_ai.operation.name': 'experiment',
|
|
1500
1519
|
'logfire.json_schema': {
|
|
1520
|
+
'properties': {
|
|
1521
|
+
'assertion_pass_rate': {},
|
|
1522
|
+
'dataset_name': {},
|
|
1523
|
+
'gen_ai.operation.name': {},
|
|
1524
|
+
'n_cases': {},
|
|
1525
|
+
'name': {},
|
|
1526
|
+
'task_name': {},
|
|
1527
|
+
},
|
|
1501
1528
|
'type': 'object',
|
|
1502
|
-
'properties': {'name': {}, 'n_cases': {}, 'assertion_pass_rate': {}},
|
|
1503
1529
|
},
|
|
1530
|
+
'logfire.msg': 'evaluate mock_async_task',
|
|
1531
|
+
'logfire.msg_template': 'evaluate {name}',
|
|
1532
|
+
'logfire.span_type': 'span',
|
|
1533
|
+
'n_cases': 2,
|
|
1534
|
+
'name': 'mock_async_task',
|
|
1535
|
+
'task_name': 'mock_async_task',
|
|
1504
1536
|
},
|
|
1505
1537
|
),
|
|
1506
1538
|
(
|
|
@@ -169,6 +169,7 @@ def test_first_failed_instrumented(capfire: CaptureLogfire) -> None:
|
|
|
169
169
|
'attributes': {
|
|
170
170
|
'model_name': 'fallback:function:failure_response:,function:success_response:',
|
|
171
171
|
'agent_name': 'agent',
|
|
172
|
+
'gen_ai.agent.name': 'agent',
|
|
172
173
|
'logfire.msg': 'agent run',
|
|
173
174
|
'logfire.span_type': 'span',
|
|
174
175
|
'gen_ai.usage.input_tokens': 51,
|
|
@@ -268,6 +269,7 @@ async def test_first_failed_instrumented_stream(capfire: CaptureLogfire) -> None
|
|
|
268
269
|
'attributes': {
|
|
269
270
|
'model_name': 'fallback:function::failure_response_stream,function::success_response_stream',
|
|
270
271
|
'agent_name': 'agent',
|
|
272
|
+
'gen_ai.agent.name': 'agent',
|
|
271
273
|
'logfire.msg': 'agent run',
|
|
272
274
|
'logfire.span_type': 'span',
|
|
273
275
|
'gen_ai.usage.input_tokens': 50,
|
|
@@ -375,6 +377,7 @@ def test_all_failed_instrumented(capfire: CaptureLogfire) -> None:
|
|
|
375
377
|
'attributes': {
|
|
376
378
|
'model_name': 'fallback:function:failure_response:,function:failure_response:',
|
|
377
379
|
'agent_name': 'agent',
|
|
380
|
+
'gen_ai.agent.name': 'agent',
|
|
378
381
|
'logfire.msg': 'agent run',
|
|
379
382
|
'logfire.span_type': 'span',
|
|
380
383
|
'pydantic_ai.all_messages': [{'role': 'user', 'parts': [{'type': 'text', 'content': 'hello'}]}],
|
|
@@ -893,51 +893,6 @@ text 2\
|
|
|
893
893
|
)
|
|
894
894
|
|
|
895
895
|
|
|
896
|
-
@pytest.mark.parametrize('strict', [True, False, None])
|
|
897
|
-
async def test_tool_strict_mode(allow_model_requests: None, strict: bool | None):
|
|
898
|
-
tool_call = ChatCompletionOutputToolCall.parse_obj_as_instance( # type:ignore
|
|
899
|
-
{
|
|
900
|
-
'function': ChatCompletionOutputFunctionDefinition.parse_obj_as_instance( # type:ignore
|
|
901
|
-
{
|
|
902
|
-
'name': 'my_tool',
|
|
903
|
-
'arguments': '{"x": 42}',
|
|
904
|
-
}
|
|
905
|
-
),
|
|
906
|
-
'id': '1',
|
|
907
|
-
'type': 'function',
|
|
908
|
-
}
|
|
909
|
-
)
|
|
910
|
-
responses = [
|
|
911
|
-
completion_message(
|
|
912
|
-
ChatCompletionOutputMessage.parse_obj_as_instance( # type:ignore
|
|
913
|
-
{
|
|
914
|
-
'content': None,
|
|
915
|
-
'role': 'assistant',
|
|
916
|
-
'tool_calls': [tool_call],
|
|
917
|
-
}
|
|
918
|
-
)
|
|
919
|
-
),
|
|
920
|
-
completion_message(ChatCompletionOutputMessage(content='final response', role='assistant')), # type: ignore
|
|
921
|
-
]
|
|
922
|
-
mock_client = MockHuggingFace.create_mock(responses)
|
|
923
|
-
model = HuggingFaceModel('hf-model', provider=HuggingFaceProvider(hf_client=mock_client, api_key='x'))
|
|
924
|
-
agent = Agent(model)
|
|
925
|
-
|
|
926
|
-
@agent.tool_plain(strict=strict)
|
|
927
|
-
def my_tool(x: int) -> int:
|
|
928
|
-
return x
|
|
929
|
-
|
|
930
|
-
result = await agent.run('hello')
|
|
931
|
-
assert result.output == 'final response'
|
|
932
|
-
|
|
933
|
-
kwargs = get_mock_chat_completion_kwargs(mock_client)[0]
|
|
934
|
-
tools = kwargs['tools']
|
|
935
|
-
if strict is not None:
|
|
936
|
-
assert tools[0]['function']['strict'] is strict
|
|
937
|
-
else:
|
|
938
|
-
assert 'strict' not in tools[0]['function']
|
|
939
|
-
|
|
940
|
-
|
|
941
896
|
@pytest.mark.parametrize(
|
|
942
897
|
'content_item, error_message',
|
|
943
898
|
[
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
from pydantic_ai import Agent
|
|
8
|
+
from pydantic_ai.direct import model_request as direct_model_request
|
|
9
|
+
from pydantic_ai.messages import ModelMessage, ModelRequest, ModelResponse, TextPart
|
|
10
|
+
from pydantic_ai.models import ModelRequestParameters
|
|
6
11
|
from pydantic_ai.models.function import AgentInfo, FunctionModel
|
|
7
12
|
from pydantic_ai.models.instrumented import InstrumentedModel
|
|
8
13
|
from pydantic_ai.models.test import TestModel
|
|
@@ -161,3 +166,39 @@ def test_empty_settings_objects():
|
|
|
161
166
|
assert captured_settings is not None
|
|
162
167
|
assert captured_settings.get('temperature') == 0.75
|
|
163
168
|
assert len(captured_settings) == 1 # Only one setting should be present
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def test_direct_model_request_merges_model_settings():
|
|
172
|
+
"""Ensure direct requests merge model defaults with provided run settings."""
|
|
173
|
+
|
|
174
|
+
captured_settings = None
|
|
175
|
+
|
|
176
|
+
async def capture(messages: list[ModelMessage], agent_info: AgentInfo) -> ModelResponse:
|
|
177
|
+
nonlocal captured_settings
|
|
178
|
+
captured_settings = agent_info.model_settings
|
|
179
|
+
return ModelResponse(parts=[TextPart('ok')])
|
|
180
|
+
|
|
181
|
+
model = FunctionModel(
|
|
182
|
+
capture,
|
|
183
|
+
settings=ModelSettings(max_tokens=50, temperature=0.3),
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
messages: list[ModelMessage] = [ModelRequest.user_text_prompt('hi')]
|
|
187
|
+
run_settings = ModelSettings(temperature=0.9, top_p=0.2)
|
|
188
|
+
|
|
189
|
+
async def _run() -> ModelResponse:
|
|
190
|
+
return await direct_model_request(
|
|
191
|
+
model,
|
|
192
|
+
messages,
|
|
193
|
+
model_settings=run_settings,
|
|
194
|
+
model_request_parameters=ModelRequestParameters(),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
response = asyncio.run(_run())
|
|
198
|
+
|
|
199
|
+
assert response.parts == [TextPart('ok')]
|
|
200
|
+
assert captured_settings == {
|
|
201
|
+
'max_tokens': 50,
|
|
202
|
+
'temperature': 0.9,
|
|
203
|
+
'top_p': 0.2,
|
|
204
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import json
|
|
2
3
|
import re
|
|
3
4
|
import sys
|
|
@@ -5148,3 +5149,365 @@ async def test_consecutive_model_responses_in_history():
|
|
|
5148
5149
|
),
|
|
5149
5150
|
]
|
|
5150
5151
|
)
|
|
5152
|
+
|
|
5153
|
+
|
|
5154
|
+
def test_override_instructions_basic():
|
|
5155
|
+
"""Test that override can override instructions."""
|
|
5156
|
+
agent = Agent('test')
|
|
5157
|
+
|
|
5158
|
+
@agent.instructions
|
|
5159
|
+
def instr_fn() -> str:
|
|
5160
|
+
return 'SHOULD_BE_IGNORED'
|
|
5161
|
+
|
|
5162
|
+
with capture_run_messages() as base_messages:
|
|
5163
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='baseline'))
|
|
5164
|
+
|
|
5165
|
+
base_req = base_messages[0]
|
|
5166
|
+
assert isinstance(base_req, ModelRequest)
|
|
5167
|
+
assert base_req.instructions == 'SHOULD_BE_IGNORED'
|
|
5168
|
+
|
|
5169
|
+
with agent.override(instructions='OVERRIDE'):
|
|
5170
|
+
with capture_run_messages() as messages:
|
|
5171
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='ok'))
|
|
5172
|
+
|
|
5173
|
+
req = messages[0]
|
|
5174
|
+
assert isinstance(req, ModelRequest)
|
|
5175
|
+
assert req.instructions == 'OVERRIDE'
|
|
5176
|
+
|
|
5177
|
+
|
|
5178
|
+
def test_override_reset_after_context():
|
|
5179
|
+
"""Test that instructions are reset after exiting the override context."""
|
|
5180
|
+
agent = Agent('test', instructions='ORIG')
|
|
5181
|
+
|
|
5182
|
+
with agent.override(instructions='NEW'):
|
|
5183
|
+
with capture_run_messages() as messages_new:
|
|
5184
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5185
|
+
|
|
5186
|
+
with capture_run_messages() as messages_orig:
|
|
5187
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5188
|
+
|
|
5189
|
+
req_new = messages_new[0]
|
|
5190
|
+
assert isinstance(req_new, ModelRequest)
|
|
5191
|
+
req_orig = messages_orig[0]
|
|
5192
|
+
assert isinstance(req_orig, ModelRequest)
|
|
5193
|
+
assert req_new.instructions == 'NEW'
|
|
5194
|
+
assert req_orig.instructions == 'ORIG'
|
|
5195
|
+
|
|
5196
|
+
|
|
5197
|
+
def test_override_none_clears_instructions():
|
|
5198
|
+
"""Test that passing None for instructions clears all instructions."""
|
|
5199
|
+
agent = Agent('test', instructions='BASE')
|
|
5200
|
+
|
|
5201
|
+
@agent.instructions
|
|
5202
|
+
def instr_fn() -> str: # pragma: no cover - ignored under override
|
|
5203
|
+
return 'ALSO_BASE'
|
|
5204
|
+
|
|
5205
|
+
with agent.override(instructions=None):
|
|
5206
|
+
with capture_run_messages() as messages:
|
|
5207
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='ok'))
|
|
5208
|
+
|
|
5209
|
+
req = messages[0]
|
|
5210
|
+
assert isinstance(req, ModelRequest)
|
|
5211
|
+
assert req.instructions is None
|
|
5212
|
+
|
|
5213
|
+
|
|
5214
|
+
def test_override_instructions_callable_replaces_functions():
|
|
5215
|
+
"""Override with a callable should replace existing instruction functions."""
|
|
5216
|
+
agent = Agent('test')
|
|
5217
|
+
|
|
5218
|
+
@agent.instructions
|
|
5219
|
+
def base_fn() -> str:
|
|
5220
|
+
return 'BASE_FN'
|
|
5221
|
+
|
|
5222
|
+
def override_fn() -> str:
|
|
5223
|
+
return 'OVERRIDE_FN'
|
|
5224
|
+
|
|
5225
|
+
with capture_run_messages() as base_messages:
|
|
5226
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='baseline'))
|
|
5227
|
+
|
|
5228
|
+
base_req = base_messages[0]
|
|
5229
|
+
assert isinstance(base_req, ModelRequest)
|
|
5230
|
+
assert base_req.instructions is not None
|
|
5231
|
+
assert 'BASE_FN' in base_req.instructions
|
|
5232
|
+
|
|
5233
|
+
with agent.override(instructions=override_fn):
|
|
5234
|
+
with capture_run_messages() as messages:
|
|
5235
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='ok'))
|
|
5236
|
+
|
|
5237
|
+
req = messages[0]
|
|
5238
|
+
assert isinstance(req, ModelRequest)
|
|
5239
|
+
assert req.instructions == 'OVERRIDE_FN'
|
|
5240
|
+
assert 'BASE_FN' not in req.instructions
|
|
5241
|
+
|
|
5242
|
+
|
|
5243
|
+
async def test_override_instructions_async_callable():
|
|
5244
|
+
"""Override with an async callable should be awaited."""
|
|
5245
|
+
agent = Agent('test')
|
|
5246
|
+
|
|
5247
|
+
async def override_fn() -> str:
|
|
5248
|
+
await asyncio.sleep(0)
|
|
5249
|
+
return 'ASYNC_FN'
|
|
5250
|
+
|
|
5251
|
+
with agent.override(instructions=override_fn):
|
|
5252
|
+
with capture_run_messages() as messages:
|
|
5253
|
+
await agent.run('Hi', model=TestModel(custom_output_text='ok'))
|
|
5254
|
+
|
|
5255
|
+
req = messages[0]
|
|
5256
|
+
assert isinstance(req, ModelRequest)
|
|
5257
|
+
assert req.instructions == 'ASYNC_FN'
|
|
5258
|
+
|
|
5259
|
+
|
|
5260
|
+
def test_override_instructions_sequence_mixed_types():
|
|
5261
|
+
"""Override can mix literal strings and functions."""
|
|
5262
|
+
agent = Agent('test', instructions='BASE')
|
|
5263
|
+
|
|
5264
|
+
def override_fn() -> str:
|
|
5265
|
+
return 'FUNC_PART'
|
|
5266
|
+
|
|
5267
|
+
def override_fn_2() -> str:
|
|
5268
|
+
return 'FUNC_PART_2'
|
|
5269
|
+
|
|
5270
|
+
with agent.override(instructions=['OVERRIDE1', override_fn, 'OVERRIDE2', override_fn_2]):
|
|
5271
|
+
with capture_run_messages() as messages:
|
|
5272
|
+
agent.run_sync('Hello', model=TestModel(custom_output_text='ok'))
|
|
5273
|
+
|
|
5274
|
+
req = messages[0]
|
|
5275
|
+
assert isinstance(req, ModelRequest)
|
|
5276
|
+
assert req.instructions == 'OVERRIDE1\nOVERRIDE2\n\nFUNC_PART\n\nFUNC_PART_2'
|
|
5277
|
+
assert 'BASE' not in req.instructions
|
|
5278
|
+
|
|
5279
|
+
|
|
5280
|
+
async def test_override_concurrent_isolation():
|
|
5281
|
+
"""Test that concurrent overrides are isolated from each other."""
|
|
5282
|
+
agent = Agent('test', instructions='ORIG')
|
|
5283
|
+
|
|
5284
|
+
async def run_with(instr: str) -> str | None:
|
|
5285
|
+
with agent.override(instructions=instr):
|
|
5286
|
+
with capture_run_messages() as messages:
|
|
5287
|
+
await agent.run('Hi', model=TestModel(custom_output_text='ok'))
|
|
5288
|
+
req = messages[0]
|
|
5289
|
+
assert isinstance(req, ModelRequest)
|
|
5290
|
+
return req.instructions
|
|
5291
|
+
|
|
5292
|
+
a, b = await asyncio.gather(
|
|
5293
|
+
run_with('A'),
|
|
5294
|
+
run_with('B'),
|
|
5295
|
+
)
|
|
5296
|
+
|
|
5297
|
+
assert a == 'A'
|
|
5298
|
+
assert b == 'B'
|
|
5299
|
+
|
|
5300
|
+
|
|
5301
|
+
def test_override_replaces_instructions():
|
|
5302
|
+
"""Test overriding instructions replaces the base instructions."""
|
|
5303
|
+
agent = Agent('test', instructions='ORIG_INSTR')
|
|
5304
|
+
|
|
5305
|
+
with agent.override(instructions='NEW_INSTR'):
|
|
5306
|
+
with capture_run_messages() as messages:
|
|
5307
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5308
|
+
|
|
5309
|
+
req = messages[0]
|
|
5310
|
+
assert isinstance(req, ModelRequest)
|
|
5311
|
+
assert req.instructions == 'NEW_INSTR'
|
|
5312
|
+
|
|
5313
|
+
|
|
5314
|
+
def test_override_nested_contexts():
|
|
5315
|
+
"""Test nested override contexts."""
|
|
5316
|
+
agent = Agent('test', instructions='ORIG')
|
|
5317
|
+
|
|
5318
|
+
with agent.override(instructions='OUTER'):
|
|
5319
|
+
with capture_run_messages() as outer_messages:
|
|
5320
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5321
|
+
|
|
5322
|
+
with agent.override(instructions='INNER'):
|
|
5323
|
+
with capture_run_messages() as inner_messages:
|
|
5324
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5325
|
+
|
|
5326
|
+
outer_req = outer_messages[0]
|
|
5327
|
+
assert isinstance(outer_req, ModelRequest)
|
|
5328
|
+
inner_req = inner_messages[0]
|
|
5329
|
+
assert isinstance(inner_req, ModelRequest)
|
|
5330
|
+
|
|
5331
|
+
assert outer_req.instructions == 'OUTER'
|
|
5332
|
+
assert inner_req.instructions == 'INNER'
|
|
5333
|
+
|
|
5334
|
+
|
|
5335
|
+
async def test_override_async_run():
|
|
5336
|
+
"""Test override with async run method."""
|
|
5337
|
+
agent = Agent('test', instructions='ORIG')
|
|
5338
|
+
|
|
5339
|
+
with agent.override(instructions='ASYNC_OVERRIDE'):
|
|
5340
|
+
with capture_run_messages() as messages:
|
|
5341
|
+
await agent.run('Hi', model=TestModel(custom_output_text='ok'))
|
|
5342
|
+
|
|
5343
|
+
req = messages[0]
|
|
5344
|
+
assert isinstance(req, ModelRequest)
|
|
5345
|
+
assert req.instructions == 'ASYNC_OVERRIDE'
|
|
5346
|
+
|
|
5347
|
+
|
|
5348
|
+
def test_override_with_dynamic_prompts():
|
|
5349
|
+
"""Test override interacting with dynamic prompts."""
|
|
5350
|
+
agent = Agent('test')
|
|
5351
|
+
|
|
5352
|
+
dynamic_value = 'DYNAMIC'
|
|
5353
|
+
|
|
5354
|
+
@agent.system_prompt
|
|
5355
|
+
def dynamic_sys() -> str:
|
|
5356
|
+
return dynamic_value
|
|
5357
|
+
|
|
5358
|
+
@agent.instructions
|
|
5359
|
+
def dynamic_instr() -> str:
|
|
5360
|
+
return 'DYNAMIC_INSTR'
|
|
5361
|
+
|
|
5362
|
+
with capture_run_messages() as base_messages:
|
|
5363
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='baseline'))
|
|
5364
|
+
|
|
5365
|
+
base_req = base_messages[0]
|
|
5366
|
+
assert isinstance(base_req, ModelRequest)
|
|
5367
|
+
assert base_req.instructions == 'DYNAMIC_INSTR'
|
|
5368
|
+
|
|
5369
|
+
# Override should take precedence over dynamic instructions but leave system prompts intact
|
|
5370
|
+
with agent.override(instructions='OVERRIDE_INSTR'):
|
|
5371
|
+
with capture_run_messages() as messages:
|
|
5372
|
+
agent.run_sync('Hi', model=TestModel(custom_output_text='ok'))
|
|
5373
|
+
|
|
5374
|
+
req = messages[0]
|
|
5375
|
+
assert isinstance(req, ModelRequest)
|
|
5376
|
+
assert req.instructions == 'OVERRIDE_INSTR'
|
|
5377
|
+
sys_texts = [p.content for p in req.parts if isinstance(p, SystemPromptPart)]
|
|
5378
|
+
# The dynamic system prompt should still be present since overrides target instructions only
|
|
5379
|
+
assert dynamic_value in sys_texts
|
|
5380
|
+
|
|
5381
|
+
|
|
5382
|
+
def test_continue_conversation_that_ended_in_output_tool_call(allow_model_requests: None):
|
|
5383
|
+
def llm(messages: list[ModelMessage], info: AgentInfo) -> ModelResponse:
|
|
5384
|
+
if any(isinstance(p, ToolReturnPart) and p.tool_name == 'roll_dice' for p in messages[-1].parts):
|
|
5385
|
+
return ModelResponse(
|
|
5386
|
+
parts=[
|
|
5387
|
+
ToolCallPart(
|
|
5388
|
+
tool_name='final_result',
|
|
5389
|
+
args={'dice_roll': 4},
|
|
5390
|
+
tool_call_id='pyd_ai_tool_call_id__final_result',
|
|
5391
|
+
)
|
|
5392
|
+
]
|
|
5393
|
+
)
|
|
5394
|
+
return ModelResponse(
|
|
5395
|
+
parts=[ToolCallPart(tool_name='roll_dice', args={}, tool_call_id='pyd_ai_tool_call_id__roll_dice')]
|
|
5396
|
+
)
|
|
5397
|
+
|
|
5398
|
+
class Result(BaseModel):
|
|
5399
|
+
dice_roll: int
|
|
5400
|
+
|
|
5401
|
+
agent = Agent(FunctionModel(llm), output_type=Result)
|
|
5402
|
+
|
|
5403
|
+
@agent.tool_plain
|
|
5404
|
+
def roll_dice() -> int:
|
|
5405
|
+
return 4
|
|
5406
|
+
|
|
5407
|
+
result = agent.run_sync('Roll me a dice.')
|
|
5408
|
+
messages = result.all_messages()
|
|
5409
|
+
assert messages == snapshot(
|
|
5410
|
+
[
|
|
5411
|
+
ModelRequest(
|
|
5412
|
+
parts=[
|
|
5413
|
+
UserPromptPart(
|
|
5414
|
+
content='Roll me a dice.',
|
|
5415
|
+
timestamp=IsDatetime(),
|
|
5416
|
+
)
|
|
5417
|
+
]
|
|
5418
|
+
),
|
|
5419
|
+
ModelResponse(
|
|
5420
|
+
parts=[ToolCallPart(tool_name='roll_dice', args={}, tool_call_id='pyd_ai_tool_call_id__roll_dice')],
|
|
5421
|
+
usage=RequestUsage(input_tokens=55, output_tokens=2),
|
|
5422
|
+
model_name='function:llm:',
|
|
5423
|
+
timestamp=IsDatetime(),
|
|
5424
|
+
),
|
|
5425
|
+
ModelRequest(
|
|
5426
|
+
parts=[
|
|
5427
|
+
ToolReturnPart(
|
|
5428
|
+
tool_name='roll_dice',
|
|
5429
|
+
content=4,
|
|
5430
|
+
tool_call_id='pyd_ai_tool_call_id__roll_dice',
|
|
5431
|
+
timestamp=IsDatetime(),
|
|
5432
|
+
)
|
|
5433
|
+
]
|
|
5434
|
+
),
|
|
5435
|
+
ModelResponse(
|
|
5436
|
+
parts=[
|
|
5437
|
+
ToolCallPart(
|
|
5438
|
+
tool_name='final_result',
|
|
5439
|
+
args={'dice_roll': 4},
|
|
5440
|
+
tool_call_id='pyd_ai_tool_call_id__final_result',
|
|
5441
|
+
)
|
|
5442
|
+
],
|
|
5443
|
+
usage=RequestUsage(input_tokens=56, output_tokens=6),
|
|
5444
|
+
model_name='function:llm:',
|
|
5445
|
+
timestamp=IsDatetime(),
|
|
5446
|
+
),
|
|
5447
|
+
ModelRequest(
|
|
5448
|
+
parts=[
|
|
5449
|
+
ToolReturnPart(
|
|
5450
|
+
tool_name='final_result',
|
|
5451
|
+
content='Final result processed.',
|
|
5452
|
+
tool_call_id='pyd_ai_tool_call_id__final_result',
|
|
5453
|
+
timestamp=IsDatetime(),
|
|
5454
|
+
)
|
|
5455
|
+
]
|
|
5456
|
+
),
|
|
5457
|
+
]
|
|
5458
|
+
)
|
|
5459
|
+
|
|
5460
|
+
result = agent.run_sync('Roll me a dice again.', message_history=messages)
|
|
5461
|
+
new_messages = result.new_messages()
|
|
5462
|
+
assert new_messages == snapshot(
|
|
5463
|
+
[
|
|
5464
|
+
ModelRequest(
|
|
5465
|
+
parts=[
|
|
5466
|
+
UserPromptPart(
|
|
5467
|
+
content='Roll me a dice again.',
|
|
5468
|
+
timestamp=IsDatetime(),
|
|
5469
|
+
)
|
|
5470
|
+
]
|
|
5471
|
+
),
|
|
5472
|
+
ModelResponse(
|
|
5473
|
+
parts=[ToolCallPart(tool_name='roll_dice', args={}, tool_call_id='pyd_ai_tool_call_id__roll_dice')],
|
|
5474
|
+
usage=RequestUsage(input_tokens=66, output_tokens=8),
|
|
5475
|
+
model_name='function:llm:',
|
|
5476
|
+
timestamp=IsDatetime(),
|
|
5477
|
+
),
|
|
5478
|
+
ModelRequest(
|
|
5479
|
+
parts=[
|
|
5480
|
+
ToolReturnPart(
|
|
5481
|
+
tool_name='roll_dice',
|
|
5482
|
+
content=4,
|
|
5483
|
+
tool_call_id='pyd_ai_tool_call_id__roll_dice',
|
|
5484
|
+
timestamp=IsDatetime(),
|
|
5485
|
+
)
|
|
5486
|
+
]
|
|
5487
|
+
),
|
|
5488
|
+
ModelResponse(
|
|
5489
|
+
parts=[
|
|
5490
|
+
ToolCallPart(
|
|
5491
|
+
tool_name='final_result',
|
|
5492
|
+
args={'dice_roll': 4},
|
|
5493
|
+
tool_call_id='pyd_ai_tool_call_id__final_result',
|
|
5494
|
+
)
|
|
5495
|
+
],
|
|
5496
|
+
usage=RequestUsage(input_tokens=67, output_tokens=12),
|
|
5497
|
+
model_name='function:llm:',
|
|
5498
|
+
timestamp=IsDatetime(),
|
|
5499
|
+
),
|
|
5500
|
+
ModelRequest(
|
|
5501
|
+
parts=[
|
|
5502
|
+
ToolReturnPart(
|
|
5503
|
+
tool_name='final_result',
|
|
5504
|
+
content='Final result processed.',
|
|
5505
|
+
tool_call_id='pyd_ai_tool_call_id__final_result',
|
|
5506
|
+
timestamp=IsDatetime(),
|
|
5507
|
+
)
|
|
5508
|
+
]
|
|
5509
|
+
),
|
|
5510
|
+
]
|
|
5511
|
+
)
|
|
5512
|
+
|
|
5513
|
+
assert not any(isinstance(p, ToolReturnPart) and p.tool_name == 'final_result' for p in new_messages[0].parts)
|
|
@@ -7,8 +7,16 @@ from unittest.mock import AsyncMock, patch
|
|
|
7
7
|
import pytest
|
|
8
8
|
from inline_snapshot import snapshot
|
|
9
9
|
|
|
10
|
-
from pydantic_ai import
|
|
11
|
-
|
|
10
|
+
from pydantic_ai import Agent
|
|
11
|
+
from pydantic_ai.direct import (
|
|
12
|
+
StreamedResponseSync,
|
|
13
|
+
_prepare_model, # pyright: ignore[reportPrivateUsage]
|
|
14
|
+
model_request,
|
|
15
|
+
model_request_stream,
|
|
16
|
+
model_request_stream_sync,
|
|
17
|
+
model_request_sync,
|
|
18
|
+
)
|
|
19
|
+
from pydantic_ai.messages import (
|
|
12
20
|
FinalResultEvent,
|
|
13
21
|
ModelMessage,
|
|
14
22
|
ModelRequest,
|
|
@@ -19,14 +27,6 @@ from pydantic_ai import (
|
|
|
19
27
|
TextPartDelta,
|
|
20
28
|
ToolCallPart,
|
|
21
29
|
)
|
|
22
|
-
from pydantic_ai.direct import (
|
|
23
|
-
StreamedResponseSync,
|
|
24
|
-
_prepare_model, # pyright: ignore[reportPrivateUsage]
|
|
25
|
-
model_request,
|
|
26
|
-
model_request_stream,
|
|
27
|
-
model_request_stream_sync,
|
|
28
|
-
model_request_sync,
|
|
29
|
-
)
|
|
30
30
|
from pydantic_ai.models import ModelRequestParameters
|
|
31
31
|
from pydantic_ai.models.instrumented import InstrumentedModel
|
|
32
32
|
from pydantic_ai.models.test import TestModel
|