pydantic-ai 0.4.2__tar.gz → 0.4.3__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.4.2 → pydantic_ai-0.4.3}/PKG-INFO +3 -3
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/pyproject.toml +16 -1
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/conftest.py +14 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_hf_model_instructions.yaml +121 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_hf_model_thinking_part.yaml +291 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml +106 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_image_url_input.yaml +105 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_max_completion_tokens[Qwen-Qwen2.5-72B-Instruct].yaml +122 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_max_completion_tokens[deepseek-ai-DeepSeek-R1-0528].yaml +128 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_max_completion_tokens[meta-llama-Llama-3.3-70B-Instruct].yaml +142 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_request_simple_success_with_vcr.yaml +126 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_request_simple_usage.yaml +122 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_simple_completion.yaml +122 -0
- pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_stream_completion.yaml +319 -0
- pydantic_ai-0.4.3/tests/models/test_huggingface.py +999 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_instrumented.py +8 -1
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model_names.py +3 -0
- pydantic_ai-0.4.3/tests/providers/test_huggingface.py +142 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_agent.py +41 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_cli.py +1 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_direct.py +1 -1
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_examples.py +4 -1
- pydantic_ai-0.4.3/tests/test_logfire.py +1423 -0
- pydantic_ai-0.4.2/tests/test_logfire.py +0 -599
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/.gitignore +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/LICENSE +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/Makefile +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/README.md +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/example_modules/mcp_server.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/ext/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/ext/test_langchain.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/import_examples.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_tool_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_anthropic_tool_with_thinking.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_native_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_tool_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_structured_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_model_youtube_video_url_input_with_vendor_metadata.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_native_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_prompted_output_with_tools.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_timeout.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_tool_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_native_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_openai_tool_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_native_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_native_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_prompted_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_prompted_output_multiple.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_text_output_function.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/cassettes/test_openai_responses/test_tool_output.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_deepseek.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_download_item.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_gemini.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_gemini_vertex.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_google.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_mcp_sampling.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model_settings.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_model_test.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_openai.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/models/test_openai_responses.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/__init__.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_github.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_heroku.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_provider_names.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_deps.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_history_processor.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_live.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_messages.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_settings.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_thinking_part.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_tools.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/test_utils.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.4.2 → pydantic_ai-0.4.3}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.3
|
|
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[anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.4.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,evals,google,groq,huggingface,mcp,mistral,openai,vertexai]==0.4.3
|
|
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.4.
|
|
35
|
+
Requires-Dist: pydantic-ai-examples==0.4.3; extra == 'examples'
|
|
36
36
|
Provides-Extra: logfire
|
|
37
37
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
38
38
|
Description-Content-Type: text/markdown
|
|
@@ -46,7 +46,7 @@ requires-python = ">=3.9"
|
|
|
46
46
|
|
|
47
47
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
|
48
48
|
dependencies = [
|
|
49
|
-
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,cli,mcp,evals]=={{ version }}",
|
|
49
|
+
"pydantic-ai-slim[openai,vertexai,google,groq,anthropic,mistral,cohere,bedrock,huggingface,cli,mcp,evals]=={{ version }}",
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
[tool.hatch.metadata.hooks.uv-dynamic-versioning.optional-dependencies]
|
|
@@ -64,6 +64,7 @@ Changelog = "https://github.com/pydantic/pydantic-ai/releases"
|
|
|
64
64
|
pai = "pydantic_ai._cli:cli_exit" # TODO remove this when clai has been out for a while
|
|
65
65
|
|
|
66
66
|
[tool.uv.sources]
|
|
67
|
+
pydantic-ai = { workspace = true }
|
|
67
68
|
pydantic-ai-slim = { workspace = true }
|
|
68
69
|
pydantic-evals = { workspace = true }
|
|
69
70
|
pydantic-graph = { workspace = true }
|
|
@@ -224,6 +225,20 @@ omit = [
|
|
|
224
225
|
"pydantic_ai_slim/pydantic_ai/ext/aci.py", # aci-sdk requires Python 3.10+ so cannot be added as an (optional) dependency
|
|
225
226
|
]
|
|
226
227
|
branch = true
|
|
228
|
+
# Disable include-ignored warnings as --source is enabled automatically causing a self conflict as per:
|
|
229
|
+
# https://github.com/pytest-dev/pytest-cov/issues/532
|
|
230
|
+
# https://github.com/pytest-dev/pytest-cov/issues/369
|
|
231
|
+
# This prevents coverage being generated by pytest-cov which has direct editor support in VS Code,
|
|
232
|
+
# making it super useful to check coverage while writing tests.
|
|
233
|
+
disable_warnings = ["include-ignored"]
|
|
234
|
+
|
|
235
|
+
[tool.coverage.paths]
|
|
236
|
+
# Allow CI run assets to be downloaded an replicated locally.
|
|
237
|
+
source = [
|
|
238
|
+
".",
|
|
239
|
+
"/home/runner/work/pydantic-ai/pydantic-ai",
|
|
240
|
+
"/System/Volumes/Data/home/runner/work/pydantic-ai/pydantic-ai"
|
|
241
|
+
]
|
|
227
242
|
|
|
228
243
|
# https://coverage.readthedocs.io/en/latest/config.html#report
|
|
229
244
|
[tool.coverage.report]
|
|
@@ -316,6 +316,11 @@ def openrouter_api_key() -> str:
|
|
|
316
316
|
return os.getenv('OPENROUTER_API_KEY', 'mock-api-key')
|
|
317
317
|
|
|
318
318
|
|
|
319
|
+
@pytest.fixture(scope='session')
|
|
320
|
+
def huggingface_api_key() -> str:
|
|
321
|
+
return os.getenv('HF_TOKEN', 'hf_token')
|
|
322
|
+
|
|
323
|
+
|
|
319
324
|
@pytest.fixture(scope='session')
|
|
320
325
|
def heroku_inference_key() -> str:
|
|
321
326
|
return os.getenv('HEROKU_INFERENCE_KEY', 'mock-api-key')
|
|
@@ -398,6 +403,7 @@ def model(
|
|
|
398
403
|
groq_api_key: str,
|
|
399
404
|
co_api_key: str,
|
|
400
405
|
gemini_api_key: str,
|
|
406
|
+
huggingface_api_key: str,
|
|
401
407
|
bedrock_provider: BedrockProvider,
|
|
402
408
|
) -> Model: # pragma: lax no cover
|
|
403
409
|
try:
|
|
@@ -440,6 +446,14 @@ def model(
|
|
|
440
446
|
from pydantic_ai.models.bedrock import BedrockConverseModel
|
|
441
447
|
|
|
442
448
|
return BedrockConverseModel('us.amazon.nova-micro-v1:0', provider=bedrock_provider)
|
|
449
|
+
elif request.param == 'huggingface':
|
|
450
|
+
from pydantic_ai.models.huggingface import HuggingFaceModel
|
|
451
|
+
from pydantic_ai.providers.huggingface import HuggingFaceProvider
|
|
452
|
+
|
|
453
|
+
return HuggingFaceModel(
|
|
454
|
+
'Qwen/Qwen2.5-72B-Instruct',
|
|
455
|
+
provider=HuggingFaceProvider(provider_name='nebius', api_key=huggingface_api_key),
|
|
456
|
+
)
|
|
443
457
|
else:
|
|
444
458
|
raise ValueError(f'Unknown model: {request.param}')
|
|
445
459
|
except ImportError:
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
body: null
|
|
4
|
+
headers:
|
|
5
|
+
accept:
|
|
6
|
+
- '*/*'
|
|
7
|
+
accept-encoding:
|
|
8
|
+
- gzip, deflate
|
|
9
|
+
connection:
|
|
10
|
+
- keep-alive
|
|
11
|
+
method: GET
|
|
12
|
+
uri: https://huggingface.co/api/models/Qwen/Qwen2.5-72B-Instruct?expand=inferenceProviderMapping
|
|
13
|
+
response:
|
|
14
|
+
headers:
|
|
15
|
+
access-control-allow-origin:
|
|
16
|
+
- https://huggingface.co
|
|
17
|
+
access-control-expose-headers:
|
|
18
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
19
|
+
connection:
|
|
20
|
+
- keep-alive
|
|
21
|
+
content-length:
|
|
22
|
+
- '701'
|
|
23
|
+
content-type:
|
|
24
|
+
- application/json; charset=utf-8
|
|
25
|
+
cross-origin-opener-policy:
|
|
26
|
+
- same-origin
|
|
27
|
+
etag:
|
|
28
|
+
- W/"2bd-diYmxjldwbIbFgWNRPBqJ3SEIak"
|
|
29
|
+
referrer-policy:
|
|
30
|
+
- strict-origin-when-cross-origin
|
|
31
|
+
vary:
|
|
32
|
+
- Origin
|
|
33
|
+
parsed_body:
|
|
34
|
+
_id: 66e81cefd1b1391042d0e47e
|
|
35
|
+
id: Qwen/Qwen2.5-72B-Instruct
|
|
36
|
+
inferenceProviderMapping:
|
|
37
|
+
featherless-ai:
|
|
38
|
+
providerId: Qwen/Qwen2.5-72B-Instruct
|
|
39
|
+
status: live
|
|
40
|
+
task: conversational
|
|
41
|
+
fireworks-ai:
|
|
42
|
+
providerId: accounts/fireworks/models/qwen2p5-72b-instruct
|
|
43
|
+
status: live
|
|
44
|
+
task: conversational
|
|
45
|
+
hyperbolic:
|
|
46
|
+
providerId: Qwen/Qwen2.5-72B-Instruct
|
|
47
|
+
status: live
|
|
48
|
+
task: conversational
|
|
49
|
+
nebius:
|
|
50
|
+
providerId: Qwen/Qwen2.5-72B-Instruct-fast
|
|
51
|
+
status: live
|
|
52
|
+
task: conversational
|
|
53
|
+
novita:
|
|
54
|
+
providerId: qwen/qwen-2.5-72b-instruct
|
|
55
|
+
status: live
|
|
56
|
+
task: conversational
|
|
57
|
+
together:
|
|
58
|
+
providerId: Qwen/Qwen2.5-72B-Instruct-Turbo
|
|
59
|
+
status: live
|
|
60
|
+
task: conversational
|
|
61
|
+
status:
|
|
62
|
+
code: 200
|
|
63
|
+
message: OK
|
|
64
|
+
- request:
|
|
65
|
+
body: null
|
|
66
|
+
headers: {}
|
|
67
|
+
method: POST
|
|
68
|
+
uri: https://router.huggingface.co/nebius/v1/chat/completions
|
|
69
|
+
response:
|
|
70
|
+
headers:
|
|
71
|
+
access-control-allow-credentials:
|
|
72
|
+
- 'true'
|
|
73
|
+
access-control-allow-origin:
|
|
74
|
+
- '*'
|
|
75
|
+
access-control-expose-headers:
|
|
76
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
77
|
+
connection:
|
|
78
|
+
- keep-alive
|
|
79
|
+
content-length:
|
|
80
|
+
- '560'
|
|
81
|
+
content-type:
|
|
82
|
+
- application/json
|
|
83
|
+
cross-origin-opener-policy:
|
|
84
|
+
- same-origin
|
|
85
|
+
referrer-policy:
|
|
86
|
+
- strict-origin-when-cross-origin
|
|
87
|
+
strict-transport-security:
|
|
88
|
+
- max-age=31536000; includeSubDomains
|
|
89
|
+
vary:
|
|
90
|
+
- Origin
|
|
91
|
+
parsed_body:
|
|
92
|
+
choices:
|
|
93
|
+
- finish_reason: stop
|
|
94
|
+
index: 0
|
|
95
|
+
logprobs: null
|
|
96
|
+
message:
|
|
97
|
+
audio: null
|
|
98
|
+
content: Paris
|
|
99
|
+
function_call: null
|
|
100
|
+
reasoning_content: null
|
|
101
|
+
refusal: null
|
|
102
|
+
role: assistant
|
|
103
|
+
tool_calls: []
|
|
104
|
+
stop_reason: null
|
|
105
|
+
created: 1751470757
|
|
106
|
+
id: chatcmpl-b3936940372c481b8d886e596dc75524
|
|
107
|
+
model: Qwen/Qwen2.5-72B-Instruct-fast
|
|
108
|
+
object: chat.completion
|
|
109
|
+
prompt_logprobs: null
|
|
110
|
+
service_tier: null
|
|
111
|
+
system_fingerprint: null
|
|
112
|
+
usage:
|
|
113
|
+
completion_tokens: 2
|
|
114
|
+
completion_tokens_details: null
|
|
115
|
+
prompt_tokens: 26
|
|
116
|
+
prompt_tokens_details: null
|
|
117
|
+
total_tokens: 28
|
|
118
|
+
status:
|
|
119
|
+
code: 200
|
|
120
|
+
message: OK
|
|
121
|
+
version: 1
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
body: null
|
|
4
|
+
headers:
|
|
5
|
+
accept:
|
|
6
|
+
- '*/*'
|
|
7
|
+
accept-encoding:
|
|
8
|
+
- gzip, deflate
|
|
9
|
+
connection:
|
|
10
|
+
- keep-alive
|
|
11
|
+
method: GET
|
|
12
|
+
uri: https://huggingface.co/api/models/Qwen/Qwen3-235B-A22B?expand=inferenceProviderMapping
|
|
13
|
+
response:
|
|
14
|
+
headers:
|
|
15
|
+
access-control-allow-origin:
|
|
16
|
+
- https://huggingface.co
|
|
17
|
+
access-control-expose-headers:
|
|
18
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
19
|
+
connection:
|
|
20
|
+
- keep-alive
|
|
21
|
+
content-length:
|
|
22
|
+
- '470'
|
|
23
|
+
content-type:
|
|
24
|
+
- application/json; charset=utf-8
|
|
25
|
+
cross-origin-opener-policy:
|
|
26
|
+
- same-origin
|
|
27
|
+
etag:
|
|
28
|
+
- W/"1d6-5wPQfbCXoh8XtBVekhfceCwHN4Y"
|
|
29
|
+
referrer-policy:
|
|
30
|
+
- strict-origin-when-cross-origin
|
|
31
|
+
vary:
|
|
32
|
+
- Origin
|
|
33
|
+
parsed_body:
|
|
34
|
+
_id: 680daa4ac41c05ba341b67d1
|
|
35
|
+
id: Qwen/Qwen3-235B-A22B
|
|
36
|
+
inferenceProviderMapping:
|
|
37
|
+
fireworks-ai:
|
|
38
|
+
providerId: accounts/fireworks/models/qwen3-235b-a22b
|
|
39
|
+
status: live
|
|
40
|
+
task: conversational
|
|
41
|
+
nebius:
|
|
42
|
+
providerId: Qwen/Qwen3-235B-A22B
|
|
43
|
+
status: live
|
|
44
|
+
task: conversational
|
|
45
|
+
novita:
|
|
46
|
+
providerId: qwen/qwen3-235b-a22b-fp8
|
|
47
|
+
status: live
|
|
48
|
+
task: conversational
|
|
49
|
+
nscale:
|
|
50
|
+
providerId: Qwen/Qwen3-235B-A22B
|
|
51
|
+
status: live
|
|
52
|
+
task: conversational
|
|
53
|
+
status:
|
|
54
|
+
code: 200
|
|
55
|
+
message: OK
|
|
56
|
+
- request:
|
|
57
|
+
body: null
|
|
58
|
+
headers: {}
|
|
59
|
+
method: POST
|
|
60
|
+
uri: https://router.huggingface.co/nebius/v1/chat/completions
|
|
61
|
+
response:
|
|
62
|
+
headers:
|
|
63
|
+
access-control-allow-credentials:
|
|
64
|
+
- 'true'
|
|
65
|
+
access-control-allow-origin:
|
|
66
|
+
- '*'
|
|
67
|
+
access-control-expose-headers:
|
|
68
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
69
|
+
connection:
|
|
70
|
+
- keep-alive
|
|
71
|
+
content-length:
|
|
72
|
+
- '5526'
|
|
73
|
+
content-type:
|
|
74
|
+
- application/json
|
|
75
|
+
cross-origin-opener-policy:
|
|
76
|
+
- same-origin
|
|
77
|
+
referrer-policy:
|
|
78
|
+
- strict-origin-when-cross-origin
|
|
79
|
+
strict-transport-security:
|
|
80
|
+
- max-age=31536000; includeSubDomains
|
|
81
|
+
vary:
|
|
82
|
+
- Origin
|
|
83
|
+
parsed_body:
|
|
84
|
+
choices:
|
|
85
|
+
- finish_reason: stop
|
|
86
|
+
index: 0
|
|
87
|
+
logprobs: null
|
|
88
|
+
message:
|
|
89
|
+
audio: null
|
|
90
|
+
content: "<think>\nOkay, the user is asking how to cross the street safely. Let me break this down step by step.
|
|
91
|
+
First, they need to look both ways to check for cars. But wait, should they check left, right, then left again?
|
|
92
|
+
I remember that's a common safety tip. They might be in a country where people drive on the right side or the
|
|
93
|
+
left, so maybe should I mention that?\n\nAlso, traffic signals and signs are important. What about pedestrian
|
|
94
|
+
crossings or traffic lights? Explaining when to walk when the signal is green and the cars have stopped. Oh, right,
|
|
95
|
+
sometimes people might not realize to wait for the walk signal. And even when using a crosswalk, you still need
|
|
96
|
+
to look both ways because cars might not stop.\n\nDistractions like phones or headphones. Yeah, people often get
|
|
97
|
+
hurt because they're looking at their phone while crossing. Should advise them to put away distractions and stay
|
|
98
|
+
alert. Kids and elderly folks might need extra care, like holding an adult's hand.\n\nWhat about if there's no
|
|
99
|
+
traffic light or crosswalk? Then finding the safest spot with good visibility, maybe near a corner where cars
|
|
100
|
+
can see them better. And teaching kids the basics of street safety.\n\nAlso, the confidence aspect—don't rush,
|
|
101
|
+
take your time, make eye contact with drivers. And what to do if stuck in the middle? Wait for the next signal.
|
|
102
|
+
Oh, and bicycles! In some places, bike lanes cross sidewalks, so being watchful for cyclists too.\n\nWait, should
|
|
103
|
+
I structure these points in a numbered list? Start with stopping at the curb, then looking both ways, checking
|
|
104
|
+
traffic signals, obeying signs, avoiding distractions, using crosswalks if possible, teaching kids, staying visible,
|
|
105
|
+
making eye contact, and what to do if stuck. Maybe add something about not assuming drivers see them and being
|
|
106
|
+
cautious.\n\nLet me make sure not to miss any key points. Also, mention that it's safer to cross at intersections.
|
|
107
|
+
And maybe a final note about local laws or practices varying by country. Yeah, that covers the main points. I
|
|
108
|
+
should present it clearly so it's easy to follow step by step without getting overwhelmed.\n</think>\n\nCrossing
|
|
109
|
+
the street safely requires attention, patience, and following key steps. Here's a clear guide:\n\n1. **Stop at
|
|
110
|
+
the Curb**: Find a safe spot to pause before stepping onto the road.\n\n2. **Look Both Ways (Left, Right, Then
|
|
111
|
+
Left Again!)** \n - **First check left**: Look for oncoming traffic from your left (if driving is on the right
|
|
112
|
+
side in your country). \n - **Then check right**: Check for vehicles coming from the right. \n - **Final
|
|
113
|
+
glance left**: Recheck the direction of traffic closest to you before stepping off the curb. \n *(Reverse this
|
|
114
|
+
order if driving is on the left, as in the UK or Japan.)*\n\n3. **Use Traffic Signals and Crosswalks**: \n -
|
|
115
|
+
Wait for the pedestrian \"walk\" signal (green hand or similar). \n - If there’s no signal, only cross once
|
|
116
|
+
all vehicles have come to a complete stop and you’ve made eye contact with drivers. \n - Follow any painted
|
|
117
|
+
crosswalk lines and stay within them.\n\n4. **Obey Traffic Signs/Lights**: \n - Red/yellow lights mean stop.
|
|
118
|
+
Green means it’s safe to start crossing, but still watch for turning vehicles. \n - If the \"don’t walk\" signal
|
|
119
|
+
flashes while you’re mid-crossing, finish crossing without rushing.\n\n5. **Avoid Distractions**: \n - Put
|
|
120
|
+
away phones, earbuds, or anything that blocks your senses. \n - Keep your head up and stay alert to your surroundings.\n\n6.
|
|
121
|
+
**Be Visible and Predictable**: \n - Wear bright/light-colored clothing, especially at night. \n - Walk
|
|
122
|
+
(don’t run) and follow the flow of traffic. Avoid sudden changes in direction.\n\n7. **Teach Children Safely**:
|
|
123
|
+
\ \n - Hold young children’s hands. \n - Practice the \"stop, look, listen\" rule together. \n - Teach
|
|
124
|
+
them to make eye contact with drivers before crossing.\n\n8. **Cross at Intersections When Possible**: \n -
|
|
125
|
+
Drivers expect pedestrians at crosswalks and intersections. \n - If no crosswalk exists, choose a spot with
|
|
126
|
+
clear visibility (e.g., where you can see around parked cars).\n\n9. **Don’t Assume Drivers See You**: \n -
|
|
127
|
+
Even if a car stops, check for other vehicles that might not yield. \n - At night, use a flashlight or phone
|
|
128
|
+
light to stay visible.\n\n10. **What to Do if Stuck Mid-Street**: \n - If the light changes before you reach
|
|
129
|
+
the other side, stay calm. \n - Stop at the median or safety island and wait for the next signal. \n\n**Bonus
|
|
130
|
+
Tip**: In areas with bike lanes, check for cyclists even once you’ve started crossing. In some places, bikes ride
|
|
131
|
+
against traffic flow, so look both ways even on one-way streets.\n\n**Local Laws Matter**: Check rules in your
|
|
132
|
+
area—e.g., some places require yielding to pedestrians, while others prioritize drivers. Always prioritize your
|
|
133
|
+
safety over assumptions.\n\nFollow these steps, and you’ll cross the street confidently and safely every time!
|
|
134
|
+
\U0001F6B6♀️ ✅"
|
|
135
|
+
function_call: null
|
|
136
|
+
reasoning_content: null
|
|
137
|
+
refusal: null
|
|
138
|
+
role: assistant
|
|
139
|
+
tool_calls: []
|
|
140
|
+
stop_reason: null
|
|
141
|
+
created: 1752067065
|
|
142
|
+
id: chatcmpl-957db61fe60d4440bcfe1f11f2c5b4b9
|
|
143
|
+
model: Qwen/Qwen3-235B-A22B
|
|
144
|
+
object: chat.completion
|
|
145
|
+
prompt_logprobs: null
|
|
146
|
+
service_tier: null
|
|
147
|
+
system_fingerprint: null
|
|
148
|
+
usage:
|
|
149
|
+
completion_tokens: 1090
|
|
150
|
+
completion_tokens_details: null
|
|
151
|
+
prompt_tokens: 15
|
|
152
|
+
prompt_tokens_details: null
|
|
153
|
+
total_tokens: 1105
|
|
154
|
+
status:
|
|
155
|
+
code: 200
|
|
156
|
+
message: OK
|
|
157
|
+
- request:
|
|
158
|
+
body: null
|
|
159
|
+
headers: {}
|
|
160
|
+
method: POST
|
|
161
|
+
uri: https://router.huggingface.co/nebius/v1/chat/completions
|
|
162
|
+
response:
|
|
163
|
+
headers:
|
|
164
|
+
access-control-allow-credentials:
|
|
165
|
+
- 'true'
|
|
166
|
+
access-control-allow-origin:
|
|
167
|
+
- '*'
|
|
168
|
+
access-control-expose-headers:
|
|
169
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
170
|
+
connection:
|
|
171
|
+
- keep-alive
|
|
172
|
+
content-length:
|
|
173
|
+
- '9391'
|
|
174
|
+
content-type:
|
|
175
|
+
- application/json
|
|
176
|
+
cross-origin-opener-policy:
|
|
177
|
+
- same-origin
|
|
178
|
+
referrer-policy:
|
|
179
|
+
- strict-origin-when-cross-origin
|
|
180
|
+
strict-transport-security:
|
|
181
|
+
- max-age=31536000; includeSubDomains
|
|
182
|
+
vary:
|
|
183
|
+
- Origin
|
|
184
|
+
parsed_body:
|
|
185
|
+
choices:
|
|
186
|
+
- finish_reason: stop
|
|
187
|
+
index: 0
|
|
188
|
+
logprobs: null
|
|
189
|
+
message:
|
|
190
|
+
audio: null
|
|
191
|
+
content: "<think>\nOkay, the user previously asked how to cross the street, and I gave a detailed answer. Now they're
|
|
192
|
+
asking about crossing a river analogously. Let me start by understanding the connection. They want a similar structured
|
|
193
|
+
approach but for crossing a river.\n\nFirst, I need to figure out the equivalents between crossing a street and
|
|
194
|
+
a river. The original steps included looking both ways, using signals, avoiding distractions, etc. For a river,
|
|
195
|
+
physical steps might involve checking the current, choosing a safe spot, maybe using a bridge or boat.\n\nI should
|
|
196
|
+
map each street-crossing step to a river scenario. For example, \"stop at the curb\" becomes \"assess the riverbank.\"
|
|
197
|
+
Instead of traffic signals, check for ferry schedules or bridge access. Use safety equipment like life jackets
|
|
198
|
+
instead of wearing bright clothes.\n\nWait, the user mentioned \"analogously,\" so the structure should mirror
|
|
199
|
+
the previous answer but with river-specific actions. Maybe start by pausing to observe the river, checking water
|
|
200
|
+
flow instead of traffic. Use bridges as crosswalks and traffic signals. Boating has its own signals, like flags
|
|
201
|
+
or lights.\n\nAlso, think about hazards unique to rivers: strong currents, slippery rocks, wildlife. Safety considerations
|
|
202
|
+
here would involve knowing how to swim, having a floatation device, not relying on unreliable methods like jumping
|
|
203
|
+
on rocks.\n\nNeed to include steps like evaluating the crossing point, checking for bridges or fords, using boats
|
|
204
|
+
if necessary, avoiding hazards. Maybe mention time-sensitive factors like weather or flooding, similar to obeying
|
|
205
|
+
traffic lights.\n\nI should ensure each point from the previous answer has a parallel. For example, distractions
|
|
206
|
+
like phones would be like not paying attention to the river's flow. Visibility could mean wearing bright colors
|
|
207
|
+
to be seen on the water.\n\nAlso, consider group scenarios or children, making sure everyone knows the plan. Teaching
|
|
208
|
+
kids to cross safely here might involve knowing how to use floatation devices.\n\nI need to make sure the answer
|
|
209
|
+
is comprehensive but clear, following the same logical structure as the street crossing answer. Maybe list steps
|
|
210
|
+
in order, similar to the original list. Check for completeness: assessment, choosing the method, using proper
|
|
211
|
+
equipment, following safety protocols, dealing with emergencies mid-crossing, etc.\n\nWait, the original answer
|
|
212
|
+
had 10 points plus a bonus tip. Should mirror that structure? Maybe create a list with parallels. Also, ensure
|
|
213
|
+
that analogies are accurate—traffic becomes currents, crosswalks become bridges or fords, traffic signals become
|
|
214
|
+
navigational markers or ferry schedules.\n\nAvoiding distractions would involve focusing on the water's movement
|
|
215
|
+
and surroundings, not looking at devices. Visibility in water might involve reflective gear or signaling.\n\nAlso,
|
|
216
|
+
legal aspects: crossing at authorized spots only, checking if permits are needed. Local hazards or regulations
|
|
217
|
+
could be like local traffic laws.\n\nPotential mistakes: Maybe comparing the river's current to traffic is too
|
|
218
|
+
direct. Or missing steps like testing the stability of a path across the river, which isn't present in street
|
|
219
|
+
crossing. Need to add those unique elements naturally.\n\nAlso, emergencies: If mid-river and something goes wrong,
|
|
220
|
+
similar to being stuck on the street. Having a plan, like heading to a safer area or using safety equipment.\n\nAlright,
|
|
221
|
+
structure each point as an analogy, then expand with river-specific advice. Make sure the order parallels the
|
|
222
|
+
original. Use similar section titles but adapted. Maybe end with a note on local conditions and safety first.\n</think>\n\nCrossing
|
|
223
|
+
a river safely shares many principles with crossing a street but involves adapting to the unpredictable nature
|
|
224
|
+
of water. Below is an analogy-based guide, mirroring the street-crossing steps while addressing river-specific
|
|
225
|
+
challenges:\n\n---\n\n### **1. Stop at the Riverbank: Assess the Situation**\n - **Pause and Observe** \n Like
|
|
226
|
+
stopping at the curb, stand back from the edge to evaluate the river’s width, speed, and hazards (swift currents,
|
|
227
|
+
rocks, debris, depth). \n - **Check for Bridges/Piers/Crossings** \n Just as intersections prioritize
|
|
228
|
+
pedestrian safety, bridges or marked fords exist for safer passage. Use them if accessible. \n\n---\n\n### **2.
|
|
229
|
+
Read the River: Look Both Upstream and Downstream** \n - **Scan Both Directions** \n Just as you look
|
|
230
|
+
left/right for cars, search **upstream (left if driving is right-hand)** for hazards like floating debris or sudden
|
|
231
|
+
surges. Check **downstream (right)** for exit points in case you’re swept away. \n - **Check the Flow** \n
|
|
232
|
+
\ Assess current strength: Is it a gentle trickle or a raging torrent? Avoid crossing if water is above knee-deep
|
|
233
|
+
or too fast. \n\n---\n\n### **3. Use Safe Routes: Bridges, Ferries, or Designated Fords** \n - **Follow Traffic
|
|
234
|
+
Signals → Follow Nautical Rules** \n Wait for ferry schedules, flashing lights (if present), or buoys marking
|
|
235
|
+
safe paths. Cross only when signals (like a ferry’s horn) indicate it’s safe. \n - **Choose a Footbridge or
|
|
236
|
+
Ferry** \n Bridges eliminate water risks entirely, much like crosswalks. Ferries or boats (with licensed
|
|
237
|
+
operators) are safest for wider rivers. \n\n---\n\n### **4. Prioritize Your Path: Know Where to Step or Swim**
|
|
238
|
+
\ \n - **Identify Stable Rocks or Shallows** \n If wading, pick a route with flat, secure footing (like
|
|
239
|
+
stepping stones) or the shallowest stretch, avoiding slippery algae-covered surfaces. \n - **Test the Current**
|
|
240
|
+
\ \n Before fully entering, use a stick or rock to gauge the force of the water. Swift currents can sweep
|
|
241
|
+
you off your feet faster than a car can strike. \n\n---\n\n### **5. Avoid Distractions: Focus on the Movement**
|
|
242
|
+
\ \n - **Put Away Devices** \n A phone distraction here risks losing balance in the river versus stepping
|
|
243
|
+
blindly into traffic. Keep both hands free for stability. \n - **Listen to the River** \n Gurgling or
|
|
244
|
+
roaring water warns of hidden holes or rapids—similar to hearing a car engine approaching. \n\n---\n\n### **6.
|
|
245
|
+
Be Predictable and Visible: Wear Bright Gear or Floats** \n - **Wear a Life Jacket** \n Like high-visibility
|
|
246
|
+
clothing, a life jacket keeps you buoyant and makes you easier for rescuers or boat operators to spot. \n -
|
|
247
|
+
**Stick to a Straight Route** \n Zigzagging in water wastes energy and increases the risk of losing balance,
|
|
248
|
+
just as darting across lanes on a street invites accidents. \n\n---\n\n### **7. Communicate: Make Eye Contact
|
|
249
|
+
with Boaters or Guides** \n - **Signal to Operators** \n In small boats or rafts, wave to catch the attention
|
|
250
|
+
of passing vessels (like making eye contact with drivers) to ensure they see you. \n - **Use Hand Signals or
|
|
251
|
+
Whistles** \n Agree on emergency signals with your group beforehand (e.g., pointing downstream to signal
|
|
252
|
+
danger). \n\n---\n\n### **8. Cross at the Safest Spot: Avoid Mid-River Surprises** \n - **Choose Wide, Slow
|
|
253
|
+
Sections** \n Like crossing at intersections, wide shallow areas have gentler currents. Avoid narrows where
|
|
254
|
+
water funnels into rapids. \n - **Watch for Hidden Dangers** \n Submerged logs, sudden drop-offs, or hypothermic
|
|
255
|
+
cold water can be as lethal as a speeding car. \n\n---\n\n### **9. Don’t Assume Safety: Verify Every Step or
|
|
256
|
+
Stroke** \n - **Test Each Footstep** \n Tap the riverbed before transferring weight to avoid stepping
|
|
257
|
+
into a hole or loose gravel (like checking for icy patches on a sidewalk). \n - **Swim Only If Trained** \n
|
|
258
|
+
\ If the river is too deep to wade, only swim if you know how. Use floatation devices if unsure—similar to
|
|
259
|
+
holding an adult’s hand as a child crossing a street. \n\n---\n\n### **10. Mid-River Emergencies: What to Do
|
|
260
|
+
if Stuck** \n - **If Struck by Current** \n Stay calm, float on your back with feet downstream (to avoid
|
|
261
|
+
head-first collisions), and steer toward eddies or the shore. \n - **If Trapped on a Rock** \n Hug a large
|
|
262
|
+
rock and wait for help, like pausing at a median. Don’t risk swimming diagonally across the river’s flow. \n\n---\n\n###
|
|
263
|
+
**Bonus Tip: Adapt to Local Conditions** \n - **Research Hazards** \n Some rivers have undertows, wildlife,
|
|
264
|
+
or pollution. Check local warnings (like road signs for blind corners or school zones). \n - **Weather Watch**
|
|
265
|
+
\ \n Sudden rainstorms can cause flash floods—delay crossing if clouds mass on the horizon. \n\n---\n\nBy
|
|
266
|
+
applying street-crossing principles to river navigation—patience, situational awareness, and prioritizing safe
|
|
267
|
+
infrastructure—you can minimize risks. Always assume the river is more dangerous than it appears, just as you’d
|
|
268
|
+
treat an unfamiliar road. **Safety first, crossing second!** \U0001F30A \U0001F6A4 ⚠️"
|
|
269
|
+
function_call: null
|
|
270
|
+
reasoning_content: null
|
|
271
|
+
refusal: null
|
|
272
|
+
role: assistant
|
|
273
|
+
tool_calls: []
|
|
274
|
+
stop_reason: null
|
|
275
|
+
created: 1752067094
|
|
276
|
+
id: chatcmpl-35fdec1307634f94a39f7e26f52e12a7
|
|
277
|
+
model: Qwen/Qwen3-235B-A22B
|
|
278
|
+
object: chat.completion
|
|
279
|
+
prompt_logprobs: null
|
|
280
|
+
service_tier: null
|
|
281
|
+
system_fingerprint: null
|
|
282
|
+
usage:
|
|
283
|
+
completion_tokens: 1860
|
|
284
|
+
completion_tokens_details: null
|
|
285
|
+
prompt_tokens: 691
|
|
286
|
+
prompt_tokens_details: null
|
|
287
|
+
total_tokens: 2551
|
|
288
|
+
status:
|
|
289
|
+
code: 200
|
|
290
|
+
message: OK
|
|
291
|
+
version: 1
|
pydantic_ai-0.4.3/tests/models/cassettes/test_huggingface/test_image_as_binary_content_input.yaml
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
body: null
|
|
4
|
+
headers:
|
|
5
|
+
accept:
|
|
6
|
+
- '*/*'
|
|
7
|
+
accept-encoding:
|
|
8
|
+
- gzip, deflate
|
|
9
|
+
connection:
|
|
10
|
+
- keep-alive
|
|
11
|
+
method: GET
|
|
12
|
+
uri: https://huggingface.co/api/models/Qwen/Qwen2.5-VL-72B-Instruct?expand=inferenceProviderMapping
|
|
13
|
+
response:
|
|
14
|
+
headers:
|
|
15
|
+
access-control-allow-origin:
|
|
16
|
+
- https://huggingface.co
|
|
17
|
+
access-control-expose-headers:
|
|
18
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
19
|
+
connection:
|
|
20
|
+
- keep-alive
|
|
21
|
+
content-length:
|
|
22
|
+
- '293'
|
|
23
|
+
content-type:
|
|
24
|
+
- application/json; charset=utf-8
|
|
25
|
+
cross-origin-opener-policy:
|
|
26
|
+
- same-origin
|
|
27
|
+
etag:
|
|
28
|
+
- W/"125-DEMuQsKZBCb9/68jW5UsI3Q7x7E"
|
|
29
|
+
referrer-policy:
|
|
30
|
+
- strict-origin-when-cross-origin
|
|
31
|
+
vary:
|
|
32
|
+
- Origin
|
|
33
|
+
parsed_body:
|
|
34
|
+
_id: 6797079422990ae89b5aff86
|
|
35
|
+
id: Qwen/Qwen2.5-VL-72B-Instruct
|
|
36
|
+
inferenceProviderMapping:
|
|
37
|
+
hyperbolic:
|
|
38
|
+
providerId: Qwen/Qwen2.5-VL-72B-Instruct
|
|
39
|
+
status: live
|
|
40
|
+
task: conversational
|
|
41
|
+
nebius:
|
|
42
|
+
providerId: Qwen/Qwen2.5-VL-72B-Instruct
|
|
43
|
+
status: live
|
|
44
|
+
task: conversational
|
|
45
|
+
status:
|
|
46
|
+
code: 200
|
|
47
|
+
message: OK
|
|
48
|
+
- request:
|
|
49
|
+
body: null
|
|
50
|
+
headers: {}
|
|
51
|
+
method: POST
|
|
52
|
+
uri: https://router.huggingface.co/nebius/v1/chat/completions
|
|
53
|
+
response:
|
|
54
|
+
headers:
|
|
55
|
+
access-control-allow-credentials:
|
|
56
|
+
- 'true'
|
|
57
|
+
access-control-allow-origin:
|
|
58
|
+
- '*'
|
|
59
|
+
access-control-expose-headers:
|
|
60
|
+
- X-Repo-Commit,X-Request-Id,X-Error-Code,X-Error-Message,X-Total-Count,ETag,Link,Accept-Ranges,Content-Range,X-Linked-Size,X-Linked-ETag,X-Xet-Hash
|
|
61
|
+
connection:
|
|
62
|
+
- keep-alive
|
|
63
|
+
content-length:
|
|
64
|
+
- '776'
|
|
65
|
+
content-type:
|
|
66
|
+
- application/json
|
|
67
|
+
cross-origin-opener-policy:
|
|
68
|
+
- same-origin
|
|
69
|
+
referrer-policy:
|
|
70
|
+
- strict-origin-when-cross-origin
|
|
71
|
+
strict-transport-security:
|
|
72
|
+
- max-age=31536000; includeSubDomains
|
|
73
|
+
vary:
|
|
74
|
+
- Origin
|
|
75
|
+
parsed_body:
|
|
76
|
+
choices:
|
|
77
|
+
- finish_reason: stop
|
|
78
|
+
index: 0
|
|
79
|
+
logprobs: null
|
|
80
|
+
message:
|
|
81
|
+
audio: null
|
|
82
|
+
content: The fruit in the image is a kiwi. It has been sliced in half, revealing its bright green flesh with small
|
|
83
|
+
black seeds arranged in a circular pattern around a white center. The outer skin of the kiwi is fuzzy and brown.
|
|
84
|
+
function_call: null
|
|
85
|
+
reasoning_content: null
|
|
86
|
+
refusal: null
|
|
87
|
+
role: assistant
|
|
88
|
+
tool_calls: []
|
|
89
|
+
stop_reason: null
|
|
90
|
+
created: 1751986733
|
|
91
|
+
id: chatcmpl-bd957b950cce4d61839e2af25f56f684
|
|
92
|
+
model: Qwen/Qwen2.5-VL-72B-Instruct
|
|
93
|
+
object: chat.completion
|
|
94
|
+
prompt_logprobs: null
|
|
95
|
+
service_tier: null
|
|
96
|
+
system_fingerprint: null
|
|
97
|
+
usage:
|
|
98
|
+
completion_tokens: 49
|
|
99
|
+
completion_tokens_details: null
|
|
100
|
+
prompt_tokens: 7625
|
|
101
|
+
prompt_tokens_details: null
|
|
102
|
+
total_tokens: 7674
|
|
103
|
+
status:
|
|
104
|
+
code: 200
|
|
105
|
+
message: OK
|
|
106
|
+
version: 1
|