pydantic-ai 0.2.15__tar.gz → 0.2.17__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.2.15 → pydantic_ai-0.2.17}/PKG-INFO +3 -3
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +7 -7
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +10 -10
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +11 -11
- pydantic_ai-0.2.17/tests/cassettes/test_settings/test_stop_settings[google].yaml +65 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +16 -16
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +6 -14
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +11 -12
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/conftest.py +18 -2
- pydantic_ai-0.2.17/tests/ext/test_langchain.py +244 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +51 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +63 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +69 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +111 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +113 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +117 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +119 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +112 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +113 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +119 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +115 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +114 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +161 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +112 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +112 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +122 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +118 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +113 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +114 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +117 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +113 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +115 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +157 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_model_names/test_known_model_names.yaml +66 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +77 -0
- pydantic_ai-0.2.17/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +96 -0
- pydantic_ai-0.2.17/tests/models/test_download_item.py +53 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_gemini.py +44 -0
- pydantic_ai-0.2.17/tests/models/test_gemini_vertex.py +199 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_google.py +142 -7
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_model_names.py +30 -1
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_model_test.py +33 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_openai.py +27 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_openai_responses.py +10 -0
- pydantic_ai-0.2.17/tests/providers/__init__.py +0 -0
- pydantic_ai-0.2.17/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +55 -0
- pydantic_ai-0.2.17/tests/providers/test_heroku.py +73 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_provider_names.py +2 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_cli.py +1 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_live.py +1 -1
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_logfire.py +71 -4
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_messages.py +16 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_settings.py +6 -2
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_tools.py +71 -0
- pydantic_ai-0.2.15/tests/models/test_gemini_vertexai.py +0 -51
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/.gitignore +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/LICENSE +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/Makefile +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/README.md +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/pyproject.toml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/__init__.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/assets/dummy.pdf +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/assets/kiwi.png +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/assets/marcelo.mp3 +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/assets/small_video.mp4 +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/__init__.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_dataset.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_evaluator_base.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_evaluator_common.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_evaluator_context.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_evaluator_spec.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_evaluators.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_llm_as_a_judge.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_otel.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_render_numbers.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_reporting.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_reports.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/test_utils.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/evals/utils.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/example_modules/README.md +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/example_modules/bank_database.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/example_modules/fake_database.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/example_modules/weather_service.py +0 -0
- {pydantic_ai-0.2.15/tests/fasta2a → pydantic_ai-0.2.17/tests/ext}/__init__.py +0 -0
- {pydantic_ai-0.2.15/tests/graph → pydantic_ai-0.2.17/tests/fasta2a}/__init__.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/fasta2a/test_applications.py +0 -0
- {pydantic_ai-0.2.15/tests/models → pydantic_ai-0.2.17/tests/graph}/__init__.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_file_persistence.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_graph.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_mermaid.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_persistence.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_state.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/graph/test_utils.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/import_examples.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/json_body_serializer.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/mcp_server.py +0 -0
- {pydantic_ai-0.2.15/tests/providers → pydantic_ai-0.2.17/tests/models}/__init__.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
- {pydantic_ai-0.2.15/tests/models/cassettes/test_gemini_vertexai → pydantic_ai-0.2.17/tests/models/cassettes/test_gemini_vertex}/test_labels.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_structured_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/mock_async_stream.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_anthropic.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_bedrock.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_cohere.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_fallback.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_groq.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_instrumented.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_mistral.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_model.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_model_function.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/models/test_model_request_parameters.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_anthropic.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_azure.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_bedrock.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_cohere.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_deepseek.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_fireworks.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_google_gla.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_google_vertex.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_grok.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_groq.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_mistral.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_openai.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_openrouter.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/providers/test_together.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_a2a.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_agent.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_deps.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_direct.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_examples.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_format_as_xml.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_json_body_serializer.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_mcp.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_parts_manager.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_streaming.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_usage_limits.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/test_utils.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/typed_agent.py +0 -0
- {pydantic_ai-0.2.15 → pydantic_ai-0.2.17}/tests/typed_graph.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydantic-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17
|
|
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,9 +28,9 @@ 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[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.2.
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.2.17
|
|
32
32
|
Provides-Extra: examples
|
|
33
|
-
Requires-Dist: pydantic-ai-examples==0.2.
|
|
33
|
+
Requires-Dist: pydantic-ai-examples==0.2.17; extra == 'examples'
|
|
34
34
|
Provides-Extra: logfire
|
|
35
35
|
Requires-Dist: logfire>=3.11.0; extra == 'logfire'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
@@ -8,7 +8,7 @@ interactions:
|
|
|
8
8
|
connection:
|
|
9
9
|
- keep-alive
|
|
10
10
|
content-length:
|
|
11
|
-
- '
|
|
11
|
+
- '272'
|
|
12
12
|
content-type:
|
|
13
13
|
- application/json
|
|
14
14
|
host:
|
|
@@ -18,7 +18,7 @@ interactions:
|
|
|
18
18
|
max_tokens: 1024
|
|
19
19
|
messages:
|
|
20
20
|
- content:
|
|
21
|
-
- text: What is the capital of France?
|
|
21
|
+
- text: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
22
22
|
type: text
|
|
23
23
|
role: user
|
|
24
24
|
model: claude-3-5-sonnet-latest
|
|
@@ -31,7 +31,7 @@ interactions:
|
|
|
31
31
|
connection:
|
|
32
32
|
- keep-alive
|
|
33
33
|
content-length:
|
|
34
|
-
- '
|
|
34
|
+
- '356'
|
|
35
35
|
content-type:
|
|
36
36
|
- application/json
|
|
37
37
|
strict-transport-security:
|
|
@@ -40,9 +40,9 @@ interactions:
|
|
|
40
40
|
- chunked
|
|
41
41
|
parsed_body:
|
|
42
42
|
content:
|
|
43
|
-
- text: 'The
|
|
43
|
+
- text: 'The beautiful city of '
|
|
44
44
|
type: text
|
|
45
|
-
id:
|
|
45
|
+
id: msg_01376yZQxHcw9pER2Ab2SvQb
|
|
46
46
|
model: claude-3-5-sonnet-20241022
|
|
47
47
|
role: assistant
|
|
48
48
|
stop_reason: stop_sequence
|
|
@@ -51,8 +51,8 @@ interactions:
|
|
|
51
51
|
usage:
|
|
52
52
|
cache_creation_input_tokens: 0
|
|
53
53
|
cache_read_input_tokens: 0
|
|
54
|
-
input_tokens:
|
|
55
|
-
output_tokens:
|
|
54
|
+
input_tokens: 32
|
|
55
|
+
output_tokens: 5
|
|
56
56
|
service_tier: standard
|
|
57
57
|
status:
|
|
58
58
|
code: 200
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
interactions:
|
|
2
2
|
- request:
|
|
3
|
-
body: '{"messages": [{"role": "user", "content": [{"text": "What is the capital of France?
|
|
4
|
-
{"stopSequences": ["Paris"]}}'
|
|
3
|
+
body: '{"messages": [{"role": "user", "content": [{"text": "What is the capital of France? Give me an answer that contains
|
|
4
|
+
the word \"Paris\", but is not the first word."}]}], "system": [], "inferenceConfig": {"stopSequences": ["Paris"]}}'
|
|
5
5
|
headers:
|
|
6
6
|
amz-sdk-invocation-id:
|
|
7
7
|
- !!binary |
|
|
8
|
-
|
|
8
|
+
YWEyMWExMDYtNjJjMy00MmNiLTlkNjUtYTEwYzYzYTIxNGFk
|
|
9
9
|
amz-sdk-request:
|
|
10
10
|
- !!binary |
|
|
11
11
|
YXR0ZW1wdD0x
|
|
12
12
|
content-length:
|
|
13
|
-
- '
|
|
13
|
+
- '231'
|
|
14
14
|
content-type:
|
|
15
15
|
- !!binary |
|
|
16
16
|
YXBwbGljYXRpb24vanNvbg==
|
|
@@ -21,22 +21,22 @@ interactions:
|
|
|
21
21
|
connection:
|
|
22
22
|
- keep-alive
|
|
23
23
|
content-length:
|
|
24
|
-
- '
|
|
24
|
+
- '197'
|
|
25
25
|
content-type:
|
|
26
26
|
- application/json
|
|
27
27
|
parsed_body:
|
|
28
28
|
metrics:
|
|
29
|
-
latencyMs:
|
|
29
|
+
latencyMs: 189
|
|
30
30
|
output:
|
|
31
31
|
message:
|
|
32
32
|
content:
|
|
33
|
-
- text: The
|
|
33
|
+
- text: The city of Paris
|
|
34
34
|
role: assistant
|
|
35
35
|
stopReason: end_turn
|
|
36
36
|
usage:
|
|
37
|
-
inputTokens:
|
|
38
|
-
outputTokens:
|
|
39
|
-
totalTokens:
|
|
37
|
+
inputTokens: 25
|
|
38
|
+
outputTokens: 4
|
|
39
|
+
totalTokens: 29
|
|
40
40
|
status:
|
|
41
41
|
code: 200
|
|
42
42
|
message: OK
|
|
@@ -8,7 +8,7 @@ interactions:
|
|
|
8
8
|
connection:
|
|
9
9
|
- keep-alive
|
|
10
10
|
content-length:
|
|
11
|
-
- '
|
|
11
|
+
- '219'
|
|
12
12
|
content-type:
|
|
13
13
|
- application/json
|
|
14
14
|
host:
|
|
@@ -16,7 +16,7 @@ interactions:
|
|
|
16
16
|
method: POST
|
|
17
17
|
parsed_body:
|
|
18
18
|
messages:
|
|
19
|
-
- content: What is the capital of France?
|
|
19
|
+
- content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
20
20
|
role: user
|
|
21
21
|
model: command-r-plus
|
|
22
22
|
stop_sequences:
|
|
@@ -32,34 +32,34 @@ interactions:
|
|
|
32
32
|
cache-control:
|
|
33
33
|
- no-cache, no-store, no-transform, must-revalidate, private, max-age=0
|
|
34
34
|
content-length:
|
|
35
|
-
- '
|
|
35
|
+
- '297'
|
|
36
36
|
content-type:
|
|
37
37
|
- application/json
|
|
38
38
|
expires:
|
|
39
39
|
- Thu, 01 Jan 1970 00:00:00 UTC
|
|
40
40
|
num_chars:
|
|
41
|
-
- '
|
|
41
|
+
- '521'
|
|
42
42
|
num_tokens:
|
|
43
|
-
- '
|
|
43
|
+
- '34'
|
|
44
44
|
pragma:
|
|
45
45
|
- no-cache
|
|
46
46
|
vary:
|
|
47
47
|
- Origin
|
|
48
48
|
parsed_body:
|
|
49
49
|
finish_reason: STOP_SEQUENCE
|
|
50
|
-
id:
|
|
50
|
+
id: 02069ccc-65d6-4286-ba8c-097e317431c5
|
|
51
51
|
message:
|
|
52
52
|
content:
|
|
53
|
-
- text: The capital of France is
|
|
53
|
+
- text: The capital of France is a city known as
|
|
54
54
|
type: text
|
|
55
55
|
role: assistant
|
|
56
56
|
usage:
|
|
57
57
|
billed_units:
|
|
58
|
-
input_tokens:
|
|
59
|
-
output_tokens:
|
|
58
|
+
input_tokens: 25
|
|
59
|
+
output_tokens: 9
|
|
60
60
|
tokens:
|
|
61
|
-
input_tokens:
|
|
62
|
-
output_tokens:
|
|
61
|
+
input_tokens: 91
|
|
62
|
+
output_tokens: 11
|
|
63
63
|
status:
|
|
64
64
|
code: 200
|
|
65
65
|
message: OK
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
interactions:
|
|
2
|
+
- request:
|
|
3
|
+
headers:
|
|
4
|
+
accept:
|
|
5
|
+
- '*/*'
|
|
6
|
+
accept-encoding:
|
|
7
|
+
- gzip, deflate
|
|
8
|
+
connection:
|
|
9
|
+
- keep-alive
|
|
10
|
+
content-length:
|
|
11
|
+
- '216'
|
|
12
|
+
content-type:
|
|
13
|
+
- application/json
|
|
14
|
+
host:
|
|
15
|
+
- generativelanguage.googleapis.com
|
|
16
|
+
method: POST
|
|
17
|
+
parsed_body:
|
|
18
|
+
contents:
|
|
19
|
+
- parts:
|
|
20
|
+
- text: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
21
|
+
role: user
|
|
22
|
+
generationConfig:
|
|
23
|
+
stopSequences:
|
|
24
|
+
- Paris
|
|
25
|
+
uri: https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent
|
|
26
|
+
response:
|
|
27
|
+
headers:
|
|
28
|
+
alt-svc:
|
|
29
|
+
- h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
|
|
30
|
+
content-length:
|
|
31
|
+
- '677'
|
|
32
|
+
content-type:
|
|
33
|
+
- application/json; charset=UTF-8
|
|
34
|
+
server-timing:
|
|
35
|
+
- gfet4t7; dur=362
|
|
36
|
+
transfer-encoding:
|
|
37
|
+
- chunked
|
|
38
|
+
vary:
|
|
39
|
+
- Origin
|
|
40
|
+
- X-Origin
|
|
41
|
+
- Referer
|
|
42
|
+
parsed_body:
|
|
43
|
+
candidates:
|
|
44
|
+
- avgLogprobs: -0.5998413562774658
|
|
45
|
+
content:
|
|
46
|
+
parts:
|
|
47
|
+
- text: 'The most iconic city in France is '
|
|
48
|
+
role: model
|
|
49
|
+
finishReason: STOP
|
|
50
|
+
modelVersion: gemini-1.5-flash
|
|
51
|
+
responseId: UB5DaMfEN7jFnvgPocrJaA
|
|
52
|
+
usageMetadata:
|
|
53
|
+
candidatesTokenCount: 8
|
|
54
|
+
candidatesTokensDetails:
|
|
55
|
+
- modality: TEXT
|
|
56
|
+
tokenCount: 8
|
|
57
|
+
promptTokenCount: 25
|
|
58
|
+
promptTokensDetails:
|
|
59
|
+
- modality: TEXT
|
|
60
|
+
tokenCount: 25
|
|
61
|
+
totalTokenCount: 33
|
|
62
|
+
status:
|
|
63
|
+
code: 200
|
|
64
|
+
message: OK
|
|
65
|
+
version: 1
|
|
@@ -8,7 +8,7 @@ interactions:
|
|
|
8
8
|
connection:
|
|
9
9
|
- keep-alive
|
|
10
10
|
content-length:
|
|
11
|
-
- '
|
|
11
|
+
- '215'
|
|
12
12
|
content-type:
|
|
13
13
|
- application/json
|
|
14
14
|
host:
|
|
@@ -16,7 +16,7 @@ interactions:
|
|
|
16
16
|
method: POST
|
|
17
17
|
parsed_body:
|
|
18
18
|
messages:
|
|
19
|
-
- content: What is the capital of France?
|
|
19
|
+
- content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
20
20
|
role: user
|
|
21
21
|
model: llama3-8b-8192
|
|
22
22
|
n: 1
|
|
@@ -33,38 +33,38 @@ interactions:
|
|
|
33
33
|
connection:
|
|
34
34
|
- keep-alive
|
|
35
35
|
content-length:
|
|
36
|
-
- '
|
|
36
|
+
- '603'
|
|
37
37
|
content-type:
|
|
38
38
|
- application/json
|
|
39
39
|
transfer-encoding:
|
|
40
40
|
- chunked
|
|
41
41
|
vary:
|
|
42
|
-
- Origin
|
|
42
|
+
- Origin
|
|
43
43
|
parsed_body:
|
|
44
44
|
choices:
|
|
45
45
|
- finish_reason: stop
|
|
46
46
|
index: 0
|
|
47
47
|
logprobs: null
|
|
48
48
|
message:
|
|
49
|
-
content:
|
|
49
|
+
content: "Bien sûr!\n\nThe lovely city that is the capital of France is "
|
|
50
50
|
role: assistant
|
|
51
|
-
created:
|
|
52
|
-
id: chatcmpl-
|
|
51
|
+
created: 1749229135
|
|
52
|
+
id: chatcmpl-69930f13-fe23-4584-9d09-c1e1612a2183
|
|
53
53
|
model: llama3-8b-8192
|
|
54
54
|
object: chat.completion
|
|
55
|
-
system_fingerprint:
|
|
55
|
+
system_fingerprint: fp_179b0f92c9
|
|
56
56
|
usage:
|
|
57
|
-
completion_time: 0.
|
|
58
|
-
completion_tokens:
|
|
59
|
-
prompt_time: 0.
|
|
60
|
-
prompt_tokens:
|
|
61
|
-
queue_time: 0.
|
|
62
|
-
total_time: 0.
|
|
63
|
-
total_tokens:
|
|
57
|
+
completion_time: 0.020833333
|
|
58
|
+
completion_tokens: 25
|
|
59
|
+
prompt_time: 0.004837532
|
|
60
|
+
prompt_tokens: 35
|
|
61
|
+
queue_time: 0.022124504000000003
|
|
62
|
+
total_time: 0.025670865
|
|
63
|
+
total_tokens: 60
|
|
64
64
|
usage_breakdown:
|
|
65
65
|
models: null
|
|
66
66
|
x_groq:
|
|
67
|
-
id:
|
|
67
|
+
id: req_01jx32wsk4fwf98jtfjm1agphs
|
|
68
68
|
status:
|
|
69
69
|
code: 200
|
|
70
70
|
message: OK
|
|
@@ -8,7 +8,7 @@ interactions:
|
|
|
8
8
|
connection:
|
|
9
9
|
- keep-alive
|
|
10
10
|
content-length:
|
|
11
|
-
- '
|
|
11
|
+
- '232'
|
|
12
12
|
content-type:
|
|
13
13
|
- application/json
|
|
14
14
|
host:
|
|
@@ -16,7 +16,7 @@ interactions:
|
|
|
16
16
|
method: POST
|
|
17
17
|
parsed_body:
|
|
18
18
|
messages:
|
|
19
|
-
- content: What is the capital of France?
|
|
19
|
+
- content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
20
20
|
role: user
|
|
21
21
|
model: ministral-8b-latest
|
|
22
22
|
n: 1
|
|
@@ -37,14 +37,6 @@ interactions:
|
|
|
37
37
|
- '322'
|
|
38
38
|
content-type:
|
|
39
39
|
- application/json
|
|
40
|
-
ratelimitbysize-limit:
|
|
41
|
-
- '500000'
|
|
42
|
-
ratelimitbysize-query-cost:
|
|
43
|
-
- '32008'
|
|
44
|
-
ratelimitbysize-remaining:
|
|
45
|
-
- '467992'
|
|
46
|
-
ratelimitbysize-reset:
|
|
47
|
-
- '42'
|
|
48
40
|
transfer-encoding:
|
|
49
41
|
- chunked
|
|
50
42
|
parsed_body:
|
|
@@ -55,14 +47,14 @@ interactions:
|
|
|
55
47
|
content: 'The capital of France is '
|
|
56
48
|
role: assistant
|
|
57
49
|
tool_calls: null
|
|
58
|
-
created:
|
|
59
|
-
id:
|
|
50
|
+
created: 1749229172
|
|
51
|
+
id: 59bee455a928496eb22bbf8b8b817252
|
|
60
52
|
model: ministral-8b-latest
|
|
61
53
|
object: chat.completion
|
|
62
54
|
usage:
|
|
63
55
|
completion_tokens: 6
|
|
64
|
-
prompt_tokens:
|
|
65
|
-
total_tokens:
|
|
56
|
+
prompt_tokens: 28
|
|
57
|
+
total_tokens: 34
|
|
66
58
|
status:
|
|
67
59
|
code: 200
|
|
68
60
|
message: OK
|
|
@@ -8,7 +8,7 @@ interactions:
|
|
|
8
8
|
connection:
|
|
9
9
|
- keep-alive
|
|
10
10
|
content-length:
|
|
11
|
-
- '
|
|
11
|
+
- '202'
|
|
12
12
|
content-type:
|
|
13
13
|
- application/json
|
|
14
14
|
host:
|
|
@@ -16,10 +16,9 @@ interactions:
|
|
|
16
16
|
method: POST
|
|
17
17
|
parsed_body:
|
|
18
18
|
messages:
|
|
19
|
-
- content: What is the capital of France?
|
|
19
|
+
- content: What is the capital of France? Give me an answer that contains the word "Paris", but is not the first word.
|
|
20
20
|
role: user
|
|
21
21
|
model: o3-mini
|
|
22
|
-
n: 1
|
|
23
22
|
stop:
|
|
24
23
|
- Paris
|
|
25
24
|
stream: false
|
|
@@ -33,13 +32,13 @@ interactions:
|
|
|
33
32
|
connection:
|
|
34
33
|
- keep-alive
|
|
35
34
|
content-length:
|
|
36
|
-
- '
|
|
35
|
+
- '808'
|
|
37
36
|
content-type:
|
|
38
37
|
- application/json
|
|
39
38
|
openai-organization:
|
|
40
39
|
- pydantic-28gund
|
|
41
40
|
openai-processing-ms:
|
|
42
|
-
- '
|
|
41
|
+
- '3788'
|
|
43
42
|
openai-version:
|
|
44
43
|
- '2020-10-01'
|
|
45
44
|
strict-transport-security:
|
|
@@ -55,24 +54,24 @@ interactions:
|
|
|
55
54
|
content: 'The capital of France is '
|
|
56
55
|
refusal: null
|
|
57
56
|
role: assistant
|
|
58
|
-
created:
|
|
59
|
-
id: chatcmpl-
|
|
57
|
+
created: 1749229128
|
|
58
|
+
id: chatcmpl-BfUgyreG4fpnDXvHKXtRkevWb6i3p
|
|
60
59
|
model: o3-mini-2025-01-31
|
|
61
60
|
object: chat.completion
|
|
62
61
|
service_tier: default
|
|
63
|
-
system_fingerprint:
|
|
62
|
+
system_fingerprint: fp_e20469f047
|
|
64
63
|
usage:
|
|
65
|
-
completion_tokens:
|
|
64
|
+
completion_tokens: 467
|
|
66
65
|
completion_tokens_details:
|
|
67
66
|
accepted_prediction_tokens: 0
|
|
68
67
|
audio_tokens: 0
|
|
69
|
-
reasoning_tokens:
|
|
68
|
+
reasoning_tokens: 448
|
|
70
69
|
rejected_prediction_tokens: 0
|
|
71
|
-
prompt_tokens:
|
|
70
|
+
prompt_tokens: 31
|
|
72
71
|
prompt_tokens_details:
|
|
73
72
|
audio_tokens: 0
|
|
74
73
|
cached_tokens: 0
|
|
75
|
-
total_tokens:
|
|
74
|
+
total_tokens: 498
|
|
76
75
|
status:
|
|
77
76
|
code: 200
|
|
78
77
|
message: OK
|
|
@@ -24,21 +24,27 @@ import pydantic_ai.models
|
|
|
24
24
|
from pydantic_ai.messages import BinaryContent
|
|
25
25
|
from pydantic_ai.models import Model, cached_async_http_client
|
|
26
26
|
|
|
27
|
-
__all__ = 'IsDatetime', 'IsFloat', 'IsNow', 'IsStr', 'IsInt', 'TestEnv', 'ClientWithHandler', 'try_import'
|
|
27
|
+
__all__ = 'IsDatetime', 'IsFloat', 'IsNow', 'IsStr', 'IsInt', 'IsInstance', 'TestEnv', 'ClientWithHandler', 'try_import'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
pydantic_ai.models.ALLOW_MODEL_REQUESTS = False
|
|
31
31
|
|
|
32
32
|
if TYPE_CHECKING:
|
|
33
|
+
from typing import TypeVar
|
|
34
|
+
|
|
33
35
|
from pydantic_ai.providers.bedrock import BedrockProvider
|
|
34
36
|
|
|
37
|
+
T = TypeVar('T')
|
|
38
|
+
|
|
39
|
+
def IsInstance(arg: type[T]) -> T: ...
|
|
40
|
+
|
|
35
41
|
def IsDatetime(*args: Any, **kwargs: Any) -> datetime: ...
|
|
36
42
|
def IsFloat(*args: Any, **kwargs: Any) -> float: ...
|
|
37
43
|
def IsInt(*args: Any, **kwargs: Any) -> int: ...
|
|
38
44
|
def IsNow(*args: Any, **kwargs: Any) -> datetime: ...
|
|
39
45
|
def IsStr(*args: Any, **kwargs: Any) -> str: ...
|
|
40
46
|
else:
|
|
41
|
-
from dirty_equals import IsDatetime, IsFloat, IsInt, IsNow as _IsNow, IsStr
|
|
47
|
+
from dirty_equals import IsDatetime, IsFloat, IsInstance, IsInt, IsNow as _IsNow, IsStr
|
|
42
48
|
|
|
43
49
|
def IsNow(*args: Any, **kwargs: Any):
|
|
44
50
|
# Increase the default value of `delta` to 10 to reduce test flakiness on overburdened machines
|
|
@@ -281,6 +287,11 @@ def openrouter_api_key() -> str:
|
|
|
281
287
|
return os.getenv('OPENROUTER_API_KEY', 'mock-api-key')
|
|
282
288
|
|
|
283
289
|
|
|
290
|
+
@pytest.fixture(scope='session')
|
|
291
|
+
def heroku_inference_key() -> str:
|
|
292
|
+
return os.getenv('HEROKU_INFERENCE_KEY', 'mock-api-key')
|
|
293
|
+
|
|
294
|
+
|
|
284
295
|
@pytest.fixture(scope='session')
|
|
285
296
|
def bedrock_provider():
|
|
286
297
|
try:
|
|
@@ -342,6 +353,11 @@ def model(
|
|
|
342
353
|
from pydantic_ai.providers.google_gla import GoogleGLAProvider
|
|
343
354
|
|
|
344
355
|
return GeminiModel('gemini-1.5-flash', provider=GoogleGLAProvider(api_key=gemini_api_key))
|
|
356
|
+
elif request.param == 'google':
|
|
357
|
+
from pydantic_ai.models.google import GoogleModel
|
|
358
|
+
from pydantic_ai.providers.google import GoogleProvider
|
|
359
|
+
|
|
360
|
+
return GoogleModel('gemini-1.5-flash', provider=GoogleProvider(api_key=gemini_api_key))
|
|
345
361
|
elif request.param == 'bedrock':
|
|
346
362
|
from pydantic_ai.models.bedrock import BedrockConverseModel
|
|
347
363
|
|