pydantic-ai-slim 1.6.0__tar.gz → 1.8.0__tar.gz

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

Potentially problematic release.


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

Files changed (142) hide show
  1. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/PKG-INFO +17 -3
  2. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_cli.py +2 -2
  3. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_output.py +15 -11
  4. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/agent/abstract.py +4 -3
  5. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/direct.py +4 -4
  6. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/openai.py +2 -3
  7. pydantic_ai_slim-1.8.0/pydantic_ai/models/outlines.py +563 -0
  8. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/__init__.py +4 -0
  9. pydantic_ai_slim-1.8.0/pydantic_ai/providers/outlines.py +40 -0
  10. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/settings.py +8 -0
  11. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pyproject.toml +5 -0
  12. pydantic_ai_slim-1.8.0/venv +0 -0
  13. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/.gitignore +0 -0
  14. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/LICENSE +0 -0
  15. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/README.md +0 -0
  16. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/__init__.py +0 -0
  17. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/__main__.py +0 -0
  18. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_a2a.py +0 -0
  19. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_agent_graph.py +0 -0
  20. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_function_schema.py +0 -0
  21. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_griffe.py +0 -0
  22. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_instrumentation.py +0 -0
  23. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_json_schema.py +0 -0
  24. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_mcp.py +0 -0
  25. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_otel_messages.py +0 -0
  26. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_parts_manager.py +0 -0
  27. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_run_context.py +0 -0
  28. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_system_prompt.py +0 -0
  29. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_thinking_part.py +0 -0
  30. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_tool_manager.py +0 -0
  31. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/_utils.py +0 -0
  32. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/ag_ui.py +0 -0
  33. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/agent/__init__.py +0 -0
  34. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/agent/wrapper.py +0 -0
  35. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/builtin_tools.py +0 -0
  36. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/common_tools/__init__.py +0 -0
  37. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/common_tools/duckduckgo.py +0 -0
  38. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/common_tools/tavily.py +0 -0
  39. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/__init__.py +0 -0
  40. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/dbos/__init__.py +0 -0
  41. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/dbos/_agent.py +0 -0
  42. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/dbos/_mcp_server.py +0 -0
  43. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/dbos/_model.py +0 -0
  44. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/dbos/_utils.py +0 -0
  45. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/__init__.py +0 -0
  46. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_agent.py +0 -0
  47. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_cache_policies.py +0 -0
  48. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_function_toolset.py +0 -0
  49. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_mcp_server.py +0 -0
  50. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_model.py +0 -0
  51. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_toolset.py +0 -0
  52. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/prefect/_types.py +0 -0
  53. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/__init__.py +0 -0
  54. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_agent.py +0 -0
  55. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_function_toolset.py +0 -0
  56. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_logfire.py +0 -0
  57. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_mcp_server.py +0 -0
  58. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_model.py +0 -0
  59. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_run_context.py +0 -0
  60. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/durable_exec/temporal/_toolset.py +0 -0
  61. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/exceptions.py +0 -0
  62. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/ext/__init__.py +0 -0
  63. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/ext/aci.py +0 -0
  64. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/ext/langchain.py +0 -0
  65. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/format_prompt.py +0 -0
  66. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/mcp.py +0 -0
  67. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/messages.py +0 -0
  68. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/__init__.py +0 -0
  69. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/anthropic.py +0 -0
  70. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/bedrock.py +0 -0
  71. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/cohere.py +0 -0
  72. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/fallback.py +0 -0
  73. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/function.py +0 -0
  74. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/gemini.py +0 -0
  75. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/google.py +0 -0
  76. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/groq.py +0 -0
  77. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/huggingface.py +0 -0
  78. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/instrumented.py +0 -0
  79. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/mcp_sampling.py +0 -0
  80. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/mistral.py +0 -0
  81. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/test.py +0 -0
  82. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/models/wrapper.py +0 -0
  83. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/output.py +0 -0
  84. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/__init__.py +0 -0
  85. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/amazon.py +0 -0
  86. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/anthropic.py +0 -0
  87. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/cohere.py +0 -0
  88. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/deepseek.py +0 -0
  89. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/google.py +0 -0
  90. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/grok.py +0 -0
  91. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/groq.py +0 -0
  92. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/harmony.py +0 -0
  93. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/meta.py +0 -0
  94. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/mistral.py +0 -0
  95. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/moonshotai.py +0 -0
  96. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/openai.py +0 -0
  97. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/profiles/qwen.py +0 -0
  98. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/anthropic.py +0 -0
  99. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/azure.py +0 -0
  100. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/bedrock.py +0 -0
  101. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/cerebras.py +0 -0
  102. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/cohere.py +0 -0
  103. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/deepseek.py +0 -0
  104. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/fireworks.py +0 -0
  105. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/gateway.py +0 -0
  106. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/github.py +0 -0
  107. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/google.py +0 -0
  108. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/google_gla.py +0 -0
  109. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/google_vertex.py +0 -0
  110. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/grok.py +0 -0
  111. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/groq.py +0 -0
  112. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/heroku.py +0 -0
  113. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/huggingface.py +0 -0
  114. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/litellm.py +0 -0
  115. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/mistral.py +0 -0
  116. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/moonshotai.py +0 -0
  117. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/nebius.py +0 -0
  118. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/ollama.py +0 -0
  119. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/openai.py +0 -0
  120. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/openrouter.py +0 -0
  121. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/ovhcloud.py +0 -0
  122. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/together.py +0 -0
  123. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/providers/vercel.py +0 -0
  124. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/py.typed +0 -0
  125. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/result.py +0 -0
  126. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/retries.py +0 -0
  127. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/run.py +0 -0
  128. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/tools.py +0 -0
  129. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/__init__.py +0 -0
  130. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/_dynamic.py +0 -0
  131. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/abstract.py +0 -0
  132. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/approval_required.py +0 -0
  133. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/combined.py +0 -0
  134. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/external.py +0 -0
  135. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/fastmcp.py +0 -0
  136. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/filtered.py +0 -0
  137. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/function.py +0 -0
  138. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/prefixed.py +0 -0
  139. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/prepared.py +0 -0
  140. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/renamed.py +0 -0
  141. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/toolsets/wrapper.py +0 -0
  142. {pydantic_ai_slim-1.6.0 → pydantic_ai_slim-1.8.0}/pydantic_ai/usage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydantic-ai-slim
3
- Version: 1.6.0
3
+ Version: 1.8.0
4
4
  Summary: Agent Framework / shim to use Pydantic with LLMs, slim package
5
5
  Project-URL: Homepage, https://github.com/pydantic/pydantic-ai/tree/main/pydantic_ai_slim
6
6
  Project-URL: Source, https://github.com/pydantic/pydantic-ai/tree/main/pydantic_ai_slim
@@ -33,7 +33,7 @@ Requires-Dist: genai-prices>=0.0.35
33
33
  Requires-Dist: griffe>=1.3.2
34
34
  Requires-Dist: httpx>=0.27
35
35
  Requires-Dist: opentelemetry-api>=1.28.0
36
- Requires-Dist: pydantic-graph==1.6.0
36
+ Requires-Dist: pydantic-graph==1.8.0
37
37
  Requires-Dist: pydantic>=2.10
38
38
  Requires-Dist: typing-inspection>=0.4.0
39
39
  Provides-Extra: a2a
@@ -57,7 +57,7 @@ Requires-Dist: dbos>=1.14.0; extra == 'dbos'
57
57
  Provides-Extra: duckduckgo
58
58
  Requires-Dist: ddgs>=9.0.0; extra == 'duckduckgo'
59
59
  Provides-Extra: evals
60
- Requires-Dist: pydantic-evals==1.6.0; extra == 'evals'
60
+ Requires-Dist: pydantic-evals==1.8.0; extra == 'evals'
61
61
  Provides-Extra: fastmcp
62
62
  Requires-Dist: fastmcp>=2.12.0; extra == 'fastmcp'
63
63
  Provides-Extra: google
@@ -74,6 +74,20 @@ Provides-Extra: mistral
74
74
  Requires-Dist: mistralai>=1.9.10; extra == 'mistral'
75
75
  Provides-Extra: openai
76
76
  Requires-Dist: openai>=1.107.2; extra == 'openai'
77
+ Provides-Extra: outlines-llamacpp
78
+ Requires-Dist: outlines[llamacpp]<1.3.0,>=1.0.0; extra == 'outlines-llamacpp'
79
+ Provides-Extra: outlines-mlxlm
80
+ Requires-Dist: outlines[mlxlm]<1.3.0,>=1.0.0; extra == 'outlines-mlxlm'
81
+ Provides-Extra: outlines-sglang
82
+ Requires-Dist: outlines[sglang]<1.3.0,>=1.0.0; extra == 'outlines-sglang'
83
+ Requires-Dist: pillow; extra == 'outlines-sglang'
84
+ Provides-Extra: outlines-transformers
85
+ Requires-Dist: outlines[transformers]<1.3.0,>=1.0.0; extra == 'outlines-transformers'
86
+ Requires-Dist: pillow; extra == 'outlines-transformers'
87
+ Requires-Dist: transformers>=4.0.0; extra == 'outlines-transformers'
88
+ Provides-Extra: outlines-vllm-offline
89
+ Requires-Dist: outlines<1.3.0,>=1.0.0; extra == 'outlines-vllm-offline'
90
+ Requires-Dist: vllm; (python_version < '3.12') and extra == 'outlines-vllm-offline'
77
91
  Provides-Extra: prefect
78
92
  Requires-Dist: prefect>=3.4.21; extra == 'prefect'
79
93
  Provides-Extra: retries
@@ -103,7 +103,7 @@ def cli_exit(prog_name: str = 'pai'): # pragma: no cover
103
103
 
104
104
 
105
105
  def cli( # noqa: C901
106
- args_list: Sequence[str] | None = None, *, prog_name: str = 'pai', default_model: str = 'openai:gpt-4.1'
106
+ args_list: Sequence[str] | None = None, *, prog_name: str = 'pai', default_model: str = 'openai:gpt-5'
107
107
  ) -> int:
108
108
  """Run the CLI and return the exit code for the process."""
109
109
  parser = argparse.ArgumentParser(
@@ -124,7 +124,7 @@ Special prompts:
124
124
  '-m',
125
125
  '--model',
126
126
  nargs='?',
127
- help=f'Model to use, in format "<provider>:<model>" e.g. "openai:gpt-4.1" or "anthropic:claude-sonnet-4-0". Defaults to "{default_model}".',
127
+ help=f'Model to use, in format "<provider>:<model>" e.g. "openai:gpt-5" or "anthropic:claude-sonnet-4-5". Defaults to "{default_model}".',
128
128
  )
129
129
  # we don't want to autocomplete or list models that don't include the provider,
130
130
  # e.g. we want to show `openai:gpt-4o` but not `gpt-4o`
@@ -556,6 +556,20 @@ class PromptedOutputSchema(StructuredTextOutputSchema[OutputDataT]):
556
556
  def mode(self) -> OutputMode:
557
557
  return 'prompted'
558
558
 
559
+ @classmethod
560
+ def build_instructions(cls, template: str, object_def: OutputObjectDefinition) -> str:
561
+ """Build instructions from a template and an object definition."""
562
+ schema = object_def.json_schema.copy()
563
+ if object_def.name:
564
+ schema['title'] = object_def.name
565
+ if object_def.description:
566
+ schema['description'] = object_def.description
567
+
568
+ if '{schema}' not in template:
569
+ template = '\n\n'.join([template, '{schema}'])
570
+
571
+ return template.format(schema=json.dumps(schema))
572
+
559
573
  def raise_if_unsupported(self, profile: ModelProfile) -> None:
560
574
  """Raise an error if the mode is not supported by this model."""
561
575
  super().raise_if_unsupported(profile)
@@ -563,18 +577,8 @@ class PromptedOutputSchema(StructuredTextOutputSchema[OutputDataT]):
563
577
  def instructions(self, default_template: str) -> str:
564
578
  """Get instructions to tell model to output JSON matching the schema."""
565
579
  template = self.template or default_template
566
-
567
- if '{schema}' not in template:
568
- template = '\n\n'.join([template, '{schema}'])
569
-
570
580
  object_def = self.object_def
571
- schema = object_def.json_schema.copy()
572
- if object_def.name:
573
- schema['title'] = object_def.name
574
- if object_def.description:
575
- schema['description'] = object_def.description
576
-
577
- return template.format(schema=json.dumps(schema))
581
+ return self.build_instructions(template, object_def)
578
582
 
579
583
 
580
584
  @dataclass(init=False)
@@ -683,6 +683,9 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
683
683
  An async iterable of stream events `AgentStreamEvent` and finally a `AgentRunResultEvent` with the final
684
684
  run result.
685
685
  """
686
+ if infer_name and self.name is None:
687
+ self._infer_name(inspect.currentframe())
688
+
686
689
  # unfortunately this hack of returning a generator rather than defining it right here is
687
690
  # required to allow overloads of this method to work in python's typing system, or at least with pyright
688
691
  # or at least I couldn't make it work without
@@ -696,7 +699,6 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
696
699
  model_settings=model_settings,
697
700
  usage_limits=usage_limits,
698
701
  usage=usage,
699
- infer_name=infer_name,
700
702
  toolsets=toolsets,
701
703
  builtin_tools=builtin_tools,
702
704
  )
@@ -713,7 +715,6 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
713
715
  model_settings: ModelSettings | None = None,
714
716
  usage_limits: _usage.UsageLimits | None = None,
715
717
  usage: _usage.RunUsage | None = None,
716
- infer_name: bool = True,
717
718
  toolsets: Sequence[AbstractToolset[AgentDepsT]] | None = None,
718
719
  builtin_tools: Sequence[AbstractBuiltinTool] | None = None,
719
720
  ) -> AsyncIterator[_messages.AgentStreamEvent | AgentRunResultEvent[Any]]:
@@ -739,7 +740,7 @@ class AbstractAgent(Generic[AgentDepsT, OutputDataT], ABC):
739
740
  model_settings=model_settings,
740
741
  usage_limits=usage_limits,
741
742
  usage=usage,
742
- infer_name=infer_name,
743
+ infer_name=False,
743
744
  toolsets=toolsets,
744
745
  builtin_tools=builtin_tools,
745
746
  event_stream_handler=event_stream_handler,
@@ -50,7 +50,7 @@ async def model_request(
50
50
 
51
51
  async def main():
52
52
  model_response = await model_request(
53
- 'anthropic:claude-3-5-haiku-latest',
53
+ 'anthropic:claude-haiku-4-5',
54
54
  [ModelRequest.user_text_prompt('What is the capital of France?')] # (1)!
55
55
  )
56
56
  print(model_response)
@@ -58,7 +58,7 @@ async def model_request(
58
58
  ModelResponse(
59
59
  parts=[TextPart(content='The capital of France is Paris.')],
60
60
  usage=RequestUsage(input_tokens=56, output_tokens=7),
61
- model_name='claude-3-5-haiku-latest',
61
+ model_name='claude-haiku-4-5',
62
62
  timestamp=datetime.datetime(...),
63
63
  )
64
64
  '''
@@ -103,7 +103,7 @@ def model_request_sync(
103
103
  from pydantic_ai.direct import model_request_sync
104
104
 
105
105
  model_response = model_request_sync(
106
- 'anthropic:claude-3-5-haiku-latest',
106
+ 'anthropic:claude-haiku-4-5',
107
107
  [ModelRequest.user_text_prompt('What is the capital of France?')] # (1)!
108
108
  )
109
109
  print(model_response)
@@ -111,7 +111,7 @@ def model_request_sync(
111
111
  ModelResponse(
112
112
  parts=[TextPart(content='The capital of France is Paris.')],
113
113
  usage=RequestUsage(input_tokens=56, output_tokens=7),
114
- model_name='claude-3-5-haiku-latest',
114
+ model_name='claude-haiku-4-5',
115
115
  timestamp=datetime.datetime(...),
116
116
  )
117
117
  '''
@@ -1148,10 +1148,10 @@ class OpenAIResponsesModel(Model):
1148
1148
  + list(model_settings.get('openai_builtin_tools', []))
1149
1149
  + self._get_tools(model_request_parameters)
1150
1150
  )
1151
-
1151
+ profile = OpenAIModelProfile.from_profile(self.profile)
1152
1152
  if not tools:
1153
1153
  tool_choice: Literal['none', 'required', 'auto'] | None = None
1154
- elif not model_request_parameters.allow_text_output:
1154
+ elif not model_request_parameters.allow_text_output and profile.openai_supports_tool_choice_required:
1155
1155
  tool_choice = 'required'
1156
1156
  else:
1157
1157
  tool_choice = 'auto'
@@ -1184,7 +1184,6 @@ class OpenAIResponsesModel(Model):
1184
1184
  text = text or {}
1185
1185
  text['verbosity'] = verbosity
1186
1186
 
1187
- profile = OpenAIModelProfile.from_profile(self.profile)
1188
1187
  unsupported_model_settings = profile.openai_unsupported_model_settings
1189
1188
  for setting in unsupported_model_settings:
1190
1189
  model_settings.pop(setting, None)