pydantic-ai 0.7.5__tar.gz → 0.8.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-0.7.5 → pydantic_ai-0.8.0}/PKG-INFO +3 -3
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/conftest.py +7 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/json_body_serializer.py +1 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/mcp_server.py +20 -5
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +65 -0
- pydantic_ai-0.8.0/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider.yaml +69 -0
- pydantic_ai-0.8.0/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_harmony.yaml +70 -0
- pydantic_ai-0.8.0/tests/models/cassettes/test_openai/test_openai_model_cerebras_provider_qwen_3_coder.yaml +189 -0
- pydantic_ai-0.8.0/tests/models/cassettes/test_openai_responses/test_openai_responses_usage_without_tokens_details.yaml +96 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_deepseek.py +3 -3
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model.py +8 -8
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model_names.py +26 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_openai.py +111 -72
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_openai_responses.py +17 -4
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_azure.py +4 -4
- pydantic_ai-0.8.0/tests/providers/test_cerebras.py +86 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_deepseek.py +2 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_grok.py +2 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_heroku.py +3 -3
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_moonshotai.py +2 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_openrouter.py +2 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_agent.py +66 -4
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_cli.py +44 -2
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_examples.py +5 -4
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_live.py +4 -4
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_logfire.py +217 -113
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_mcp.py +46 -7
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_streaming.py +6 -13
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_temporal.py +15 -9
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_tenacity.py +121 -27
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/.gitignore +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/LICENSE +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/Makefile +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/README.md +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/pyproject.toml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/assets/product_name.txt +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_agent_with_server_not_running.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource_link.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource_link.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource_link.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_complex_agent_run.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_complex_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_complex_agent_run_stream_in_workflow.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_logfire_plugin.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_multiple_agents.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_simple_agent_run_in_workflow.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_iter.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_override_deps_in_workflow.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_run.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_run_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_run_sync.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_sync_tool_activity_disabled.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_with_dataclass_deps_as_dict.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_with_non_dict_deps.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/cassettes/test_temporal/test_temporal_agent_with_unserializable_deps_type.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/import_examples.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_pass_history_to_another_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_anthropic_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_download_item/test_download_item_audio_mpeg.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_empty_assistant_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_receive_web_search_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_server_tool_receive_history_from_another_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_url_context_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_usage_limit_not_exceeded.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_google/test_google_vertexai_model_usage_limit_exceeded.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_groq_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_groq_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input_with_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_invalid_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_model_settings_temperature_ignored_on_gpt_5.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_model_not_supported.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_openai_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_system_prompt_role_o1_mini.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_text_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai/test_valid_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_code_execution_tool_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_invalid_region.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_web_search_tool_with_user_location.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_verbosity.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_google.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_huggingface.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/parts_from_messages.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_huggingface.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_ollama.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/providers/test_vercel.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_ag_ui.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_builtin_tools.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_deps.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_direct.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_messages.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_settings.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_tools.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_toolsets.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/test_utils.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.7.5 → pydantic_ai-0.8.0}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.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
|
|
@@ -28,11 +28,11 @@ Classifier: Topic :: Internet
|
|
|
28
28
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Requires-Python: >=3.9
|
|
31
|
-
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,temporal,vertexai]==0.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[ag-ui,anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,retries,temporal,vertexai]==0.8.0
|
|
32
32
|
Provides-Extra: a2a
|
|
33
33
|
Requires-Dist: fasta2a>=0.4.1; extra == 'a2a'
|
|
34
34
|
Provides-Extra: examples
|
|
35
|
-
Requires-Dist: pydantic-ai-examples==0.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==0.8.0; extra == 'examples'
|
|
36
36
|
Provides-Extra: logfire
|
|
37
37
|
Requires-Dist: logfire>=3.14.1; extra == 'logfire'
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
@@ -390,6 +390,11 @@ def heroku_inference_key() -> str:
|
|
|
390
390
|
return os.getenv('HEROKU_INFERENCE_KEY', 'mock-api-key')
|
|
391
391
|
|
|
392
392
|
|
|
393
|
+
@pytest.fixture(scope='session')
|
|
394
|
+
def cerebras_api_key() -> str:
|
|
395
|
+
return os.getenv('CEREBRAS_API_KEY', 'mock-api-key')
|
|
396
|
+
|
|
397
|
+
|
|
393
398
|
@pytest.fixture(scope='session')
|
|
394
399
|
def bedrock_provider():
|
|
395
400
|
try:
|
|
@@ -476,10 +481,10 @@ def model(
|
|
|
476
481
|
|
|
477
482
|
return TestModel()
|
|
478
483
|
elif request.param == 'openai':
|
|
479
|
-
from pydantic_ai.models.openai import
|
|
484
|
+
from pydantic_ai.models.openai import OpenAIChatModel
|
|
480
485
|
from pydantic_ai.providers.openai import OpenAIProvider
|
|
481
486
|
|
|
482
|
-
return
|
|
487
|
+
return OpenAIChatModel('o3-mini', provider=OpenAIProvider(api_key=openai_api_key))
|
|
483
488
|
elif request.param == 'anthropic':
|
|
484
489
|
from pydantic_ai.models.anthropic import AnthropicModel
|
|
485
490
|
from pydantic_ai.providers.anthropic import AnthropicProvider
|
|
@@ -69,6 +69,7 @@ def serialize(cassette_dict: Any): # pragma: lax no cover
|
|
|
69
69
|
# Responses will have the body under a field called 'string'
|
|
70
70
|
body = body.get('string')
|
|
71
71
|
if body is not None:
|
|
72
|
+
# NOTE(Marcelo): This doesn't handle gzip compression.
|
|
72
73
|
data['parsed_body'] = json.loads(body) # pyright: ignore[reportUnknownArgumentType]
|
|
73
74
|
if 'access_token' in data['parsed_body']:
|
|
74
75
|
data['parsed_body']['access_token'] = 'scrubbed'
|
|
@@ -3,8 +3,7 @@ from pathlib import Path
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
5
|
from mcp.server.fastmcp import Context, FastMCP, Image
|
|
6
|
-
from mcp.server.session import
|
|
7
|
-
from mcp.shared.context import LifespanContextT, RequestT
|
|
6
|
+
from mcp.server.session import ServerSession
|
|
8
7
|
from mcp.types import (
|
|
9
8
|
BlobResourceContents,
|
|
10
9
|
EmbeddedResource,
|
|
@@ -13,7 +12,7 @@ from mcp.types import (
|
|
|
13
12
|
TextContent,
|
|
14
13
|
TextResourceContents,
|
|
15
14
|
)
|
|
16
|
-
from pydantic import AnyUrl
|
|
15
|
+
from pydantic import AnyUrl, BaseModel
|
|
17
16
|
|
|
18
17
|
mcp = FastMCP('Pydantic AI MCP Server')
|
|
19
18
|
log_level = 'unset'
|
|
@@ -170,7 +169,7 @@ async def get_log_level(ctx: Context) -> str: # type: ignore
|
|
|
170
169
|
|
|
171
170
|
|
|
172
171
|
@mcp.tool()
|
|
173
|
-
async def echo_deps(ctx: Context[
|
|
172
|
+
async def echo_deps(ctx: Context[ServerSession, None]) -> dict[str, Any]:
|
|
174
173
|
"""Echo the run context.
|
|
175
174
|
|
|
176
175
|
Args:
|
|
@@ -186,7 +185,7 @@ async def echo_deps(ctx: Context[ServerSessionT, LifespanContextT, RequestT]) ->
|
|
|
186
185
|
|
|
187
186
|
|
|
188
187
|
@mcp.tool()
|
|
189
|
-
async def use_sampling(ctx: Context, foo: str) -> str:
|
|
188
|
+
async def use_sampling(ctx: Context[ServerSession, None], foo: str) -> str:
|
|
190
189
|
"""Use sampling callback."""
|
|
191
190
|
|
|
192
191
|
result = await ctx.session.create_message(
|
|
@@ -202,6 +201,22 @@ async def use_sampling(ctx: Context, foo: str) -> str: # type: ignore
|
|
|
202
201
|
return result.model_dump_json(indent=2)
|
|
203
202
|
|
|
204
203
|
|
|
204
|
+
class UserResponse(BaseModel):
|
|
205
|
+
response: str
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
@mcp.tool()
|
|
209
|
+
async def use_elicitation(ctx: Context[ServerSession, None], question: str) -> str:
|
|
210
|
+
"""Use elicitation callback to ask the user a question."""
|
|
211
|
+
|
|
212
|
+
result = await ctx.elicit(message=question, schema=UserResponse)
|
|
213
|
+
|
|
214
|
+
if result.action == 'accept' and result.data:
|
|
215
|
+
return f'User responded: {result.data.response}'
|
|
216
|
+
else:
|
|
217
|
+
return f'User {result.action}ed the elicitation'
|
|
218
|
+
|
|
219
|
+
|
|
205
220
|
@mcp._mcp_server.set_logging_level() # pyright: ignore[reportPrivateUsage]
|
|
206
221
|
async def set_logging_level(level: str) -> None:
|
|
207
222
|
global log_level
|
|
@@ -83,4 +83,69 @@ interactions:
|
|
|
83
83
|
status:
|
|
84
84
|
code: 200
|
|
85
85
|
message: OK
|
|
86
|
+
- request:
|
|
87
|
+
body: ''
|
|
88
|
+
headers:
|
|
89
|
+
accept:
|
|
90
|
+
- application/json
|
|
91
|
+
connection:
|
|
92
|
+
- keep-alive
|
|
93
|
+
host:
|
|
94
|
+
- api.cerebras.ai
|
|
95
|
+
method: GET
|
|
96
|
+
uri: https://api.cerebras.ai/v1/models
|
|
97
|
+
response:
|
|
98
|
+
headers:
|
|
99
|
+
alt-svc:
|
|
100
|
+
- h3=":443"; ma=86400
|
|
101
|
+
content-length:
|
|
102
|
+
- '762'
|
|
103
|
+
content-type:
|
|
104
|
+
- application/json
|
|
105
|
+
referrer-policy:
|
|
106
|
+
- strict-origin-when-cross-origin
|
|
107
|
+
strict-transport-security:
|
|
108
|
+
- max-age=3600; includeSubDomains
|
|
109
|
+
parsed_body:
|
|
110
|
+
data:
|
|
111
|
+
- created: 0
|
|
112
|
+
id: llama-4-maverick-17b-128e-instruct
|
|
113
|
+
object: model
|
|
114
|
+
owned_by: Cerebras
|
|
115
|
+
- created: 0
|
|
116
|
+
id: qwen-3-32b
|
|
117
|
+
object: model
|
|
118
|
+
owned_by: Cerebras
|
|
119
|
+
- created: 0
|
|
120
|
+
id: qwen-3-235b-a22b-instruct-2507
|
|
121
|
+
object: model
|
|
122
|
+
owned_by: Cerebras
|
|
123
|
+
- created: 0
|
|
124
|
+
id: llama-4-scout-17b-16e-instruct
|
|
125
|
+
object: model
|
|
126
|
+
owned_by: Cerebras
|
|
127
|
+
- created: 0
|
|
128
|
+
id: gpt-oss-120b
|
|
129
|
+
object: model
|
|
130
|
+
owned_by: Cerebras
|
|
131
|
+
- created: 0
|
|
132
|
+
id: qwen-3-coder-480b
|
|
133
|
+
object: model
|
|
134
|
+
owned_by: Cerebras
|
|
135
|
+
- created: 0
|
|
136
|
+
id: llama-3.3-70b
|
|
137
|
+
object: model
|
|
138
|
+
owned_by: Cerebras
|
|
139
|
+
- created: 0
|
|
140
|
+
id: llama3.1-8b
|
|
141
|
+
object: model
|
|
142
|
+
owned_by: Cerebras
|
|
143
|
+
- created: 0
|
|
144
|
+
id: qwen-3-235b-a22b-thinking-2507
|
|
145
|
+
object: model
|
|
146
|
+
owned_by: Cerebras
|
|
147
|
+
object: list
|
|
148
|
+
status:
|
|
149
|
+
code: 200
|
|
150
|
+
message: OK
|
|
86
151
|
version: 1
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
- '111'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
host:
|
|
15
|
+
- api.cerebras.ai
|
|
16
|
+
method: POST
|
|
17
|
+
parsed_body:
|
|
18
|
+
messages:
|
|
19
|
+
- content: What is the capital of France?
|
|
20
|
+
role: user
|
|
21
|
+
model: llama3.3-70b
|
|
22
|
+
stream: false
|
|
23
|
+
uri: https://api.cerebras.ai/v1/chat/completions
|
|
24
|
+
response:
|
|
25
|
+
headers:
|
|
26
|
+
alt-svc:
|
|
27
|
+
- h3=":443"; ma=86400
|
|
28
|
+
connection:
|
|
29
|
+
- keep-alive
|
|
30
|
+
content-length:
|
|
31
|
+
- '558'
|
|
32
|
+
content-type:
|
|
33
|
+
- application/json
|
|
34
|
+
inference-id:
|
|
35
|
+
- chatcmpl-175bff47-ce89-4fad-bead-62a14f787c49
|
|
36
|
+
referrer-policy:
|
|
37
|
+
- strict-origin-when-cross-origin
|
|
38
|
+
strict-transport-security:
|
|
39
|
+
- max-age=3600; includeSubDomains
|
|
40
|
+
transfer-encoding:
|
|
41
|
+
- chunked
|
|
42
|
+
parsed_body:
|
|
43
|
+
choices:
|
|
44
|
+
- finish_reason: stop
|
|
45
|
+
index: 0
|
|
46
|
+
message:
|
|
47
|
+
content: The capital of France is Paris.
|
|
48
|
+
role: assistant
|
|
49
|
+
created: 1756198141
|
|
50
|
+
id: chatcmpl-175bff47-ce89-4fad-bead-62a14f787c49
|
|
51
|
+
model: llama-3.3-70b
|
|
52
|
+
object: chat.completion
|
|
53
|
+
system_fingerprint: fp_b6a51bb1d26f03ea3772
|
|
54
|
+
time_info:
|
|
55
|
+
completion_time: 0.003633212
|
|
56
|
+
created: 1756198141
|
|
57
|
+
prompt_time: 0.002251218
|
|
58
|
+
queue_time: 0.000199151
|
|
59
|
+
total_time: 0.007346153259277344
|
|
60
|
+
usage:
|
|
61
|
+
completion_tokens: 8
|
|
62
|
+
prompt_tokens: 42
|
|
63
|
+
prompt_tokens_details:
|
|
64
|
+
cached_tokens: 0
|
|
65
|
+
total_tokens: 50
|
|
66
|
+
status:
|
|
67
|
+
code: 200
|
|
68
|
+
message: OK
|
|
69
|
+
version: 1
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
- '111'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
host:
|
|
15
|
+
- api.cerebras.ai
|
|
16
|
+
method: POST
|
|
17
|
+
parsed_body:
|
|
18
|
+
messages:
|
|
19
|
+
- content: What is the capital of France?
|
|
20
|
+
role: user
|
|
21
|
+
model: gpt-oss-120b
|
|
22
|
+
stream: false
|
|
23
|
+
uri: https://api.cerebras.ai/v1/chat/completions
|
|
24
|
+
response:
|
|
25
|
+
headers:
|
|
26
|
+
alt-svc:
|
|
27
|
+
- h3=":443"; ma=86400
|
|
28
|
+
connection:
|
|
29
|
+
- keep-alive
|
|
30
|
+
content-length:
|
|
31
|
+
- '661'
|
|
32
|
+
content-type:
|
|
33
|
+
- application/json
|
|
34
|
+
inference-id:
|
|
35
|
+
- chatcmpl-bc3bbd04-e8df-4ab6-bd82-9fb33726cb93
|
|
36
|
+
referrer-policy:
|
|
37
|
+
- strict-origin-when-cross-origin
|
|
38
|
+
strict-transport-security:
|
|
39
|
+
- max-age=3600; includeSubDomains
|
|
40
|
+
transfer-encoding:
|
|
41
|
+
- chunked
|
|
42
|
+
parsed_body:
|
|
43
|
+
choices:
|
|
44
|
+
- finish_reason: stop
|
|
45
|
+
index: 0
|
|
46
|
+
message:
|
|
47
|
+
content: The capital of France is **Paris**.
|
|
48
|
+
reasoning: 'User asks simple question: capital of France. Answer: Paris. Provide concise answer.'
|
|
49
|
+
role: assistant
|
|
50
|
+
created: 1756199010
|
|
51
|
+
id: chatcmpl-bc3bbd04-e8df-4ab6-bd82-9fb33726cb93
|
|
52
|
+
model: gpt-oss-120b
|
|
53
|
+
object: chat.completion
|
|
54
|
+
system_fingerprint: fp_a5fe16f102a24cf8caf1
|
|
55
|
+
time_info:
|
|
56
|
+
completion_time: 0.026440676
|
|
57
|
+
created: 1756199010
|
|
58
|
+
prompt_time: 0.002999482
|
|
59
|
+
queue_time: 0.000899766
|
|
60
|
+
total_time: 0.03260970115661621
|
|
61
|
+
usage:
|
|
62
|
+
completion_tokens: 36
|
|
63
|
+
prompt_tokens: 74
|
|
64
|
+
prompt_tokens_details:
|
|
65
|
+
cached_tokens: 0
|
|
66
|
+
total_tokens: 110
|
|
67
|
+
status:
|
|
68
|
+
code: 200
|
|
69
|
+
message: OK
|
|
70
|
+
version: 1
|
|
@@ -0,0 +1,189 @@
|
|
|
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
|
+
- '414'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
cookie:
|
|
15
|
+
- __cf_bm=hqG7YTrLAdrCNKQU34H3qhIKxESTvFsG9X7OjEzKuDk-1756198142-1.0.1.1-WG8.rT3zC66xxHN6c33AcERCdH0FDum2a7djbEu85gy9rEiq9nTHQVY8g5BAZ_DmviuVxhphMwTsxDclYqQCobIlgurA9g.prg5M_i9PZyM
|
|
16
|
+
host:
|
|
17
|
+
- api.cerebras.ai
|
|
18
|
+
method: POST
|
|
19
|
+
parsed_body:
|
|
20
|
+
messages:
|
|
21
|
+
- content: What is the capital of France?
|
|
22
|
+
role: user
|
|
23
|
+
model: qwen-3-coder-480b
|
|
24
|
+
stream: false
|
|
25
|
+
tool_choice: auto
|
|
26
|
+
tools:
|
|
27
|
+
- function:
|
|
28
|
+
description: The final response which ends this conversation
|
|
29
|
+
name: final_result
|
|
30
|
+
parameters:
|
|
31
|
+
properties:
|
|
32
|
+
city:
|
|
33
|
+
type: string
|
|
34
|
+
country:
|
|
35
|
+
type: string
|
|
36
|
+
required:
|
|
37
|
+
- city
|
|
38
|
+
- country
|
|
39
|
+
title: Location
|
|
40
|
+
type: object
|
|
41
|
+
type: function
|
|
42
|
+
uri: https://api.cerebras.ai/v1/chat/completions
|
|
43
|
+
response:
|
|
44
|
+
headers:
|
|
45
|
+
alt-svc:
|
|
46
|
+
- h3=":443"; ma=86400
|
|
47
|
+
connection:
|
|
48
|
+
- keep-alive
|
|
49
|
+
content-length:
|
|
50
|
+
- '645'
|
|
51
|
+
content-type:
|
|
52
|
+
- application/json
|
|
53
|
+
inference-id:
|
|
54
|
+
- chatcmpl-65763e70-ba85-41a3-a758-4dc3fcb73c9a
|
|
55
|
+
referrer-policy:
|
|
56
|
+
- strict-origin-when-cross-origin
|
|
57
|
+
strict-transport-security:
|
|
58
|
+
- max-age=3600; includeSubDomains
|
|
59
|
+
transfer-encoding:
|
|
60
|
+
- chunked
|
|
61
|
+
parsed_body:
|
|
62
|
+
choices:
|
|
63
|
+
- finish_reason: stop
|
|
64
|
+
index: 0
|
|
65
|
+
message:
|
|
66
|
+
content: The capital of France is Paris. If you need more information about Paris or any other details, feel free
|
|
67
|
+
to ask!
|
|
68
|
+
role: assistant
|
|
69
|
+
created: 1756198142
|
|
70
|
+
id: chatcmpl-65763e70-ba85-41a3-a758-4dc3fcb73c9a
|
|
71
|
+
model: qwen-3-coder-480b
|
|
72
|
+
object: chat.completion
|
|
73
|
+
system_fingerprint: fp_4405be376d055dc5bff7
|
|
74
|
+
time_info:
|
|
75
|
+
completion_time: 0.045860486
|
|
76
|
+
created: 1756198142
|
|
77
|
+
prompt_time: 0.011004894
|
|
78
|
+
queue_time: 0.001344637
|
|
79
|
+
total_time: 0.05971097946166992
|
|
80
|
+
usage:
|
|
81
|
+
completion_tokens: 25
|
|
82
|
+
prompt_tokens: 304
|
|
83
|
+
prompt_tokens_details:
|
|
84
|
+
cached_tokens: 0
|
|
85
|
+
total_tokens: 329
|
|
86
|
+
status:
|
|
87
|
+
code: 200
|
|
88
|
+
message: OK
|
|
89
|
+
- request:
|
|
90
|
+
headers:
|
|
91
|
+
accept:
|
|
92
|
+
- application/json
|
|
93
|
+
accept-encoding:
|
|
94
|
+
- gzip, deflate
|
|
95
|
+
connection:
|
|
96
|
+
- keep-alive
|
|
97
|
+
content-length:
|
|
98
|
+
- '727'
|
|
99
|
+
content-type:
|
|
100
|
+
- application/json
|
|
101
|
+
cookie:
|
|
102
|
+
- __cf_bm=hqG7YTrLAdrCNKQU34H3qhIKxESTvFsG9X7OjEzKuDk-1756198142-1.0.1.1-WG8.rT3zC66xxHN6c33AcERCdH0FDum2a7djbEu85gy9rEiq9nTHQVY8g5BAZ_DmviuVxhphMwTsxDclYqQCobIlgurA9g.prg5M_i9PZyM
|
|
103
|
+
host:
|
|
104
|
+
- api.cerebras.ai
|
|
105
|
+
method: POST
|
|
106
|
+
parsed_body:
|
|
107
|
+
messages:
|
|
108
|
+
- content: What is the capital of France?
|
|
109
|
+
role: user
|
|
110
|
+
- content: The capital of France is Paris. If you need more information about Paris or any other details, feel free
|
|
111
|
+
to ask!
|
|
112
|
+
role: assistant
|
|
113
|
+
- content: |-
|
|
114
|
+
Validation feedback:
|
|
115
|
+
Plain text responses are not permitted, please include your response in a tool call
|
|
116
|
+
|
|
117
|
+
Fix the errors and try again.
|
|
118
|
+
role: user
|
|
119
|
+
model: qwen-3-coder-480b
|
|
120
|
+
stream: false
|
|
121
|
+
tool_choice: auto
|
|
122
|
+
tools:
|
|
123
|
+
- function:
|
|
124
|
+
description: The final response which ends this conversation
|
|
125
|
+
name: final_result
|
|
126
|
+
parameters:
|
|
127
|
+
properties:
|
|
128
|
+
city:
|
|
129
|
+
type: string
|
|
130
|
+
country:
|
|
131
|
+
type: string
|
|
132
|
+
required:
|
|
133
|
+
- city
|
|
134
|
+
- country
|
|
135
|
+
title: Location
|
|
136
|
+
type: object
|
|
137
|
+
type: function
|
|
138
|
+
uri: https://api.cerebras.ai/v1/chat/completions
|
|
139
|
+
response:
|
|
140
|
+
headers:
|
|
141
|
+
alt-svc:
|
|
142
|
+
- h3=":443"; ma=86400
|
|
143
|
+
connection:
|
|
144
|
+
- keep-alive
|
|
145
|
+
content-length:
|
|
146
|
+
- '672'
|
|
147
|
+
content-type:
|
|
148
|
+
- application/json
|
|
149
|
+
inference-id:
|
|
150
|
+
- chatcmpl-6659125c-6d06-402c-be3b-4640aa64ffa2
|
|
151
|
+
referrer-policy:
|
|
152
|
+
- strict-origin-when-cross-origin
|
|
153
|
+
strict-transport-security:
|
|
154
|
+
- max-age=3600; includeSubDomains
|
|
155
|
+
transfer-encoding:
|
|
156
|
+
- chunked
|
|
157
|
+
parsed_body:
|
|
158
|
+
choices:
|
|
159
|
+
- finish_reason: tool_calls
|
|
160
|
+
index: 0
|
|
161
|
+
message:
|
|
162
|
+
role: assistant
|
|
163
|
+
tool_calls:
|
|
164
|
+
- function:
|
|
165
|
+
arguments: '{"city": "Paris", "country": "France"}'
|
|
166
|
+
name: final_result
|
|
167
|
+
id: b8847f144
|
|
168
|
+
type: function
|
|
169
|
+
created: 1756198143
|
|
170
|
+
id: chatcmpl-6659125c-6d06-402c-be3b-4640aa64ffa2
|
|
171
|
+
model: qwen-3-coder-480b
|
|
172
|
+
object: chat.completion
|
|
173
|
+
system_fingerprint: fp_4405be376d055dc5bff7
|
|
174
|
+
time_info:
|
|
175
|
+
completion_time: 0.103362557
|
|
176
|
+
created: 1756198143
|
|
177
|
+
prompt_time: 0.22219986
|
|
178
|
+
queue_time: 0.346436935
|
|
179
|
+
total_time: 0.6736249923706055
|
|
180
|
+
usage:
|
|
181
|
+
completion_tokens: 33
|
|
182
|
+
prompt_tokens: 364
|
|
183
|
+
prompt_tokens_details:
|
|
184
|
+
cached_tokens: 0
|
|
185
|
+
total_tokens: 397
|
|
186
|
+
status:
|
|
187
|
+
code: 200
|
|
188
|
+
message: OK
|
|
189
|
+
version: 1
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
- '84'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
host:
|
|
15
|
+
- api.openai.com
|
|
16
|
+
method: POST
|
|
17
|
+
parsed_body:
|
|
18
|
+
input:
|
|
19
|
+
- content: What is 2+2?
|
|
20
|
+
role: user
|
|
21
|
+
model: gpt-4o
|
|
22
|
+
stream: false
|
|
23
|
+
uri: https://api.openai.com/v1/responses
|
|
24
|
+
response:
|
|
25
|
+
headers:
|
|
26
|
+
alt-svc:
|
|
27
|
+
- h3=":443"; ma=86400
|
|
28
|
+
connection:
|
|
29
|
+
- keep-alive
|
|
30
|
+
content-length:
|
|
31
|
+
- '1369'
|
|
32
|
+
content-type:
|
|
33
|
+
- application/json
|
|
34
|
+
openai-organization:
|
|
35
|
+
- pydantic-28gund
|
|
36
|
+
openai-processing-ms:
|
|
37
|
+
- '899'
|
|
38
|
+
openai-project:
|
|
39
|
+
- proj_dKobscVY9YJxeEaDJen54e3d
|
|
40
|
+
openai-version:
|
|
41
|
+
- '2020-10-01'
|
|
42
|
+
strict-transport-security:
|
|
43
|
+
- max-age=31536000; includeSubDomains; preload
|
|
44
|
+
transfer-encoding:
|
|
45
|
+
- chunked
|
|
46
|
+
parsed_body:
|
|
47
|
+
background: false
|
|
48
|
+
created_at: 1756246493
|
|
49
|
+
error: null
|
|
50
|
+
id: resp_68ae31dd0edc819da9e77ad3cdb128770306cb62070aed80
|
|
51
|
+
incomplete_details: null
|
|
52
|
+
instructions: null
|
|
53
|
+
max_output_tokens: null
|
|
54
|
+
max_tool_calls: null
|
|
55
|
+
metadata: {}
|
|
56
|
+
model: gpt-4o-2024-08-06
|
|
57
|
+
object: response
|
|
58
|
+
output:
|
|
59
|
+
- content:
|
|
60
|
+
- annotations: []
|
|
61
|
+
logprobs: []
|
|
62
|
+
text: 2 + 2 equals 4.
|
|
63
|
+
type: output_text
|
|
64
|
+
id: msg_68ae31ddcef0819da13eb00d2b393eb60306cb62070aed80
|
|
65
|
+
role: assistant
|
|
66
|
+
status: completed
|
|
67
|
+
type: message
|
|
68
|
+
parallel_tool_calls: true
|
|
69
|
+
previous_response_id: null
|
|
70
|
+
prompt_cache_key: null
|
|
71
|
+
reasoning:
|
|
72
|
+
effort: null
|
|
73
|
+
summary: null
|
|
74
|
+
safety_identifier: null
|
|
75
|
+
service_tier: default
|
|
76
|
+
status: completed
|
|
77
|
+
store: true
|
|
78
|
+
temperature: 1.0
|
|
79
|
+
text:
|
|
80
|
+
format:
|
|
81
|
+
type: text
|
|
82
|
+
verbosity: medium
|
|
83
|
+
tool_choice: auto
|
|
84
|
+
tools: []
|
|
85
|
+
top_logprobs: 0
|
|
86
|
+
top_p: 1.0
|
|
87
|
+
truncation: disabled
|
|
88
|
+
usage:
|
|
89
|
+
input_tokens: 14
|
|
90
|
+
output_tokens: 9
|
|
91
|
+
total_tokens: 23
|
|
92
|
+
user: null
|
|
93
|
+
status:
|
|
94
|
+
code: 200
|
|
95
|
+
message: OK
|
|
96
|
+
version: 1
|
|
@@ -24,7 +24,7 @@ from pydantic_ai.usage import RequestUsage
|
|
|
24
24
|
from ..conftest import IsDatetime, IsStr, try_import
|
|
25
25
|
|
|
26
26
|
with try_import() as imports_successful:
|
|
27
|
-
from pydantic_ai.models.openai import
|
|
27
|
+
from pydantic_ai.models.openai import OpenAIChatModel
|
|
28
28
|
from pydantic_ai.providers.deepseek import DeepSeekProvider
|
|
29
29
|
|
|
30
30
|
|
|
@@ -36,7 +36,7 @@ pytestmark = [
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
async def test_deepseek_model_thinking_part(allow_model_requests: None, deepseek_api_key: str):
|
|
39
|
-
deepseek_model =
|
|
39
|
+
deepseek_model = OpenAIChatModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
|
|
40
40
|
agent = Agent(model=deepseek_model)
|
|
41
41
|
result = await agent.run('How do I cross the street?')
|
|
42
42
|
assert result.all_messages() == snapshot(
|
|
@@ -63,7 +63,7 @@ async def test_deepseek_model_thinking_part(allow_model_requests: None, deepseek
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
async def test_deepseek_model_thinking_stream(allow_model_requests: None, deepseek_api_key: str):
|
|
66
|
-
deepseek_model =
|
|
66
|
+
deepseek_model = OpenAIChatModel('deepseek-reasoner', provider=DeepSeekProvider(api_key=deepseek_api_key))
|
|
67
67
|
agent = Agent(model=deepseek_model)
|
|
68
68
|
|
|
69
69
|
event_parts: list[Any] = []
|
|
@@ -10,10 +10,10 @@ from ..conftest import TestEnv
|
|
|
10
10
|
# TODO(Marcelo): We need to add Vertex AI to the test cases.
|
|
11
11
|
|
|
12
12
|
TEST_CASES = [
|
|
13
|
-
('OPENAI_API_KEY', 'openai:gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', '
|
|
14
|
-
('OPENAI_API_KEY', 'gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', '
|
|
15
|
-
('OPENAI_API_KEY', 'o1', 'o1', 'openai', 'openai', '
|
|
16
|
-
('AZURE_OPENAI_API_KEY', 'azure:gpt-3.5-turbo', 'gpt-3.5-turbo', 'azure', 'azure', '
|
|
13
|
+
('OPENAI_API_KEY', 'openai:gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIChatModel'),
|
|
14
|
+
('OPENAI_API_KEY', 'gpt-3.5-turbo', 'gpt-3.5-turbo', 'openai', 'openai', 'OpenAIChatModel'),
|
|
15
|
+
('OPENAI_API_KEY', 'o1', 'o1', 'openai', 'openai', 'OpenAIChatModel'),
|
|
16
|
+
('AZURE_OPENAI_API_KEY', 'azure:gpt-3.5-turbo', 'gpt-3.5-turbo', 'azure', 'azure', 'OpenAIChatModel'),
|
|
17
17
|
('GEMINI_API_KEY', 'google-gla:gemini-1.5-flash', 'gemini-1.5-flash', 'google-gla', 'google', 'GoogleModel'),
|
|
18
18
|
('GEMINI_API_KEY', 'gemini-1.5-flash', 'gemini-1.5-flash', 'google-gla', 'google', 'GoogleModel'),
|
|
19
19
|
(
|
|
@@ -70,7 +70,7 @@ TEST_CASES = [
|
|
|
70
70
|
'xai/grok-3-mini',
|
|
71
71
|
'github',
|
|
72
72
|
'github',
|
|
73
|
-
'
|
|
73
|
+
'OpenAIChatModel',
|
|
74
74
|
),
|
|
75
75
|
(
|
|
76
76
|
'MOONSHOTAI_API_KEY',
|
|
@@ -78,7 +78,7 @@ TEST_CASES = [
|
|
|
78
78
|
'kimi-k2-0711-preview',
|
|
79
79
|
'moonshotai',
|
|
80
80
|
'moonshotai',
|
|
81
|
-
'
|
|
81
|
+
'OpenAIChatModel',
|
|
82
82
|
),
|
|
83
83
|
(
|
|
84
84
|
'GROK_API_KEY',
|
|
@@ -86,7 +86,7 @@ TEST_CASES = [
|
|
|
86
86
|
'grok-3',
|
|
87
87
|
'grok',
|
|
88
88
|
'grok',
|
|
89
|
-
'
|
|
89
|
+
'OpenAIChatModel',
|
|
90
90
|
),
|
|
91
91
|
(
|
|
92
92
|
'GROK_API_KEY',
|
|
@@ -94,7 +94,7 @@ TEST_CASES = [
|
|
|
94
94
|
'grok-4',
|
|
95
95
|
'grok',
|
|
96
96
|
'grok',
|
|
97
|
-
'
|
|
97
|
+
'OpenAIChatModel',
|
|
98
98
|
),
|
|
99
99
|
(
|
|
100
100
|
'OPENAI_API_KEY',
|