pydantic-ai 1.0.10__tar.gz → 1.0.11__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.10 → pydantic_ai-1.0.11}/PKG-INFO +5 -6
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/README.md +1 -1
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/pyproject.toml +2 -2
- pydantic_ai-1.0.11/tests/models/cassettes/test_anthropic/test_anthropic_output_tool_with_thinking.yaml +74 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_anthropic.py +24 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_instrumented.py +110 -1
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model_names.py +2 -6
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_openai.py +21 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_openai_responses.py +35 -1
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_ollama.py +8 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_dbos.py +26 -6
- pydantic_ai-1.0.11/tests/test_function_schema.py +201 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_history_processor.py +82 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/.gitignore +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/LICENSE +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/Makefile +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/conftest.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/evals/utils.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/example_modules/README.md +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/ext/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_state.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/import_examples.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/mcp_server.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_text_parts_ahead_of_built_in_tool_call.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools_web_search.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_non_reasoning_model_no_item_ids.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/mock_openai.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_google.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_groq.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_huggingface.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/parts_from_messages.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/__init__.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_cerebras.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_gateway.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_github.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_litellm.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_moonshotai.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_together.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_a2a.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_agent.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_builtin_tools.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_cli.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_deps.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_direct.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_examples.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_live.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_logfire.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_mcp.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_messages.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_settings.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_streaming.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_temporal.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_tenacity.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_tools.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_toolsets.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/test_utils.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/tests/typed_agent.py +0 -0
- {pydantic_ai-1.0.10 → pydantic_ai-1.0.11}/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.11
|
|
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
|
|
@@ -14,7 +14,6 @@ Classifier: Framework :: Pydantic
|
|
|
14
14
|
Classifier: Framework :: Pydantic :: 2
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Intended Audience :: Information Technology
|
|
17
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
18
17
|
Classifier: Operating System :: OS Independent
|
|
19
18
|
Classifier: Programming Language :: Python
|
|
20
19
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -27,13 +26,13 @@ Classifier: Topic :: Internet
|
|
|
27
26
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
28
27
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
29
28
|
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.
|
|
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.11
|
|
31
30
|
Provides-Extra: a2a
|
|
32
31
|
Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
|
|
33
32
|
Provides-Extra: dbos
|
|
34
|
-
Requires-Dist: pydantic-ai-slim[dbos]==1.0.
|
|
33
|
+
Requires-Dist: pydantic-ai-slim[dbos]==1.0.11; extra == 'dbos'
|
|
35
34
|
Provides-Extra: examples
|
|
36
|
-
Requires-Dist: pydantic-ai-examples==1.0.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==1.0.11; extra == 'examples'
|
|
37
36
|
Description-Content-Type: text/markdown
|
|
38
37
|
|
|
39
38
|
<div align="center">
|
|
@@ -95,7 +94,7 @@ Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Ag
|
|
|
95
94
|
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.
|
|
96
95
|
|
|
97
96
|
8. **Durable Execution**:
|
|
98
|
-
Enables you to build [durable agents](https://ai.pydantic.dev/
|
|
97
|
+
Enables you to build [durable agents](https://ai.pydantic.dev/durable_execution/overview/) 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.
|
|
99
98
|
|
|
100
99
|
9. **Streamed Outputs**:
|
|
101
100
|
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.
|
|
@@ -57,7 +57,7 @@ Integrates the [Model Context Protocol](https://ai.pydantic.dev/mcp/client), [Ag
|
|
|
57
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.
|
|
58
58
|
|
|
59
59
|
8. **Durable Execution**:
|
|
60
|
-
Enables you to build [durable agents](https://ai.pydantic.dev/
|
|
60
|
+
Enables you to build [durable agents](https://ai.pydantic.dev/durable_execution/overview/) 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.
|
|
61
61
|
|
|
62
62
|
9. **Streamed Outputs**:
|
|
63
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.
|
|
@@ -22,6 +22,7 @@ authors = [
|
|
|
22
22
|
{ name = "Douwe Maan", email = "douwe@pydantic.dev" },
|
|
23
23
|
]
|
|
24
24
|
license = "MIT"
|
|
25
|
+
license-files = ["LICENSE"]
|
|
25
26
|
readme = "README.md"
|
|
26
27
|
classifiers = [
|
|
27
28
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -34,7 +35,6 @@ classifiers = [
|
|
|
34
35
|
"Programming Language :: Python :: 3.13",
|
|
35
36
|
"Intended Audience :: Developers",
|
|
36
37
|
"Intended Audience :: Information Technology",
|
|
37
|
-
"License :: OSI Approved :: MIT License",
|
|
38
38
|
"Operating System :: OS Independent",
|
|
39
39
|
"Topic :: Internet",
|
|
40
40
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
@@ -102,7 +102,7 @@ dev = [
|
|
|
102
102
|
"pytest-xdist>=3.6.1",
|
|
103
103
|
# Needed for PyCharm users
|
|
104
104
|
"pip>=25.2",
|
|
105
|
-
"genai-prices>=0.0.
|
|
105
|
+
"genai-prices>=0.0.28",
|
|
106
106
|
"mcp-run-python>=0.0.20",
|
|
107
107
|
]
|
|
108
108
|
lint = ["mypy>=1.11.2", "pyright>=1.1.390", "ruff>=0.6.9"]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
headers:
|
|
4
|
+
accept:
|
|
5
|
+
- application/json
|
|
6
|
+
accept-encoding:
|
|
7
|
+
- gzip, deflate
|
|
8
|
+
connection:
|
|
9
|
+
- keep-alive
|
|
10
|
+
content-length:
|
|
11
|
+
- '471'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
host:
|
|
15
|
+
- api.anthropic.com
|
|
16
|
+
method: POST
|
|
17
|
+
parsed_body:
|
|
18
|
+
max_tokens: 4096
|
|
19
|
+
messages:
|
|
20
|
+
- content:
|
|
21
|
+
- text: What is 3 + 3?
|
|
22
|
+
type: text
|
|
23
|
+
role: user
|
|
24
|
+
model: claude-sonnet-4-0
|
|
25
|
+
stream: false
|
|
26
|
+
system: |-
|
|
27
|
+
Always respond with a JSON object that's compatible with this schema:
|
|
28
|
+
|
|
29
|
+
{"properties": {"response": {"type": "integer"}}, "required": ["response"], "type": "object", "title": "int"}
|
|
30
|
+
|
|
31
|
+
Don't include any text or Markdown fencing before or after.
|
|
32
|
+
thinking:
|
|
33
|
+
budget_tokens: 3000
|
|
34
|
+
type: enabled
|
|
35
|
+
uri: https://api.anthropic.com/v1/messages?beta=true
|
|
36
|
+
response:
|
|
37
|
+
headers:
|
|
38
|
+
connection:
|
|
39
|
+
- keep-alive
|
|
40
|
+
content-length:
|
|
41
|
+
- '1032'
|
|
42
|
+
content-type:
|
|
43
|
+
- application/json
|
|
44
|
+
strict-transport-security:
|
|
45
|
+
- max-age=31536000; includeSubDomains; preload
|
|
46
|
+
transfer-encoding:
|
|
47
|
+
- chunked
|
|
48
|
+
parsed_body:
|
|
49
|
+
content:
|
|
50
|
+
- signature: ErQCCkYICBgCKkDId3yuTWB+RmnrHX1N/m+Q+uvt6TTyU6tRWGzFYK1UmQo+lkK5PFjgRvLK6eXA/q8sbVIC6mO3/1eq5aTkSX7+EgzYnRzfZdWJZ1X+410aDC5zyOhlAbOmBiBUmiIwPC3/mI3lVg3woo5Q2jwuZ/u+Pl8LMzrFxG0YbK2F5YDVuCjhrJsOq5e1V36GWJjqKpsBsKiPfPZQ6wizN25g64pwJb+Wjm55hDeGpK8xJeVFuren6PNKKkruBtlK1PIVpjSXBGkdTJCC69xlhwaXF20zah/A8HDm/2QEqid8Gz8+7zu+b7OGa22WdW0uZEwQgJtydTscZFqWzyAm8CZtsCh8STbRNPggOaCNg9vX5ipu2D+jXnAaL6MIOOQ3FUO+CdljS0mvfoyeCabS8TUYAQ==
|
|
51
|
+
thinking: The user is asking for 3 + 3, which equals 6. I need to respond with a JSON object that has a "response"
|
|
52
|
+
field containing an integer value.
|
|
53
|
+
type: thinking
|
|
54
|
+
- text: '{"response": 6}'
|
|
55
|
+
type: text
|
|
56
|
+
id: msg_01Fo4JKsQzJMTQBgLSAeCJDG
|
|
57
|
+
model: claude-sonnet-4-20250514
|
|
58
|
+
role: assistant
|
|
59
|
+
stop_reason: end_turn
|
|
60
|
+
stop_sequence: null
|
|
61
|
+
type: message
|
|
62
|
+
usage:
|
|
63
|
+
cache_creation:
|
|
64
|
+
ephemeral_1h_input_tokens: 0
|
|
65
|
+
ephemeral_5m_input_tokens: 0
|
|
66
|
+
cache_creation_input_tokens: 0
|
|
67
|
+
cache_read_input_tokens: 0
|
|
68
|
+
input_tokens: 105
|
|
69
|
+
output_tokens: 55
|
|
70
|
+
service_tier: standard
|
|
71
|
+
status:
|
|
72
|
+
code: 200
|
|
73
|
+
message: OK
|
|
74
|
+
version: 1
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations as _annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
5
|
+
import re
|
|
5
6
|
from collections.abc import Callable, Sequence
|
|
6
7
|
from dataclasses import dataclass, field
|
|
7
8
|
from datetime import timezone
|
|
@@ -4182,6 +4183,29 @@ async def test_anthropic_native_output(allow_model_requests: None, anthropic_api
|
|
|
4182
4183
|
await agent.run('What is the largest city in the user country?')
|
|
4183
4184
|
|
|
4184
4185
|
|
|
4186
|
+
async def test_anthropic_output_tool_with_thinking(allow_model_requests: None, anthropic_api_key: str):
|
|
4187
|
+
m = AnthropicModel(
|
|
4188
|
+
'claude-sonnet-4-0',
|
|
4189
|
+
provider=AnthropicProvider(api_key=anthropic_api_key),
|
|
4190
|
+
settings=AnthropicModelSettings(anthropic_thinking={'type': 'enabled', 'budget_tokens': 3000}),
|
|
4191
|
+
)
|
|
4192
|
+
|
|
4193
|
+
agent = Agent(m, output_type=int)
|
|
4194
|
+
|
|
4195
|
+
with pytest.raises(
|
|
4196
|
+
UserError,
|
|
4197
|
+
match=re.escape(
|
|
4198
|
+
'Anthropic does not support thinking and output tools at the same time. Use `output_type=PromptedOutput(...)` instead.'
|
|
4199
|
+
),
|
|
4200
|
+
):
|
|
4201
|
+
await agent.run('What is 3 + 3?')
|
|
4202
|
+
|
|
4203
|
+
agent = Agent(m, output_type=PromptedOutput(int))
|
|
4204
|
+
|
|
4205
|
+
result = await agent.run('What is 3 + 3?')
|
|
4206
|
+
assert result.output == snapshot(6)
|
|
4207
|
+
|
|
4208
|
+
|
|
4185
4209
|
async def test_anthropic_tool_with_thinking(allow_model_requests: None, anthropic_api_key: str):
|
|
4186
4210
|
"""When using thinking with tool calls in Anthropic, we need to send the thinking part back to the provider.
|
|
4187
4211
|
|
|
@@ -42,7 +42,7 @@ from pydantic_ai.models.instrumented import InstrumentationSettings, Instrumente
|
|
|
42
42
|
from pydantic_ai.settings import ModelSettings
|
|
43
43
|
from pydantic_ai.usage import RequestUsage
|
|
44
44
|
|
|
45
|
-
from ..conftest import IsStr, try_import
|
|
45
|
+
from ..conftest import IsInt, IsStr, try_import
|
|
46
46
|
|
|
47
47
|
with try_import() as imports_successful:
|
|
48
48
|
from logfire.testing import CaptureLogfire
|
|
@@ -831,6 +831,115 @@ Fix the errors and try again.\
|
|
|
831
831
|
]
|
|
832
832
|
)
|
|
833
833
|
|
|
834
|
+
assert capfire.get_collected_metrics() == snapshot(
|
|
835
|
+
[
|
|
836
|
+
{
|
|
837
|
+
'name': 'gen_ai.client.token.usage',
|
|
838
|
+
'description': 'Measures number of input and output tokens used',
|
|
839
|
+
'unit': '{token}',
|
|
840
|
+
'data': {
|
|
841
|
+
'data_points': [
|
|
842
|
+
{
|
|
843
|
+
'attributes': {
|
|
844
|
+
'gen_ai.system': 'openai',
|
|
845
|
+
'gen_ai.operation.name': 'chat',
|
|
846
|
+
'gen_ai.request.model': 'gpt-4o',
|
|
847
|
+
'gen_ai.response.model': 'gpt-4o-2024-11-20',
|
|
848
|
+
'gen_ai.token.type': 'input',
|
|
849
|
+
},
|
|
850
|
+
'start_time_unix_nano': IsInt(),
|
|
851
|
+
'time_unix_nano': IsInt(),
|
|
852
|
+
'count': 1,
|
|
853
|
+
'sum': 100,
|
|
854
|
+
'scale': 20,
|
|
855
|
+
'zero_count': 0,
|
|
856
|
+
'positive': {'offset': 6966588, 'bucket_counts': [1]},
|
|
857
|
+
'negative': {'offset': 0, 'bucket_counts': [0]},
|
|
858
|
+
'flags': 0,
|
|
859
|
+
'min': 100,
|
|
860
|
+
'max': 100,
|
|
861
|
+
'exemplars': [],
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
'attributes': {
|
|
865
|
+
'gen_ai.system': 'openai',
|
|
866
|
+
'gen_ai.operation.name': 'chat',
|
|
867
|
+
'gen_ai.request.model': 'gpt-4o',
|
|
868
|
+
'gen_ai.response.model': 'gpt-4o-2024-11-20',
|
|
869
|
+
'gen_ai.token.type': 'output',
|
|
870
|
+
},
|
|
871
|
+
'start_time_unix_nano': IsInt(),
|
|
872
|
+
'time_unix_nano': IsInt(),
|
|
873
|
+
'count': 1,
|
|
874
|
+
'sum': 200,
|
|
875
|
+
'scale': 20,
|
|
876
|
+
'zero_count': 0,
|
|
877
|
+
'positive': {'offset': 8015164, 'bucket_counts': [1]},
|
|
878
|
+
'negative': {'offset': 0, 'bucket_counts': [0]},
|
|
879
|
+
'flags': 0,
|
|
880
|
+
'min': 200,
|
|
881
|
+
'max': 200,
|
|
882
|
+
'exemplars': [],
|
|
883
|
+
},
|
|
884
|
+
],
|
|
885
|
+
'aggregation_temporality': 1,
|
|
886
|
+
},
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
'name': 'operation.cost',
|
|
890
|
+
'description': 'Monetary cost',
|
|
891
|
+
'unit': '{USD}',
|
|
892
|
+
'data': {
|
|
893
|
+
'data_points': [
|
|
894
|
+
{
|
|
895
|
+
'attributes': {
|
|
896
|
+
'gen_ai.system': 'openai',
|
|
897
|
+
'gen_ai.operation.name': 'chat',
|
|
898
|
+
'gen_ai.request.model': 'gpt-4o',
|
|
899
|
+
'gen_ai.response.model': 'gpt-4o-2024-11-20',
|
|
900
|
+
'gen_ai.token.type': 'input',
|
|
901
|
+
},
|
|
902
|
+
'start_time_unix_nano': IsInt(),
|
|
903
|
+
'time_unix_nano': IsInt(),
|
|
904
|
+
'count': 1,
|
|
905
|
+
'sum': 0.00025,
|
|
906
|
+
'scale': 20,
|
|
907
|
+
'zero_count': 0,
|
|
908
|
+
'positive': {'offset': -12547035, 'bucket_counts': [1]},
|
|
909
|
+
'negative': {'offset': 0, 'bucket_counts': [0]},
|
|
910
|
+
'flags': 0,
|
|
911
|
+
'min': 0.00025,
|
|
912
|
+
'max': 0.00025,
|
|
913
|
+
'exemplars': [],
|
|
914
|
+
},
|
|
915
|
+
{
|
|
916
|
+
'attributes': {
|
|
917
|
+
'gen_ai.system': 'openai',
|
|
918
|
+
'gen_ai.operation.name': 'chat',
|
|
919
|
+
'gen_ai.request.model': 'gpt-4o',
|
|
920
|
+
'gen_ai.response.model': 'gpt-4o-2024-11-20',
|
|
921
|
+
'gen_ai.token.type': 'output',
|
|
922
|
+
},
|
|
923
|
+
'start_time_unix_nano': IsInt(),
|
|
924
|
+
'time_unix_nano': IsInt(),
|
|
925
|
+
'count': 1,
|
|
926
|
+
'sum': 0.002,
|
|
927
|
+
'scale': 20,
|
|
928
|
+
'zero_count': 0,
|
|
929
|
+
'positive': {'offset': -9401307, 'bucket_counts': [1]},
|
|
930
|
+
'negative': {'offset': 0, 'bucket_counts': [0]},
|
|
931
|
+
'flags': 0,
|
|
932
|
+
'min': 0.002,
|
|
933
|
+
'max': 0.002,
|
|
934
|
+
'exemplars': [],
|
|
935
|
+
},
|
|
936
|
+
],
|
|
937
|
+
'aggregation_temporality': 1,
|
|
938
|
+
},
|
|
939
|
+
},
|
|
940
|
+
]
|
|
941
|
+
)
|
|
942
|
+
|
|
834
943
|
|
|
835
944
|
def test_messages_to_otel_events_serialization_errors():
|
|
836
945
|
class Foo:
|
|
@@ -58,9 +58,7 @@ def test_known_model_names(): # pragma: lax no cover
|
|
|
58
58
|
else:
|
|
59
59
|
yield from get_model_names(arg)
|
|
60
60
|
|
|
61
|
-
anthropic_names = [f'anthropic:{n}' for n in get_model_names(AnthropicModelName)]
|
|
62
|
-
n for n in get_model_names(AnthropicModelName) if n.startswith('claude')
|
|
63
|
-
]
|
|
61
|
+
anthropic_names = [f'anthropic:{n}' for n in get_model_names(AnthropicModelName)]
|
|
64
62
|
cohere_names = [f'cohere:{n}' for n in get_model_names(CohereModelName)]
|
|
65
63
|
google_names = [f'google-gla:{n}' for n in get_model_names(GeminiModelName)] + [
|
|
66
64
|
f'google-vertex:{n}' for n in get_model_names(GeminiModelName)
|
|
@@ -69,9 +67,7 @@ def test_known_model_names(): # pragma: lax no cover
|
|
|
69
67
|
groq_names = [f'groq:{n}' for n in get_model_names(GroqModelName)]
|
|
70
68
|
moonshotai_names = [f'moonshotai:{n}' for n in get_model_names(MoonshotAIModelName)]
|
|
71
69
|
mistral_names = [f'mistral:{n}' for n in get_model_names(MistralModelName)]
|
|
72
|
-
openai_names = [f'openai:{n}' for n in get_model_names(OpenAIModelName)]
|
|
73
|
-
n for n in get_model_names(OpenAIModelName) if n.startswith('o1') or n.startswith('gpt') or n.startswith('o3')
|
|
74
|
-
]
|
|
70
|
+
openai_names = [f'openai:{n}' for n in get_model_names(OpenAIModelName)]
|
|
75
71
|
bedrock_names = [f'bedrock:{n}' for n in get_model_names(BedrockModelName)]
|
|
76
72
|
deepseek_names = ['deepseek:deepseek-chat', 'deepseek:deepseek-reasoner']
|
|
77
73
|
huggingface_names = [f'huggingface:{n}' for n in get_model_names(HuggingFaceModelName)]
|
|
@@ -172,6 +172,27 @@ async def test_request_simple_usage(allow_model_requests: None):
|
|
|
172
172
|
)
|
|
173
173
|
|
|
174
174
|
|
|
175
|
+
async def test_openai_chat_image_detail_vendor_metadata(allow_model_requests: None):
|
|
176
|
+
c = completion_message(
|
|
177
|
+
ChatCompletionMessage(content='done', role='assistant'),
|
|
178
|
+
)
|
|
179
|
+
mock_client = MockOpenAI.create_mock(c)
|
|
180
|
+
model = OpenAIChatModel('gpt-4o', provider=OpenAIProvider(openai_client=mock_client))
|
|
181
|
+
agent = Agent(model)
|
|
182
|
+
|
|
183
|
+
image_url = ImageUrl('https://example.com/image.png', vendor_metadata={'detail': 'high'})
|
|
184
|
+
binary_image = BinaryContent(b'\x89PNG', media_type='image/png', vendor_metadata={'detail': 'high'})
|
|
185
|
+
|
|
186
|
+
await agent.run(['Describe these inputs.', image_url, binary_image])
|
|
187
|
+
|
|
188
|
+
request_kwargs = get_mock_chat_completion_kwargs(mock_client)
|
|
189
|
+
image_parts = [
|
|
190
|
+
item['image_url'] for item in request_kwargs[0]['messages'][0]['content'] if item['type'] == 'image_url'
|
|
191
|
+
]
|
|
192
|
+
assert image_parts
|
|
193
|
+
assert all(part['detail'] == 'high' for part in image_parts)
|
|
194
|
+
|
|
195
|
+
|
|
175
196
|
async def test_request_structured_response(allow_model_requests: None):
|
|
176
197
|
c = completion_message(
|
|
177
198
|
ChatCompletionMessage(
|
|
@@ -39,7 +39,7 @@ from pydantic_ai.tools import ToolDefinition
|
|
|
39
39
|
from pydantic_ai.usage import RequestUsage, RunUsage
|
|
40
40
|
|
|
41
41
|
from ..conftest import IsDatetime, IsStr, TestEnv, try_import
|
|
42
|
-
from .mock_openai import MockOpenAIResponses, response_message
|
|
42
|
+
from .mock_openai import MockOpenAIResponses, get_mock_responses_kwargs, response_message
|
|
43
43
|
|
|
44
44
|
with try_import() as imports_successful:
|
|
45
45
|
from openai.types.responses.response_output_message import Content, ResponseOutputMessage, ResponseOutputText
|
|
@@ -78,6 +78,40 @@ async def test_openai_responses_model_simple_response(allow_model_requests: None
|
|
|
78
78
|
assert result.output == snapshot('The capital of France is Paris.')
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
async def test_openai_responses_image_detail_vendor_metadata(allow_model_requests: None):
|
|
82
|
+
c = response_message(
|
|
83
|
+
[
|
|
84
|
+
ResponseOutputMessage(
|
|
85
|
+
id='output-1',
|
|
86
|
+
content=cast(list[Content], [ResponseOutputText(text='done', type='output_text', annotations=[])]),
|
|
87
|
+
role='assistant',
|
|
88
|
+
status='completed',
|
|
89
|
+
type='message',
|
|
90
|
+
)
|
|
91
|
+
]
|
|
92
|
+
)
|
|
93
|
+
mock_client = MockOpenAIResponses.create_mock(c)
|
|
94
|
+
model = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(openai_client=mock_client))
|
|
95
|
+
agent = Agent(model=model)
|
|
96
|
+
|
|
97
|
+
image_url = ImageUrl('https://example.com/image.png', vendor_metadata={'detail': 'high'})
|
|
98
|
+
binary_image = BinaryContent(b'\x89PNG', media_type='image/png', vendor_metadata={'detail': 'high'})
|
|
99
|
+
|
|
100
|
+
result = await agent.run(['Describe these inputs.', image_url, binary_image])
|
|
101
|
+
assert result.output == 'done'
|
|
102
|
+
|
|
103
|
+
response_kwargs = get_mock_responses_kwargs(mock_client)
|
|
104
|
+
image_parts = [
|
|
105
|
+
item
|
|
106
|
+
for message in response_kwargs[0]['input']
|
|
107
|
+
if message.get('role') == 'user'
|
|
108
|
+
for item in message['content']
|
|
109
|
+
if item['type'] == 'input_image'
|
|
110
|
+
]
|
|
111
|
+
assert image_parts
|
|
112
|
+
assert all(part['detail'] == 'high' for part in image_parts)
|
|
113
|
+
|
|
114
|
+
|
|
81
115
|
async def test_openai_responses_model_simple_response_with_tool_call(allow_model_requests: None, openai_api_key: str):
|
|
82
116
|
model = OpenAIResponsesModel('gpt-4o', provider=OpenAIProvider(api_key=openai_api_key))
|
|
83
117
|
|
|
@@ -9,6 +9,7 @@ from pydantic_ai.profiles._json_schema import InlineDefsJsonSchemaTransformer
|
|
|
9
9
|
from pydantic_ai.profiles.cohere import cohere_model_profile
|
|
10
10
|
from pydantic_ai.profiles.deepseek import deepseek_model_profile
|
|
11
11
|
from pydantic_ai.profiles.google import GoogleJsonSchemaTransformer, google_model_profile
|
|
12
|
+
from pydantic_ai.profiles.harmony import harmony_model_profile
|
|
12
13
|
from pydantic_ai.profiles.meta import meta_model_profile
|
|
13
14
|
from pydantic_ai.profiles.mistral import mistral_model_profile
|
|
14
15
|
from pydantic_ai.profiles.openai import OpenAIJsonSchemaTransformer
|
|
@@ -77,6 +78,7 @@ def test_ollama_provider_model_profile(mocker: MockerFixture):
|
|
|
77
78
|
mistral_model_profile_mock = mocker.patch(f'{ns}.mistral_model_profile', wraps=mistral_model_profile)
|
|
78
79
|
qwen_model_profile_mock = mocker.patch(f'{ns}.qwen_model_profile', wraps=qwen_model_profile)
|
|
79
80
|
cohere_model_profile_mock = mocker.patch(f'{ns}.cohere_model_profile', wraps=cohere_model_profile)
|
|
81
|
+
harmony_model_profile_mock = mocker.patch(f'{ns}.harmony_model_profile', wraps=harmony_model_profile)
|
|
80
82
|
|
|
81
83
|
meta_profile = provider.model_profile('llama3.2')
|
|
82
84
|
meta_model_profile_mock.assert_called_with('llama3.2')
|
|
@@ -115,6 +117,12 @@ def test_ollama_provider_model_profile(mocker: MockerFixture):
|
|
|
115
117
|
assert cohere_profile is not None
|
|
116
118
|
assert cohere_profile.json_schema_transformer == OpenAIJsonSchemaTransformer
|
|
117
119
|
|
|
120
|
+
harmony_profile = provider.model_profile('gpt-oss')
|
|
121
|
+
harmony_model_profile_mock.assert_called_with('gpt-oss')
|
|
122
|
+
assert harmony_profile is not None
|
|
123
|
+
assert harmony_profile.json_schema_transformer == OpenAIJsonSchemaTransformer
|
|
124
|
+
assert harmony_profile.ignore_streamed_leading_whitespace is True
|
|
125
|
+
|
|
118
126
|
unknown_profile = provider.model_profile('unknown-model')
|
|
119
127
|
assert unknown_profile is not None
|
|
120
128
|
assert unknown_profile.json_schema_transformer == OpenAIJsonSchemaTransformer
|
|
@@ -43,9 +43,14 @@ from pydantic_ai.usage import RequestUsage
|
|
|
43
43
|
from .conftest import IsDatetime, IsStr
|
|
44
44
|
|
|
45
45
|
try:
|
|
46
|
+
import importlib.metadata
|
|
47
|
+
|
|
46
48
|
from dbos import DBOS, DBOSConfig, SetWorkflowID
|
|
49
|
+
from packaging.version import Version
|
|
47
50
|
|
|
48
51
|
from pydantic_ai.durable_exec.dbos import DBOSAgent, DBOSMCPServer, DBOSModel
|
|
52
|
+
|
|
53
|
+
dbos_version = Version(importlib.metadata.version('dbos'))
|
|
49
54
|
except ImportError: # pragma: lax no cover
|
|
50
55
|
pytest.skip('DBOS is not installed', allow_module_level=True)
|
|
51
56
|
|
|
@@ -110,9 +115,10 @@ def workflow_raises(exc_type: type[Exception], exc_message: str) -> Iterator[Non
|
|
|
110
115
|
DBOS_SQLITE_FILE = 'dbostest.sqlite'
|
|
111
116
|
DBOS_CONFIG: DBOSConfig = {
|
|
112
117
|
'name': 'pydantic_dbos_tests',
|
|
113
|
-
'database_url': f'sqlite:///{DBOS_SQLITE_FILE}',
|
|
114
118
|
'system_database_url': f'sqlite:///{DBOS_SQLITE_FILE}',
|
|
115
119
|
'run_admin_server': False,
|
|
120
|
+
# enable_otlp requires dbos>1.14
|
|
121
|
+
'enable_otlp': True,
|
|
116
122
|
}
|
|
117
123
|
|
|
118
124
|
|
|
@@ -1042,9 +1048,19 @@ async def test_dbos_agent_run_in_workflow_with_event_stream_handler(allow_model_
|
|
|
1042
1048
|
):
|
|
1043
1049
|
pass
|
|
1044
1050
|
|
|
1045
|
-
with
|
|
1051
|
+
with pytest.raises(Exception) as exc_info:
|
|
1046
1052
|
await simple_dbos_agent.run('What is the capital of Mexico?', event_stream_handler=simple_event_stream_handler)
|
|
1047
1053
|
|
|
1054
|
+
if dbos_version <= Version('1.14'): # pragma: lax no cover
|
|
1055
|
+
# Older DBOS versions used jsonpickle
|
|
1056
|
+
assert str(exc_info.value) == snapshot('Serialized function should be defined at the top level of a module')
|
|
1057
|
+
else:
|
|
1058
|
+
# Newer DBOS versions use pickle
|
|
1059
|
+
assert (
|
|
1060
|
+
"local object 'test_dbos_agent_run_in_workflow_with_event_stream_handler.<locals>.simple_event_stream_handler'"
|
|
1061
|
+
in str(exc_info.value)
|
|
1062
|
+
)
|
|
1063
|
+
|
|
1048
1064
|
|
|
1049
1065
|
async def test_dbos_agent_run_in_workflow_with_model(allow_model_requests: None, dbos: DBOS):
|
|
1050
1066
|
# A non-DBOS model is not wrapped as steps so it's not deterministic and cannot be used in a DBOS workflow.
|
|
@@ -1142,15 +1158,19 @@ async def get_model_name(ctx: RunContext[UnserializableDeps]) -> int:
|
|
|
1142
1158
|
async def test_dbos_agent_with_unserializable_deps_type(allow_model_requests: None, dbos: DBOS):
|
|
1143
1159
|
unserializable_deps_dbos_agent = DBOSAgent(unserializable_deps_agent)
|
|
1144
1160
|
# Test this raises a serialization error because httpx.AsyncClient is not serializable.
|
|
1145
|
-
with pytest.raises(
|
|
1146
|
-
Exception,
|
|
1147
|
-
match='object proxy must define __reduce_ex__()',
|
|
1148
|
-
):
|
|
1161
|
+
with pytest.raises(Exception) as exc_info:
|
|
1149
1162
|
async with AsyncClient() as client:
|
|
1150
1163
|
# This will trigger the client to be unserializable
|
|
1151
1164
|
logfire.instrument_httpx(client, capture_all=True)
|
|
1152
1165
|
await unserializable_deps_dbos_agent.run('What is the model name?', deps=UnserializableDeps(client=client))
|
|
1153
1166
|
|
|
1167
|
+
if dbos_version <= Version('1.14'): # pragma: lax no cover
|
|
1168
|
+
# Older DBOS versions used jsonpickle
|
|
1169
|
+
assert str(exc_info.value) == snapshot('object proxy must define __reduce_ex__()')
|
|
1170
|
+
else:
|
|
1171
|
+
# Newer DBOS versions use pickle
|
|
1172
|
+
assert str(exc_info.value) == snapshot("cannot pickle '_thread.RLock' object")
|
|
1173
|
+
|
|
1154
1174
|
|
|
1155
1175
|
# Test dynamic toolsets in an agent with DBOS
|
|
1156
1176
|
|