pydantic-ai 0.2.19__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pydantic-ai might be problematic. Click here for more details.

Files changed (281) hide show
  1. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/PKG-INFO +3 -3
  2. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/pyproject.toml +1 -0
  3. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/conftest.py +5 -1
  4. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/mcp_server.py +18 -0
  5. pydantic_ai-0.3.0/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part.yaml +230 -0
  6. pydantic_ai-0.3.0/tests/models/cassettes/test_anthropic/test_anthropic_model_thinking_part_stream.yaml +231 -0
  7. pydantic_ai-0.3.0/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part.yaml +206 -0
  8. pydantic_ai-0.3.0/tests/models/cassettes/test_bedrock/test_bedrock_model_thinking_part_stream.yaml +2053 -0
  9. pydantic_ai-0.3.0/tests/models/cassettes/test_cohere/test_cohere_model_thinking_part.yaml +290 -0
  10. pydantic_ai-0.3.0/tests/models/cassettes/test_deepseek/test_deepseek_model_thinking_part.yaml +91 -0
  11. pydantic_ai-0.3.0/tests/models/cassettes/test_gemini/test_gemini_model_thinking_part.yaml +278 -0
  12. pydantic_ai-0.3.0/tests/models/cassettes/test_google/test_google_model_thinking_part.yaml +122 -0
  13. pydantic_ai-0.3.0/tests/models/cassettes/test_google/test_google_model_thinking_part_iter.yaml +207 -0
  14. pydantic_ai-0.3.0/tests/models/cassettes/test_google/test_google_timeout.yaml +64 -0
  15. pydantic_ai-0.3.0/tests/models/cassettes/test_groq/test_groq_model_thinking_part.yaml +345 -0
  16. pydantic_ai-0.3.0/tests/models/cassettes/test_mistral/test_mistral_model_thinking_part.yaml +313 -0
  17. pydantic_ai-0.3.0/tests/models/cassettes/test_openai/test_openai_model_thinking_part.yaml +310 -0
  18. pydantic_ai-0.3.0/tests/models/cassettes/test_openai/test_openai_model_thinking_part_iter.yaml +1413 -0
  19. pydantic_ai-0.3.0/tests/models/cassettes/test_openai/test_openai_responses_model_thinking_part.yaml +321 -0
  20. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_anthropic.py +249 -11
  21. pydantic_ai-0.3.0/tests/models/test_bedrock.py +1492 -0
  22. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_cohere.py +133 -1
  23. pydantic_ai-0.3.0/tests/models/test_deepseek.py +45 -0
  24. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_gemini.py +139 -2
  25. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_gemini_vertex.py +3 -3
  26. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_google.py +161 -1
  27. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_groq.py +221 -3
  28. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_mistral.py +82 -2
  29. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_model_names.py +4 -0
  30. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_model_test.py +1 -1
  31. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_openai.py +209 -8
  32. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_openai_responses.py +1 -1
  33. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_history_processor.py +100 -0
  34. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_logfire.py +2 -2
  35. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_mcp.py +49 -5
  36. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_messages.py +30 -1
  37. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_parts_manager.py +58 -0
  38. pydantic_ai-0.3.0/tests/test_thinking_part.py +28 -0
  39. pydantic_ai-0.2.19/tests/models/test_bedrock.py +0 -728
  40. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/.gitignore +0 -0
  41. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/LICENSE +0 -0
  42. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/Makefile +0 -0
  43. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/README.md +0 -0
  44. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/__init__.py +0 -0
  45. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/assets/dummy.pdf +0 -0
  46. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/assets/kiwi.png +0 -0
  47. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/assets/marcelo.mp3 +0 -0
  48. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/assets/small_video.mp4 +0 -0
  49. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_agent_with_stdio_server.yaml +0 -0
  50. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_audio_resource.yaml +0 -0
  51. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_dict.yaml +0 -0
  52. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_error.yaml +0 -0
  53. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_image.yaml +0 -0
  54. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_image_resource.yaml +0 -0
  55. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_multiple_items.yaml +0 -0
  56. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_none.yaml +0 -0
  57. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_str.yaml +0 -0
  58. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_mcp/test_tool_returning_text_resource.yaml +0 -0
  59. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[anthropic].yaml +0 -0
  60. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[bedrock].yaml +0 -0
  61. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[cohere].yaml +0 -0
  62. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[gemini].yaml +0 -0
  63. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[google].yaml +0 -0
  64. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[groq].yaml +0 -0
  65. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[mistral].yaml +0 -0
  66. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/cassettes/test_settings/test_stop_settings[openai].yaml +0 -0
  67. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/__init__.py +0 -0
  68. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_dataset.py +0 -0
  69. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_evaluator_base.py +0 -0
  70. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_evaluator_common.py +0 -0
  71. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_evaluator_context.py +0 -0
  72. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_evaluator_spec.py +0 -0
  73. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_evaluators.py +0 -0
  74. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_llm_as_a_judge.py +0 -0
  75. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_otel.py +0 -0
  76. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_render_numbers.py +0 -0
  77. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_reporting.py +0 -0
  78. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_reports.py +0 -0
  79. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/test_utils.py +0 -0
  80. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/evals/utils.py +0 -0
  81. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/example_modules/README.md +0 -0
  82. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/example_modules/bank_database.py +0 -0
  83. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/example_modules/fake_database.py +0 -0
  84. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/example_modules/weather_service.py +0 -0
  85. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/ext/__init__.py +0 -0
  86. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/ext/test_langchain.py +0 -0
  87. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/fasta2a/__init__.py +0 -0
  88. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/fasta2a/test_applications.py +0 -0
  89. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/__init__.py +0 -0
  90. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_file_persistence.py +0 -0
  91. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_graph.py +0 -0
  92. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_mermaid.py +0 -0
  93. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_persistence.py +0 -0
  94. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_state.py +0 -0
  95. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/graph/test_utils.py +0 -0
  96. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/import_examples.py +0 -0
  97. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/json_body_serializer.py +0 -0
  98. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/__init__.py +0 -0
  99. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_empty_message_on_history.yaml +0 -0
  100. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_anthropic_model_instructions.yaml +0 -0
  101. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_document_binary_content_input.yaml +0 -0
  102. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_document_url_input.yaml +0 -0
  103. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_extra_headers.yaml +0 -0
  104. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_image_as_binary_content_tool_response.yaml +0 -0
  105. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_image_url_input.yaml +0 -0
  106. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_image_url_input_invalid_mime_type.yaml +0 -0
  107. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_multiple_parallel_tool_calls.yaml +0 -0
  108. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_anthropic/test_text_document_url_input.yaml +0 -0
  109. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_empty_system_prompt.yaml +0 -0
  110. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model.yaml +0 -0
  111. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_anthropic_model_without_tools.yaml +0 -0
  112. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_guardrail_config.yaml +0 -0
  113. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_instructions.yaml +0 -0
  114. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_iter_stream.yaml +0 -0
  115. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_max_tokens.yaml +0 -0
  116. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_other_parameters.yaml +0 -0
  117. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_performance_config.yaml +0 -0
  118. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_retry.yaml +0 -0
  119. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_stream.yaml +0 -0
  120. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_structured_response.yaml +0 -0
  121. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_model_top_p.yaml +0 -0
  122. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_bedrock_multiple_documents_in_history.yaml +0 -0
  123. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_document_url_input.yaml +0 -0
  124. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_image_as_binary_content_input.yaml +0 -0
  125. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_image_url_input.yaml +0 -0
  126. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_text_as_binary_content_input.yaml +0 -0
  127. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_text_document_url_input.yaml +0 -0
  128. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_video_as_binary_content_input.yaml +0 -0
  129. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_bedrock/test_video_url_input.yaml +0 -0
  130. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_cohere/test_cohere_model_instructions.yaml +0 -0
  131. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_cohere/test_request_simple_success_with_vcr.yaml +0 -0
  132. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_download_item/test_download_item_application_octet_stream.yaml +0 -0
  133. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_download_item/test_download_item_no_content_type.yaml +0 -0
  134. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_document_url_input.yaml +0 -0
  135. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_false.yaml +0 -0
  136. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_additional_properties_is_true.yaml +0 -0
  137. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_drop_exclusive_maximum.yaml +0 -0
  138. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_exclusive_minimum_and_maximum.yaml +0 -0
  139. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_model_instructions.yaml +0 -0
  140. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_tool_config_any_with_tool_without_args.yaml +0 -0
  141. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_gemini_youtube_video_url_input.yaml +0 -0
  142. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_input.yaml +0 -0
  143. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_image_as_binary_content_tool_response.yaml +0 -0
  144. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_image_url_input.yaml +0 -0
  145. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_labels_are_ignored_with_gla_provider.yaml +0 -0
  146. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_video_as_binary_content_input.yaml +0 -0
  147. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini/test_video_url_input.yaml +0 -0
  148. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_labels.yaml +0 -0
  149. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl (gs)].yaml +0 -0
  150. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[AudioUrl].yaml +0 -0
  151. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl (gs)].yaml +0 -0
  152. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[DocumentUrl].yaml +0 -0
  153. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl (gs)].yaml +0 -0
  154. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[ImageUrl].yaml +0 -0
  155. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (YouTube)].yaml +0 -0
  156. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl (gs)].yaml +0 -0
  157. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input[VideoUrl].yaml +0 -0
  158. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_gemini_vertex/test_url_input_force_download.yaml +0 -0
  159. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model.yaml +0 -0
  160. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_document_url_input.yaml +0 -0
  161. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_empty_user_prompt.yaml +0 -0
  162. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_image_as_binary_content_input.yaml +0 -0
  163. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_image_url_input.yaml +0 -0
  164. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_instructions.yaml +0 -0
  165. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_iter_stream.yaml +0 -0
  166. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_max_tokens.yaml +0 -0
  167. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_multiple_documents_in_history.yaml +0 -0
  168. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_retry.yaml +0 -0
  169. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_safety_settings.yaml +0 -0
  170. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_stream.yaml +0 -0
  171. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_structured_response.yaml +0 -0
  172. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_text_as_binary_content_input.yaml +0 -0
  173. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_text_document_url_input.yaml +0 -0
  174. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_thinking_config.yaml +0 -0
  175. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_top_p.yaml +0 -0
  176. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_vertex_labels.yaml +0 -0
  177. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_vertex_provider.yaml +0 -0
  178. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_video_as_binary_content_input.yaml +0 -0
  179. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_model_video_url_input.yaml +0 -0
  180. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_tool_config_any_with_tool_without_args.yaml +0 -0
  181. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl (gs)].yaml +0 -0
  182. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[AudioUrl].yaml +0 -0
  183. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl (gs)].yaml +0 -0
  184. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[DocumentUrl].yaml +0 -0
  185. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl (gs)].yaml +0 -0
  186. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[ImageUrl].yaml +0 -0
  187. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (YouTube)].yaml +0 -0
  188. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl (gs)].yaml +0 -0
  189. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input[VideoUrl].yaml +0 -0
  190. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_google/test_google_url_input_force_download.yaml +0 -0
  191. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_groq/test_extra_headers.yaml +0 -0
  192. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_groq/test_groq_model_instructions.yaml +0 -0
  193. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_input.yaml +0 -0
  194. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_groq/test_image_as_binary_content_tool_response.yaml +0 -0
  195. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_groq/test_image_url_input.yaml +0 -0
  196. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_mistral/test_image_as_binary_content_tool_response.yaml +0 -0
  197. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_mistral/test_mistral_model_instructions.yaml +0 -0
  198. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_model_names/test_known_model_names.yaml +0 -0
  199. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_audio_as_binary_content_input.yaml +0 -0
  200. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_compatible_api_with_tool_calls_without_id.yaml +0 -0
  201. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_document_as_binary_content_input.yaml +0 -0
  202. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_document_url_input.yaml +0 -0
  203. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_extra_headers.yaml +0 -0
  204. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_input.yaml +0 -0
  205. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_image_as_binary_content_tool_response.yaml +0 -0
  206. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_image_url_tool_response.yaml +0 -0
  207. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4.5-preview].yaml +0 -0
  208. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[gpt-4o-mini].yaml +0 -0
  209. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_max_completion_tokens[o3-mini].yaml +0 -0
  210. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_multiple_agent_tool_calls.yaml +0 -0
  211. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_audio_url_input.yaml +0 -0
  212. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_instructions.yaml +0 -0
  213. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_instructions_with_tool_calls_keep_instructions.yaml +0 -0
  214. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_model_without_system_prompt.yaml +0 -0
  215. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[developer].yaml +0 -0
  216. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_openai_o1_mini_system_role[system].yaml +0 -0
  217. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_reasoning_model_with_temperature.yaml +0 -0
  218. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai/test_user_id.yaml +0 -0
  219. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_audio_as_binary_content_input.yaml +0 -0
  220. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_input.yaml +0 -0
  221. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_image_as_binary_content_tool_response.yaml +0 -0
  222. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_as_binary_content_input.yaml +0 -0
  223. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_document_url_input.yaml +0 -0
  224. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_image_url_input.yaml +0 -0
  225. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_builtin_tools.yaml +0 -0
  226. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_http_error.yaml +0 -0
  227. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_instructions.yaml +0 -0
  228. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_retry.yaml +0 -0
  229. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response.yaml +0 -0
  230. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_model_simple_response_with_tool_call.yaml +0 -0
  231. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_output_type.yaml +0 -0
  232. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_effort.yaml +0 -0
  233. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_reasoning_generate_summary.yaml +0 -0
  234. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_stream.yaml +0 -0
  235. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_system_prompt.yaml +0 -0
  236. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_openai_responses_text_document_url_input.yaml +0 -0
  237. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/cassettes/test_openai_responses/test_reasoning_model_with_temperature.yaml +0 -0
  238. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/mock_async_stream.py +0 -0
  239. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_download_item.py +0 -0
  240. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_fallback.py +1 -1
  241. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_instrumented.py +0 -0
  242. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_model.py +0 -0
  243. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_model_function.py +0 -0
  244. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/models/test_model_request_parameters.py +0 -0
  245. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/__init__.py +0 -0
  246. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/cassettes/test_azure/test_azure_provider_call.yaml +0 -0
  247. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/cassettes/test_google_vertex/test_vertexai_provider.yaml +0 -0
  248. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/cassettes/test_heroku/test_heroku_model_provider_claude_3_7_sonnet.yaml +0 -0
  249. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/cassettes/test_openrouter/test_openrouter_with_google_model.yaml +0 -0
  250. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_anthropic.py +0 -0
  251. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_azure.py +0 -0
  252. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_bedrock.py +0 -0
  253. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_cohere.py +0 -0
  254. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_deepseek.py +0 -0
  255. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_fireworks.py +0 -0
  256. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_google_gla.py +0 -0
  257. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_google_vertex.py +0 -0
  258. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_grok.py +0 -0
  259. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_groq.py +0 -0
  260. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_heroku.py +0 -0
  261. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_mistral.py +0 -0
  262. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_openai.py +0 -0
  263. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_openrouter.py +0 -0
  264. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_provider_names.py +0 -0
  265. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/providers/test_together.py +0 -0
  266. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_a2a.py +0 -0
  267. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_agent.py +0 -0
  268. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_cli.py +0 -0
  269. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_deps.py +0 -0
  270. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_direct.py +0 -0
  271. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_examples.py +0 -0
  272. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_format_as_xml.py +0 -0
  273. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_json_body_serializer.py +0 -0
  274. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_live.py +0 -0
  275. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_settings.py +0 -0
  276. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_streaming.py +0 -0
  277. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_tools.py +0 -0
  278. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_usage_limits.py +0 -0
  279. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/test_utils.py +0 -0
  280. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/typed_agent.py +0 -0
  281. {pydantic_ai-0.2.19 → pydantic_ai-0.3.0}/tests/typed_graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai
3
- Version: 0.2.19
3
+ Version: 0.3.0
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs
5
5
  Project-URL: Homepage, https://ai.pydantic.dev
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai
@@ -28,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.19
31
+ Requires-Dist: pydantic-ai-slim[a2a,anthropic,bedrock,cli,cohere,evals,google,groq,mcp,mistral,openai,vertexai]==0.3.0
32
32
  Provides-Extra: examples
33
- Requires-Dist: pydantic-ai-examples==0.2.19; extra == 'examples'
33
+ Requires-Dist: pydantic-ai-examples==0.3.0; extra == 'examples'
34
34
  Provides-Extra: logfire
35
35
  Requires-Dist: logfire>=3.11.0; extra == 'logfire'
36
36
  Description-Content-Type: text/markdown
@@ -243,6 +243,7 @@ exclude_lines = [
243
243
  'if __name__ == .__main__.:',
244
244
  'except ImportError as _import_error:',
245
245
  '$\s*pass$',
246
+ 'assert False',
246
247
  ]
247
248
 
248
249
  [tool.logfire]
@@ -37,7 +37,6 @@ if TYPE_CHECKING:
37
37
  T = TypeVar('T')
38
38
 
39
39
  def IsInstance(arg: type[T]) -> T: ...
40
-
41
40
  def IsDatetime(*args: Any, **kwargs: Any) -> datetime: ...
42
41
  def IsFloat(*args: Any, **kwargs: Any) -> float: ...
43
42
  def IsInt(*args: Any, **kwargs: Any) -> int: ...
@@ -252,6 +251,11 @@ def document_content(assets_path: Path) -> BinaryContent:
252
251
  return BinaryContent(data=pdf_bytes, media_type='application/pdf')
253
252
 
254
253
 
254
+ @pytest.fixture(scope='session')
255
+ def deepseek_api_key() -> str:
256
+ return os.getenv('DEEPSEEK_API_KEY', 'mock-api-key')
257
+
258
+
255
259
  @pytest.fixture(scope='session')
256
260
  def openai_api_key() -> str:
257
261
  return os.getenv('OPENAI_API_KEY', 'mock-api-key')
@@ -3,6 +3,8 @@ from pathlib import Path
3
3
  from typing import Any
4
4
 
5
5
  from mcp.server.fastmcp import Context, FastMCP, Image
6
+ from mcp.server.session import ServerSessionT
7
+ from mcp.shared.context import LifespanContextT, RequestT
6
8
  from mcp.types import BlobResourceContents, EmbeddedResource, TextResourceContents
7
9
  from pydantic import AnyUrl
8
10
 
@@ -118,6 +120,22 @@ async def get_log_level(ctx: Context) -> str: # type: ignore
118
120
  return log_level
119
121
 
120
122
 
123
+ @mcp.tool()
124
+ async def echo_deps(ctx: Context[ServerSessionT, LifespanContextT, RequestT]) -> dict[str, Any]:
125
+ """Echo the run context.
126
+
127
+ Args:
128
+ ctx: Context object containing request and session information.
129
+
130
+ Returns:
131
+ Dictionary with an echo message and the deps.
132
+ """
133
+ await ctx.info('This is an info message')
134
+
135
+ deps: Any = getattr(ctx.request_context.meta, 'deps')
136
+ return {'echo': 'This is an echo message', 'deps': deps}
137
+
138
+
121
139
  @mcp._mcp_server.set_logging_level() # pyright: ignore[reportPrivateUsage]
122
140
  async def set_logging_level(level: str) -> None:
123
141
  global log_level
@@ -0,0 +1,230 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - application/json
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '213'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.anthropic.com
16
+ method: POST
17
+ parsed_body:
18
+ max_tokens: 2048
19
+ messages:
20
+ - content:
21
+ - text: How do I cross the street?
22
+ type: text
23
+ role: user
24
+ model: claude-3-7-sonnet-latest
25
+ stream: false
26
+ thinking:
27
+ budget_tokens: 1024
28
+ type: enabled
29
+ uri: https://api.anthropic.com/v1/messages?beta=true
30
+ response:
31
+ headers:
32
+ connection:
33
+ - keep-alive
34
+ content-length:
35
+ - '1876'
36
+ content-type:
37
+ - application/json
38
+ strict-transport-security:
39
+ - max-age=31536000; includeSubDomains; preload
40
+ transfer-encoding:
41
+ - chunked
42
+ parsed_body:
43
+ content:
44
+ - signature: ErUBCkYIBBgCIkDdtS5sPfAhQSct3TDKHzeqm87m7bk/P0ecMKVxqofk9q15fEDVWXxuIzQIYZCLUfcJzFi4/IYnpQYrgP34x4pnEgzeA7mWRCy/f1bK+IYaDH5i0Q5hgZkqPeMdwSIwMzHMBPM4Xae4czWnzjHGLR9Xg7DN+sb+MXKFgdXY4bcaOKzhImS05aqIjqBs4CHyKh1dTzSnHd76MAHgM1qjBQ2eIZJJ7s5WGkRkbvWzTxgC
45
+ thinking: This is a basic question about pedestrian safety when crossing a street. I'll provide a clear, step-by-step
46
+ explanation of how to safely cross a street. This is important safety information that applies to most places, though
47
+ specific rules might vary slightly by country.
48
+ type: thinking
49
+ - text: |-
50
+ # How to Cross the Street Safely
51
+
52
+ 1. **Find the right spot to cross**
53
+ - Use marked crosswalks when available
54
+ - Cross at intersections with traffic signals if possible
55
+ - Avoid crossing between parked cars or on blind curves
56
+
57
+ 2. **Stop at the edge of the street**
58
+ - Stand where you can see traffic clearly
59
+ - Make sure drivers can see you too
60
+
61
+ 3. **Look in all directions**
62
+ - Look left, right, then left again (or right, left, right again in left-driving countries)
63
+ - Check for turning vehicles at intersections
64
+
65
+ 4. **Wait for a safe gap in traffic**
66
+ - If at a signal, wait for the "WALK" sign or green light
67
+ - Make sure all vehicles have stopped before stepping into the road
68
+
69
+ 5. **Cross with purpose**
70
+ - Walk at a steady pace - don't run
71
+ - Continue watching for traffic as you cross
72
+ - Don't use your phone or wear headphones while crossing
73
+
74
+ Remember that local customs and laws may vary, but safety always comes first!
75
+ type: text
76
+ id: msg_01FWiSVNCRHvHUYU21BRandY
77
+ model: claude-3-7-sonnet-20250219
78
+ role: assistant
79
+ stop_reason: end_turn
80
+ stop_sequence: null
81
+ type: message
82
+ usage:
83
+ cache_creation_input_tokens: 0
84
+ cache_read_input_tokens: 0
85
+ input_tokens: 42
86
+ output_tokens: 302
87
+ service_tier: standard
88
+ status:
89
+ code: 200
90
+ message: OK
91
+ - request:
92
+ headers:
93
+ accept:
94
+ - application/json
95
+ accept-encoding:
96
+ - gzip, deflate
97
+ connection:
98
+ - keep-alive
99
+ content-length:
100
+ - '1953'
101
+ content-type:
102
+ - application/json
103
+ host:
104
+ - api.anthropic.com
105
+ method: POST
106
+ parsed_body:
107
+ max_tokens: 2048
108
+ messages:
109
+ - content:
110
+ - text: How do I cross the street?
111
+ type: text
112
+ role: user
113
+ - content:
114
+ - signature: ErUBCkYIBBgCIkDdtS5sPfAhQSct3TDKHzeqm87m7bk/P0ecMKVxqofk9q15fEDVWXxuIzQIYZCLUfcJzFi4/IYnpQYrgP34x4pnEgzeA7mWRCy/f1bK+IYaDH5i0Q5hgZkqPeMdwSIwMzHMBPM4Xae4czWnzjHGLR9Xg7DN+sb+MXKFgdXY4bcaOKzhImS05aqIjqBs4CHyKh1dTzSnHd76MAHgM1qjBQ2eIZJJ7s5WGkRkbvWzTxgC
115
+ thinking: This is a basic question about pedestrian safety when crossing a street. I'll provide a clear, step-by-step
116
+ explanation of how to safely cross a street. This is important safety information that applies to most places,
117
+ though specific rules might vary slightly by country.
118
+ type: thinking
119
+ - text: |-
120
+ # How to Cross the Street Safely
121
+
122
+ 1. **Find the right spot to cross**
123
+ - Use marked crosswalks when available
124
+ - Cross at intersections with traffic signals if possible
125
+ - Avoid crossing between parked cars or on blind curves
126
+
127
+ 2. **Stop at the edge of the street**
128
+ - Stand where you can see traffic clearly
129
+ - Make sure drivers can see you too
130
+
131
+ 3. **Look in all directions**
132
+ - Look left, right, then left again (or right, left, right again in left-driving countries)
133
+ - Check for turning vehicles at intersections
134
+
135
+ 4. **Wait for a safe gap in traffic**
136
+ - If at a signal, wait for the "WALK" sign or green light
137
+ - Make sure all vehicles have stopped before stepping into the road
138
+
139
+ 5. **Cross with purpose**
140
+ - Walk at a steady pace - don't run
141
+ - Continue watching for traffic as you cross
142
+ - Don't use your phone or wear headphones while crossing
143
+
144
+ Remember that local customs and laws may vary, but safety always comes first!
145
+ type: text
146
+ role: assistant
147
+ - content:
148
+ - text: Considering the way to cross the street, analogously, how do I cross the river?
149
+ type: text
150
+ role: user
151
+ model: claude-3-7-sonnet-latest
152
+ stream: false
153
+ thinking:
154
+ budget_tokens: 1024
155
+ type: enabled
156
+ uri: https://api.anthropic.com/v1/messages?beta=true
157
+ response:
158
+ headers:
159
+ connection:
160
+ - keep-alive
161
+ content-length:
162
+ - '2807'
163
+ content-type:
164
+ - application/json
165
+ strict-transport-security:
166
+ - max-age=31536000; includeSubDomains; preload
167
+ transfer-encoding:
168
+ - chunked
169
+ parsed_body:
170
+ content:
171
+ - signature: ErUBCkYIBBgCIkCNPEqIUXmAqiaqIqaHEmtiTi5sG6jBLYWmyfr9ELAh9dLAPPiq0Bnp2YQFJB2kz0aWYC8pJW9ylay8cJPFOGdIEgwcoJGGceEVCihog7MaDBZNwmI8LweQANgdvCIwvYrhAAqUDGHfQUYWuVB3ay4ySnmnROCDhtjOe6zTA2N2NC+BCePcZQBGQh/tnuoXKh37QqP3KRrKdVU5j1x4vAtUNtxQhbh4ip5qU5J12xgC
172
+ thinking: |-
173
+ This is an interesting analogy question. The person is asking how to cross a river by comparing it to crossing a street. I should outline the key principles of river crossing that parallel street crossing safety, while adapting for the unique challenges of a river environment.
174
+
175
+ For crossing a river, I should consider:
176
+ 1. Finding the right spot (like shallow areas, bridges, or ferry crossings)
177
+ 2. Assessing the conditions (river speed, depth, width, obstacles)
178
+ 3. Choosing the appropriate method based on the river conditions
179
+ 4. Safety precautions specific to water crossings
180
+ 5. The actual crossing technique
181
+
182
+ I'll structure this as a parallel to the street crossing guide, highlighting the similarities in approach while acknowledging the different hazards and considerations.
183
+ type: thinking
184
+ - text: |-
185
+ # How to Cross a River Safely
186
+
187
+ 1. **Find the right spot to cross**
188
+ - Use bridges, ferries, or designated crossing points when available
189
+ - Look for narrow, shallow sections with slower currents
190
+ - Avoid areas with rapids, fallen trees, or deep channels
191
+
192
+ 2. **Assess the river before attempting to cross**
193
+ - Check the water speed, depth, and clarity
194
+ - Look for hazards like submerged objects or strong currents
195
+ - Consider seasonal factors (spring floods, winter ice)
196
+
197
+ 3. **Choose the appropriate crossing method**
198
+ - Bridge or ferry: Safest options when available
199
+ - Wading: For shallow, calm waters (typically below knee height)
200
+ - Swimming: Only for those with strong swimming skills in appropriate conditions
201
+ - Boat/raft: For wider or deeper crossings
202
+
203
+ 4. **Prepare for the crossing**
204
+ - Secure belongings in waterproof containers
205
+ - Remove shoes or change to water shoes if wading
206
+ - Consider using a walking stick for balance when wading
207
+
208
+ 5. **Cross with caution**
209
+ - Face upstream while crossing to better resist the current
210
+ - Move steadily and deliberately - don't rush
211
+ - Stay aware of changing conditions during the crossing
212
+
213
+ Remember that river crossings involve significantly greater risks than street crossings. When in doubt, seek an established crossing point or go around rather than risking a dangerous crossing.
214
+ type: text
215
+ id: msg_01T32uJ4PiazXZjT1tfhpP8g
216
+ model: claude-3-7-sonnet-20250219
217
+ role: assistant
218
+ stop_reason: end_turn
219
+ stop_sequence: null
220
+ type: message
221
+ usage:
222
+ cache_creation_input_tokens: 0
223
+ cache_read_input_tokens: 0
224
+ input_tokens: 303
225
+ output_tokens: 486
226
+ service_tier: standard
227
+ status:
228
+ code: 200
229
+ message: OK
230
+ version: 1
@@ -0,0 +1,231 @@
1
+ interactions:
2
+ - request:
3
+ headers:
4
+ accept:
5
+ - application/json
6
+ accept-encoding:
7
+ - gzip, deflate
8
+ connection:
9
+ - keep-alive
10
+ content-length:
11
+ - '212'
12
+ content-type:
13
+ - application/json
14
+ host:
15
+ - api.anthropic.com
16
+ method: POST
17
+ parsed_body:
18
+ max_tokens: 2048
19
+ messages:
20
+ - content:
21
+ - text: How do I cross the street?
22
+ type: text
23
+ role: user
24
+ model: claude-3-7-sonnet-latest
25
+ stream: true
26
+ thinking:
27
+ budget_tokens: 1024
28
+ type: enabled
29
+ uri: https://api.anthropic.com/v1/messages?beta=true
30
+ response:
31
+ body:
32
+ string: |+
33
+ event: message_start
34
+ data: {"type":"message_start","message":{"id":"msg_01K8dnhxH3xD11atV9TZWkNM","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":42,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5,"service_tier":"standard"}}}
35
+
36
+ event: content_block_start
37
+ data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""} }
38
+
39
+ event: ping
40
+ data: {"type": "ping"}
41
+
42
+ event: content_block_delta
43
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"This question is asking"} }
44
+
45
+ event: content_block_delta
46
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" about how to cross a street"} }
47
+
48
+ event: content_block_delta
49
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" safely, which is a"} }
50
+
51
+ event: content_block_delta
52
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" basic pedestrian safety skill"} }
53
+
54
+ event: content_block_delta
55
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":". Let me provide a"} }
56
+
57
+ event: content_block_delta
58
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" clear, helpful answer"} }
59
+
60
+ event: content_block_delta
61
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" with the standard safety procedures for"} }
62
+
63
+ event: content_block_delta
64
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":" crossing a street."} }
65
+
66
+ event: content_block_delta
67
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"ErUBCkYIBBgCIkCvb+W28uqOVW1QcFdQfS4Qmlvhuf3Ji+y2HrT70+C+1Y3+bsJWI7TalhkbNqYrrsiwNiZD/V36NRWv13CwaLU0EgwKvWjc4TaALe+mux4aDBvydYDAXS63lck0WiIwe6i1uYVGUdtG2sDLh0hykB4CFO8QKO2jguCYqNxB3XMC0f/6zTQOsCIGqOUxaDRqKh0Wa/4Poohf60tzp4tl4c3ft1J+02/lKjVXEg28PhgC"}}
68
+
69
+ event: content_block_stop
70
+ data: {"type":"content_block_stop","index":0 }
71
+
72
+ event: content_block_start
73
+ data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""} }
74
+
75
+ event: content_block_delta
76
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"# How to Cross a Street Safely"}}
77
+
78
+ event: content_block_delta
79
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n\n1. **Fin"} }
80
+
81
+ event: content_block_delta
82
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"d a designated crossing point** if"} }
83
+
84
+ event: content_block_delta
85
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" possible:\n -"} }
86
+
87
+ event: content_block_delta
88
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" Crosswalks"} }
89
+
90
+ event: content_block_delta
91
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n - Pedestrian signals\n -"} }
92
+
93
+ event: content_block_delta
94
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" Pedestrian bridges"} }
95
+
96
+ event: content_block_delta
97
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n - Inters"} }
98
+
99
+ event: content_block_delta
100
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"ections\n\n2. **Before"} }
101
+
102
+ event: content_block_delta
103
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" crossing:**\n - Stop"} }
104
+
105
+ event: content_block_delta
106
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" at the curb or edge of the road"} }
107
+
108
+ event: content_block_delta
109
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n - Look left,"} }
110
+
111
+ event: content_block_delta
112
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" right, then left again ("} }
113
+
114
+ event: content_block_delta
115
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"or right, left, right again"} }
116
+
117
+ event: content_block_delta
118
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" in countries with left"} }
119
+
120
+ event: content_block_delta
121
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"-side driving)\n -"} }
122
+
123
+ event: content_block_delta
124
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" Make eye contact with nearby"} }
125
+
126
+ event: content_block_delta
127
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" drivers if possible\n "} }
128
+
129
+ event: content_block_delta
130
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"- Listen for approaching vehicles\n\n3. **"} }
131
+
132
+ event: content_block_delta
133
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"When crossing:**\n -"} }
134
+
135
+ event: content_block_delta
136
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" Walk, don't run"} }
137
+
138
+ event: content_block_delta
139
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n - Continue looking in"} }
140
+
141
+ event: content_block_delta
142
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" both directions as you cross\n -"} }
143
+
144
+ event: content_block_delta
145
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" Use the crosswalk if available"} }
146
+
147
+ event: content_block_delta
148
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n - Cross in"} }
149
+
150
+ event: content_block_delta
151
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" a straight line, not"}}
152
+
153
+ event: content_block_delta
154
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" diagonally"} }
155
+
156
+ event: content_block_delta
157
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n\n4. **If there"} }
158
+
159
+ event: content_block_delta
160
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" are pedestrian signals:**\n "} }
161
+
162
+ event: content_block_delta
163
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"- Wait for the \""} }
164
+
165
+ event: content_block_delta
166
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"WALK\" signal or"} }
167
+
168
+ event: content_block_delta
169
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" green walking figure\n - Don't"} }
170
+
171
+ event: content_block_delta
172
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" start crossing if the signal is flashing"} }
173
+
174
+ event: content_block_delta
175
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" or showing \"DON'"} }
176
+
177
+ event: content_block_delta
178
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"T WALK\""} }
179
+
180
+ event: content_block_delta
181
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n\n5. **Avoi"} }
182
+
183
+ event: content_block_delta
184
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"d distractions**"} }
185
+
186
+ event: content_block_delta
187
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" like texting, looking"} }
188
+
189
+ event: content_block_delta
190
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" at your phone, or"} }
191
+
192
+ event: content_block_delta
193
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" wearing headphones that prevent"} }
194
+
195
+ event: content_block_delta
196
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" you from hearing traffic."} }
197
+
198
+ event: content_block_delta
199
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"\n\nIs there a"} }
200
+
201
+ event: content_block_delta
202
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" specific situation or location"} }
203
+
204
+ event: content_block_delta
205
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" you're asking about?"} }
206
+
207
+ event: content_block_stop
208
+ data: {"type":"content_block_stop","index":1 }
209
+
210
+ event: message_delta
211
+ data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":305} }
212
+
213
+ event: message_stop
214
+ data: {"type":"message_stop" }
215
+
216
+ headers:
217
+ cache-control:
218
+ - no-cache
219
+ connection:
220
+ - keep-alive
221
+ content-type:
222
+ - text/event-stream; charset=utf-8
223
+ strict-transport-security:
224
+ - max-age=31536000; includeSubDomains; preload
225
+ transfer-encoding:
226
+ - chunked
227
+ status:
228
+ code: 200
229
+ message: OK
230
+ version: 1
231
+ ...