pydantic-ai 1.4.0__tar.gz → 1.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pydantic-ai might be problematic. Click here for more details.
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/Makefile +4 -2
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/PKG-INFO +5 -5
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_dataset.py +4 -3
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_utils.py +3 -2
- pydantic_ai-1.5.0/tests/graph/beta/test_broadcast_and_spread.py +271 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_decisions.py +524 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_edge_cases.py +396 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_edge_labels.py +221 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_graph_builder.py +444 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_graph_edge_cases.py +426 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_graph_execution.py +345 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_graph_iteration.py +466 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_joins_and_reducers.py +372 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_mermaid_rendering.py +197 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_node_and_step.py +70 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_parent_forks.py +304 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_paths.py +108 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_util.py +49 -0
- pydantic_ai-1.5.0/tests/graph/beta/test_v1_v2_integration.py +287 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_graph.py +41 -0
- pydantic_ai-1.5.0/tests/graph/test_utils.py +55 -0
- pydantic_ai-1.5.0/tests/models/cassettes/test_google/test_google_httpx_client_is_not_closed.yaml +122 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_fallback.py +5 -4
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_google.py +11 -0
- pydantic_ai-1.5.0/tests/providers/__init__.py +0 -0
- pydantic_ai-1.4.0/tests/graph/test_utils.py +0 -13
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/.gitignore +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/LICENSE +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/README.md +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/pyproject.toml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/__init__.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/dummy.txt +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_iter_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_override_tools_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_in_workflow_with_toolsets.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_run_sync_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_hitl_tool_sync.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_dbos_model_stream_direct.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_dbos/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_mcp/test_tool_returning_unstructured_dict.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_complex_agent_run_in_flow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_iter_in_flow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_deps.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_override_toolsets.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_stream_events.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_hitl_tool_sync.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_prefect_agent_with_unserializable_deps.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_run_stream_in_flow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_run_sync_in_flow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_prefect/test_simple_agent_run_in_flow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream_events.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_hitl_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/cassettes/test_temporal/test_web_search_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/conftest.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/__init__.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/evals/utils.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/README.md +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/ext/__init__.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/__init__.py +0 -0
- {pydantic_ai-1.4.0/tests/models → pydantic_ai-1.5.0/tests/graph/beta}/__init__.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/graph/test_state.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/import_examples.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/mcp_server.py +0 -0
- {pydantic_ai-1.4.0/tests/providers → pydantic_ai-1.5.0/tests/models}/__init__.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_mcp_servers.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_mcp_servers_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_memory_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_output_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_parts_ahead_of_built_in_tool_call.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream_empty_text_delta.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_anthropic.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_deepseek.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_redacted_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_builtin_tools_with_other_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_and_text_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_generation_with_text.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_image_or_text_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_builtin_code_execution_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_multiple_images.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_vertexai_image_generation.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_groq_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_regular_error.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_groq/test_tool_use_failed_error_streaming.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_input_force_download_response_api.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_previous_response_id_auto_mode.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_return_image_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_history_with_combined_tool_call_id.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_and_text_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_jpeg.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_tool_without_image_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_native_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_generation_with_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_or_text_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools_web_search.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_mcp_server_tool_with_connector.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_multiple_images.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_non_reasoning_model_no_item_ids.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_streaming_usage.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_from_other_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_part_iter.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_modified_history.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_thinking_with_tool_calls.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/mock_openai.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_groq.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_huggingface.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_names.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_openai.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/parts_from_messages.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_anthropic.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_bedrock.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_google_vertex.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_groq.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_gateway/test_gateway_provider_with_openai_responses.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_cerebras.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_gateway.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_github.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_litellm.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_moonshotai.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_nebius.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_ollama.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_ovhcloud.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_together.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_a2a.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_agent.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_builtin_tools.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_cli.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_dbos.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_deps.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_direct.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_examples.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_function_schema.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_history_processor.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_live.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_logfire.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_mcp.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_messages.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_prefect.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_settings.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_streaming.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_temporal.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_tenacity.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_tools.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_toolsets.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/test_utils.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/typed_agent.py +0 -0
- {pydantic_ai-1.4.0 → pydantic_ai-1.5.0}/tests/typed_graph.py +0 -0
|
@@ -36,8 +36,9 @@ lint: ## Lint the code
|
|
|
36
36
|
|
|
37
37
|
.PHONY: typecheck-pyright
|
|
38
38
|
typecheck-pyright:
|
|
39
|
+
@# To typecheck for a specific version of python, run 'make install-all-python' then set environment variable PYRIGHT_PYTHON=3.10 or similar
|
|
39
40
|
@# PYRIGHT_PYTHON_IGNORE_WARNINGS avoids the overhead of making a request to github on every invocation
|
|
40
|
-
PYRIGHT_PYTHON_IGNORE_WARNINGS=1 uv run pyright
|
|
41
|
+
PYRIGHT_PYTHON_IGNORE_WARNINGS=1 uv run pyright $(if $(PYRIGHT_PYTHON),--pythonversion $(PYRIGHT_PYTHON))
|
|
41
42
|
|
|
42
43
|
.PHONY: typecheck-mypy
|
|
43
44
|
typecheck-mypy:
|
|
@@ -51,7 +52,8 @@ typecheck-both: typecheck-pyright typecheck-mypy
|
|
|
51
52
|
|
|
52
53
|
.PHONY: test
|
|
53
54
|
test: ## Run tests and collect coverage data
|
|
54
|
-
|
|
55
|
+
@# To test using a specific version of python, run 'make install-all-python' then set environment variable PYTEST_PYTHON=3.10 or similar
|
|
56
|
+
$(if $(PYTEST_PYTHON),UV_PROJECT_ENVIRONMENT=.venv$(subst .,,$(PYTEST_PYTHON))) uv run $(if $(PYTEST_PYTHON),--python $(PYTEST_PYTHON)) coverage run -m pytest -n auto --dist=loadgroup --durations=20
|
|
55
57
|
@uv run coverage combine
|
|
56
58
|
@uv run coverage report
|
|
57
59
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: Agent Framework / shim to use Pydantic with LLMs
|
|
5
5
|
Project-URL: Homepage, https://ai.pydantic.dev
|
|
6
6
|
Project-URL: Source, https://github.com/pydantic/pydantic-ai
|
|
@@ -26,15 +26,15 @@ 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.
|
|
29
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,logfire,mcp,mistral,openai,retries,temporal,vertexai]==1.5.0
|
|
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.
|
|
33
|
+
Requires-Dist: pydantic-ai-slim[dbos]==1.5.0; extra == 'dbos'
|
|
34
34
|
Provides-Extra: examples
|
|
35
|
-
Requires-Dist: pydantic-ai-examples==1.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==1.5.0; extra == 'examples'
|
|
36
36
|
Provides-Extra: prefect
|
|
37
|
-
Requires-Dist: pydantic-ai-slim[prefect]==1.
|
|
37
|
+
Requires-Dist: pydantic-ai-slim[prefect]==1.5.0; extra == 'prefect'
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
39
39
|
|
|
40
40
|
<div align="center">
|
|
@@ -4,10 +4,11 @@ import json
|
|
|
4
4
|
import sys
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Any, Literal
|
|
7
|
+
from typing import Any, Literal, cast
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
10
|
import yaml
|
|
11
|
+
from _pytest.python_api import RaisesContext
|
|
11
12
|
from dirty_equals import HasRepr, IsNumber
|
|
12
13
|
from inline_snapshot import snapshot
|
|
13
14
|
from pydantic import BaseModel, TypeAdapter
|
|
@@ -963,7 +964,7 @@ async def test_from_text_failure():
|
|
|
963
964
|
],
|
|
964
965
|
'evaluators': ['NotAnEvaluator'],
|
|
965
966
|
}
|
|
966
|
-
with pytest.raises(ExceptionGroup) as exc_info:
|
|
967
|
+
with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
|
|
967
968
|
Dataset[TaskInput, TaskOutput, TaskMetadata].from_text(json.dumps(dataset_dict))
|
|
968
969
|
assert exc_info.value == HasRepr(
|
|
969
970
|
repr(
|
|
@@ -993,7 +994,7 @@ async def test_from_text_failure():
|
|
|
993
994
|
],
|
|
994
995
|
'evaluators': ['LLMJudge'],
|
|
995
996
|
}
|
|
996
|
-
with pytest.raises(ExceptionGroup) as exc_info:
|
|
997
|
+
with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
|
|
997
998
|
Dataset[TaskInput, TaskOutput, TaskMetadata].from_text(json.dumps(dataset_dict))
|
|
998
999
|
assert exc_info.value == HasRepr( # pragma: lax no cover
|
|
999
1000
|
repr(
|
|
@@ -4,9 +4,10 @@ import functools
|
|
|
4
4
|
import sys
|
|
5
5
|
from collections.abc import Callable
|
|
6
6
|
from functools import partial
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any, cast
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
+
from _pytest.python_api import RaisesContext
|
|
10
11
|
from dirty_equals import HasRepr
|
|
11
12
|
|
|
12
13
|
from ..conftest import try_import
|
|
@@ -143,7 +144,7 @@ async def test_task_group_gather_with_error():
|
|
|
143
144
|
return 3
|
|
144
145
|
|
|
145
146
|
tasks = [task1, task2, task3]
|
|
146
|
-
with pytest.raises(ExceptionGroup) as exc_info:
|
|
147
|
+
with cast(RaisesContext[ExceptionGroup[Any]], pytest.raises(ExceptionGroup)) as exc_info:
|
|
147
148
|
await task_group_gather(tasks)
|
|
148
149
|
|
|
149
150
|
assert exc_info.value == HasRepr(
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"""Tests for broadcast (parallel) and map (fan-out) operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from pydantic_graph.beta import GraphBuilder, StepContext
|
|
10
|
+
from pydantic_graph.beta.join import reduce_list_append
|
|
11
|
+
|
|
12
|
+
pytestmark = pytest.mark.anyio
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class CounterState:
|
|
17
|
+
values: list[int] = field(default_factory=list)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def test_broadcast_to_multiple_steps():
|
|
21
|
+
"""Test broadcasting the same data to multiple parallel steps."""
|
|
22
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int])
|
|
23
|
+
|
|
24
|
+
@g.step
|
|
25
|
+
async def source(ctx: StepContext[CounterState, None, None]) -> int:
|
|
26
|
+
return 10
|
|
27
|
+
|
|
28
|
+
@g.step
|
|
29
|
+
async def add_one(ctx: StepContext[CounterState, None, int]) -> int:
|
|
30
|
+
return ctx.inputs + 1
|
|
31
|
+
|
|
32
|
+
@g.step
|
|
33
|
+
async def add_two(ctx: StepContext[CounterState, None, int]) -> int:
|
|
34
|
+
return ctx.inputs + 2
|
|
35
|
+
|
|
36
|
+
@g.step
|
|
37
|
+
async def add_three(ctx: StepContext[CounterState, None, int]) -> int:
|
|
38
|
+
return ctx.inputs + 3
|
|
39
|
+
|
|
40
|
+
collect = g.join(reduce_list_append, initial_factory=list[int])
|
|
41
|
+
|
|
42
|
+
g.add(
|
|
43
|
+
g.edge_from(g.start_node).to(source),
|
|
44
|
+
g.edge_from(source).to(add_one, add_two, add_three),
|
|
45
|
+
g.edge_from(add_one, add_two, add_three).to(collect),
|
|
46
|
+
g.edge_from(collect).to(g.end_node),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
graph = g.build()
|
|
50
|
+
result = await graph.run(state=CounterState())
|
|
51
|
+
# Results can be in any order due to parallel execution
|
|
52
|
+
assert sorted(result) == [11, 12, 13]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
async def test_map_over_list():
|
|
56
|
+
"""Test mapping a list to process items in parallel."""
|
|
57
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int])
|
|
58
|
+
|
|
59
|
+
@g.step
|
|
60
|
+
async def generate_list(ctx: StepContext[CounterState, None, None]) -> list[int]:
|
|
61
|
+
return [1, 2, 3, 4, 5]
|
|
62
|
+
|
|
63
|
+
@g.step
|
|
64
|
+
async def square(ctx: StepContext[CounterState, None, int]) -> int:
|
|
65
|
+
return ctx.inputs * ctx.inputs
|
|
66
|
+
|
|
67
|
+
collect = g.join(reduce_list_append, initial_factory=list[int])
|
|
68
|
+
|
|
69
|
+
g.add_mapping_edge(generate_list, square)
|
|
70
|
+
g.add(
|
|
71
|
+
g.edge_from(g.start_node).to(generate_list),
|
|
72
|
+
g.edge_from(square).to(collect),
|
|
73
|
+
g.edge_from(collect).to(g.end_node),
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
graph = g.build()
|
|
77
|
+
result = await graph.run(state=CounterState())
|
|
78
|
+
assert sorted(result) == [1, 4, 9, 16, 25]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async def test_map_with_labels():
|
|
82
|
+
"""Test map operation with labeled edges."""
|
|
83
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[str])
|
|
84
|
+
|
|
85
|
+
@g.step
|
|
86
|
+
async def generate_numbers(ctx: StepContext[CounterState, None, None]) -> list[int]:
|
|
87
|
+
return [10, 20, 30]
|
|
88
|
+
|
|
89
|
+
@g.step
|
|
90
|
+
async def stringify(ctx: StepContext[CounterState, None, int]) -> str:
|
|
91
|
+
return f'Value: {ctx.inputs}'
|
|
92
|
+
|
|
93
|
+
collect = g.join(reduce_list_append, initial_factory=list[str])
|
|
94
|
+
|
|
95
|
+
g.add_mapping_edge(
|
|
96
|
+
generate_numbers,
|
|
97
|
+
stringify,
|
|
98
|
+
pre_map_label='before map',
|
|
99
|
+
post_map_label='after map',
|
|
100
|
+
)
|
|
101
|
+
g.add(
|
|
102
|
+
g.edge_from(g.start_node).to(generate_numbers),
|
|
103
|
+
g.edge_from(stringify).to(collect),
|
|
104
|
+
g.edge_from(collect).to(g.end_node),
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
graph = g.build()
|
|
108
|
+
result = await graph.run(state=CounterState())
|
|
109
|
+
assert sorted(result) == ['Value: 10', 'Value: 20', 'Value: 30']
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
async def test_map_empty_list():
|
|
113
|
+
"""Test mapping an empty list."""
|
|
114
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int])
|
|
115
|
+
|
|
116
|
+
@g.step
|
|
117
|
+
async def generate_empty(ctx: StepContext[CounterState, None, None]) -> list[int]:
|
|
118
|
+
return []
|
|
119
|
+
|
|
120
|
+
@g.step
|
|
121
|
+
async def double(ctx: StepContext[CounterState, None, int]) -> int:
|
|
122
|
+
return ctx.inputs * 2 # pragma: no cover
|
|
123
|
+
|
|
124
|
+
collect = g.join(reduce_list_append, initial_factory=list[int])
|
|
125
|
+
|
|
126
|
+
g.add_mapping_edge(generate_empty, double, downstream_join_id=collect.id)
|
|
127
|
+
g.add(
|
|
128
|
+
g.edge_from(g.start_node).to(generate_empty),
|
|
129
|
+
g.edge_from(double).to(collect),
|
|
130
|
+
g.edge_from(collect).to(g.end_node),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
graph = g.build()
|
|
134
|
+
result = await graph.run(state=CounterState())
|
|
135
|
+
assert result == []
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
async def test_nested_broadcasts():
|
|
139
|
+
"""Test nested broadcast operations."""
|
|
140
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int])
|
|
141
|
+
|
|
142
|
+
@g.step
|
|
143
|
+
async def start_value(ctx: StepContext[CounterState, None, None]) -> int:
|
|
144
|
+
return 5
|
|
145
|
+
|
|
146
|
+
@g.step
|
|
147
|
+
async def path_a1(ctx: StepContext[CounterState, None, int]) -> int:
|
|
148
|
+
return ctx.inputs + 1
|
|
149
|
+
|
|
150
|
+
@g.step
|
|
151
|
+
async def path_a2(ctx: StepContext[CounterState, None, int]) -> int:
|
|
152
|
+
return ctx.inputs + 10
|
|
153
|
+
|
|
154
|
+
@g.step
|
|
155
|
+
async def path_b1(ctx: StepContext[CounterState, None, int]) -> int:
|
|
156
|
+
return ctx.inputs * 2
|
|
157
|
+
|
|
158
|
+
@g.step
|
|
159
|
+
async def path_b2(ctx: StepContext[CounterState, None, int]) -> int:
|
|
160
|
+
return ctx.inputs * 3
|
|
161
|
+
|
|
162
|
+
collect = g.join(reduce_list_append, initial_factory=list[int])
|
|
163
|
+
|
|
164
|
+
g.add(
|
|
165
|
+
g.edge_from(g.start_node).to(start_value),
|
|
166
|
+
g.edge_from(start_value).to(path_a1, path_b1),
|
|
167
|
+
g.edge_from(path_a1).to(path_a2),
|
|
168
|
+
g.edge_from(path_b1).to(path_b2),
|
|
169
|
+
g.edge_from(path_a2, path_b2).to(collect),
|
|
170
|
+
g.edge_from(collect).to(g.end_node),
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
graph = g.build()
|
|
174
|
+
result = await graph.run(state=CounterState())
|
|
175
|
+
# path_a: 5 + 1 + 10 = 16
|
|
176
|
+
# path_b: 5 * 2 * 3 = 30
|
|
177
|
+
assert sorted(result) == [16, 30]
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
async def test_map_then_broadcast():
|
|
181
|
+
"""Test mapping followed by broadcasting from each map item."""
|
|
182
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int])
|
|
183
|
+
|
|
184
|
+
@g.step
|
|
185
|
+
async def generate_list(ctx: StepContext[CounterState, None, None]) -> list[int]:
|
|
186
|
+
return [10, 20]
|
|
187
|
+
|
|
188
|
+
@g.step
|
|
189
|
+
async def add_one(ctx: StepContext[CounterState, None, int]) -> int:
|
|
190
|
+
return ctx.inputs + 1
|
|
191
|
+
|
|
192
|
+
@g.step
|
|
193
|
+
async def add_two(ctx: StepContext[CounterState, None, int]) -> int:
|
|
194
|
+
return ctx.inputs + 2
|
|
195
|
+
|
|
196
|
+
collect = g.join(reduce_list_append, initial_factory=list[int])
|
|
197
|
+
|
|
198
|
+
g.add(
|
|
199
|
+
g.edge_from(g.start_node).to(generate_list),
|
|
200
|
+
g.edge_from(generate_list).map().to(add_one, add_two),
|
|
201
|
+
g.edge_from(add_one, add_two).to(collect),
|
|
202
|
+
g.edge_from(collect).to(g.end_node),
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
graph = g.build()
|
|
206
|
+
result = await graph.run(state=CounterState())
|
|
207
|
+
# From 10: 11, 12
|
|
208
|
+
# From 20: 21, 22
|
|
209
|
+
assert sorted(result) == [11, 12, 21, 22]
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
async def test_multiple_sequential_maps():
|
|
213
|
+
"""Test multiple sequential map operations."""
|
|
214
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[str])
|
|
215
|
+
|
|
216
|
+
@g.step
|
|
217
|
+
async def generate_pairs(ctx: StepContext[CounterState, None, None]) -> list[tuple[int, int]]:
|
|
218
|
+
return [(1, 2), (3, 4)]
|
|
219
|
+
|
|
220
|
+
@g.step
|
|
221
|
+
async def unpack_pair(ctx: StepContext[CounterState, None, tuple[int, int]]) -> list[int]:
|
|
222
|
+
return [ctx.inputs[0], ctx.inputs[1]]
|
|
223
|
+
|
|
224
|
+
@g.step
|
|
225
|
+
async def stringify(ctx: StepContext[CounterState, None, int]) -> str:
|
|
226
|
+
return f'num:{ctx.inputs}'
|
|
227
|
+
|
|
228
|
+
collect = g.join(reduce_list_append, initial_factory=list[str])
|
|
229
|
+
|
|
230
|
+
g.add(
|
|
231
|
+
g.edge_from(g.start_node).to(generate_pairs),
|
|
232
|
+
g.edge_from(generate_pairs).map().to(unpack_pair),
|
|
233
|
+
g.edge_from(unpack_pair).map().to(stringify),
|
|
234
|
+
g.edge_from(stringify).to(collect),
|
|
235
|
+
g.edge_from(collect).to(g.end_node),
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
graph = g.build()
|
|
239
|
+
result = await graph.run(state=CounterState())
|
|
240
|
+
assert sorted(result) == ['num:1', 'num:2', 'num:3', 'num:4']
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
async def test_broadcast_with_different_outputs():
|
|
244
|
+
"""Test that broadcasts can produce different types of outputs."""
|
|
245
|
+
g = GraphBuilder(state_type=CounterState, output_type=list[int | str])
|
|
246
|
+
|
|
247
|
+
@g.step
|
|
248
|
+
async def source(ctx: StepContext[CounterState, None, None]) -> int:
|
|
249
|
+
return 42
|
|
250
|
+
|
|
251
|
+
@g.step
|
|
252
|
+
async def return_int(ctx: StepContext[CounterState, None, int]) -> int:
|
|
253
|
+
return ctx.inputs
|
|
254
|
+
|
|
255
|
+
@g.step
|
|
256
|
+
async def return_str(ctx: StepContext[CounterState, None, int]) -> str:
|
|
257
|
+
return str(ctx.inputs)
|
|
258
|
+
|
|
259
|
+
collect = g.join(reduce_list_append, initial_factory=list[int | str])
|
|
260
|
+
|
|
261
|
+
g.add(
|
|
262
|
+
g.edge_from(g.start_node).to(source),
|
|
263
|
+
g.edge_from(source).to(return_int, return_str),
|
|
264
|
+
g.edge_from(return_int, return_str).to(collect),
|
|
265
|
+
g.edge_from(collect).to(g.end_node),
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
graph = g.build()
|
|
269
|
+
result = await graph.run(state=CounterState())
|
|
270
|
+
# Order may vary
|
|
271
|
+
assert set(result) == {42, '42'}
|