openai-agents 0.2.1__tar.gz → 0.2.2__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 openai-agents might be problematic. Click here for more details.

Files changed (424) hide show
  1. openai_agents-0.2.2/.github/workflows/update-docs.yml +60 -0
  2. {openai_agents-0.2.1 → openai_agents-0.2.2}/PKG-INFO +1 -1
  3. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/scripts/translate_docs.py +2 -1
  4. {openai_agents-0.2.1 → openai_agents-0.2.2}/pyproject.toml +1 -1
  5. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/runner.py +1 -43
  6. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/session.py +23 -7
  7. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_runner.py +87 -62
  8. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_session.py +115 -1
  9. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_tracing.py +16 -25
  10. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_session_exceptions.py +2 -0
  11. {openai_agents-0.2.1 → openai_agents-0.2.2}/uv.lock +1 -1
  12. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
  15. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/ISSUE_TEMPLATE/question.md +0 -0
  16. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
  17. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/workflows/docs.yml +0 -0
  18. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/workflows/issues.yml +0 -0
  19. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/workflows/publish.yml +0 -0
  20. {openai_agents-0.2.1 → openai_agents-0.2.2}/.github/workflows/tests.yml +0 -0
  21. {openai_agents-0.2.1 → openai_agents-0.2.2}/.gitignore +0 -0
  22. {openai_agents-0.2.1 → openai_agents-0.2.2}/.prettierrc +0 -0
  23. {openai_agents-0.2.1 → openai_agents-0.2.2}/.vscode/launch.json +0 -0
  24. {openai_agents-0.2.1 → openai_agents-0.2.2}/.vscode/settings.json +0 -0
  25. {openai_agents-0.2.1 → openai_agents-0.2.2}/AGENTS.md +0 -0
  26. {openai_agents-0.2.1 → openai_agents-0.2.2}/CLAUDE.md +0 -0
  27. {openai_agents-0.2.1 → openai_agents-0.2.2}/LICENSE +0 -0
  28. {openai_agents-0.2.1 → openai_agents-0.2.2}/Makefile +0 -0
  29. {openai_agents-0.2.1 → openai_agents-0.2.2}/README.md +0 -0
  30. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/agents.md +0 -0
  31. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/assets/images/favicon-platform.svg +0 -0
  32. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/assets/images/graph.png +0 -0
  33. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/assets/images/mcp-tracing.jpg +0 -0
  34. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/assets/images/orchestration.png +0 -0
  35. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/assets/logo.svg +0 -0
  36. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/config.md +0 -0
  37. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/context.md +0 -0
  38. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/examples.md +0 -0
  39. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/guardrails.md +0 -0
  40. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/handoffs.md +0 -0
  41. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/index.md +0 -0
  42. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/agents.md +0 -0
  43. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/config.md +0 -0
  44. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/context.md +0 -0
  45. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/examples.md +0 -0
  46. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/guardrails.md +0 -0
  47. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/handoffs.md +0 -0
  48. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/index.md +0 -0
  49. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/mcp.md +0 -0
  50. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/models/index.md +0 -0
  51. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/models/litellm.md +0 -0
  52. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/multi_agent.md +0 -0
  53. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/quickstart.md +0 -0
  54. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/repl.md +0 -0
  55. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/results.md +0 -0
  56. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/running_agents.md +0 -0
  57. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/streaming.md +0 -0
  58. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/tools.md +0 -0
  59. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/tracing.md +0 -0
  60. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/visualization.md +0 -0
  61. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/voice/pipeline.md +0 -0
  62. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/voice/quickstart.md +0 -0
  63. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ja/voice/tracing.md +0 -0
  64. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/mcp.md +0 -0
  65. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/models/index.md +0 -0
  66. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/models/litellm.md +0 -0
  67. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/multi_agent.md +0 -0
  68. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/quickstart.md +0 -0
  69. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/realtime/guide.md +0 -0
  70. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/realtime/quickstart.md +0 -0
  71. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/agent.md +0 -0
  72. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/agent_output.md +0 -0
  73. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/exceptions.md +0 -0
  74. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/extensions/handoff_filters.md +0 -0
  75. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/extensions/handoff_prompt.md +0 -0
  76. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/extensions/litellm.md +0 -0
  77. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/function_schema.md +0 -0
  78. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/guardrail.md +0 -0
  79. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/handoffs.md +0 -0
  80. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/index.md +0 -0
  81. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/items.md +0 -0
  82. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/lifecycle.md +0 -0
  83. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/mcp/server.md +0 -0
  84. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/mcp/util.md +0 -0
  85. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/memory.md +0 -0
  86. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/model_settings.md +0 -0
  87. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/models/interface.md +0 -0
  88. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/models/openai_chatcompletions.md +0 -0
  89. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/models/openai_responses.md +0 -0
  90. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/realtime/agent.md +0 -0
  91. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/realtime/config.md +0 -0
  92. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/realtime/events.md +0 -0
  93. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/realtime/runner.md +0 -0
  94. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/realtime/session.md +0 -0
  95. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/repl.md +0 -0
  96. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/result.md +0 -0
  97. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/run.md +0 -0
  98. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/run_context.md +0 -0
  99. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/stream_events.md +0 -0
  100. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tool.md +0 -0
  101. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/create.md +0 -0
  102. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/index.md +0 -0
  103. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/processor_interface.md +0 -0
  104. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/processors.md +0 -0
  105. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/scope.md +0 -0
  106. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/setup.md +0 -0
  107. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/span_data.md +0 -0
  108. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/spans.md +0 -0
  109. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/traces.md +0 -0
  110. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/tracing/util.md +0 -0
  111. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/usage.md +0 -0
  112. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/events.md +0 -0
  113. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/exceptions.md +0 -0
  114. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/input.md +0 -0
  115. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/model.md +0 -0
  116. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/models/openai_provider.md +0 -0
  117. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/models/openai_stt.md +0 -0
  118. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/models/openai_tts.md +0 -0
  119. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/pipeline.md +0 -0
  120. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/pipeline_config.md +0 -0
  121. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/result.md +0 -0
  122. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/utils.md +0 -0
  123. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/ref/voice/workflow.md +0 -0
  124. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/release.md +0 -0
  125. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/repl.md +0 -0
  126. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/results.md +0 -0
  127. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/running_agents.md +0 -0
  128. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/sessions.md +0 -0
  129. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/streaming.md +0 -0
  130. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/stylesheets/extra.css +0 -0
  131. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/tools.md +0 -0
  132. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/tracing.md +0 -0
  133. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/visualization.md +0 -0
  134. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/voice/pipeline.md +0 -0
  135. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/voice/quickstart.md +0 -0
  136. {openai_agents-0.2.1 → openai_agents-0.2.2}/docs/voice/tracing.md +0 -0
  137. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/__init__.py +0 -0
  138. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/README.md +0 -0
  139. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/agents_as_tools.py +0 -0
  140. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/deterministic.py +0 -0
  141. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/forcing_tool_use.py +0 -0
  142. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/input_guardrails.py +0 -0
  143. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/llm_as_a_judge.py +0 -0
  144. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/output_guardrails.py +0 -0
  145. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/parallelization.py +0 -0
  146. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/routing.py +0 -0
  147. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/agent_patterns/streaming_guardrails.py +0 -0
  148. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/agent_lifecycle_example.py +0 -0
  149. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/dynamic_system_prompt.py +0 -0
  150. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/hello_world.py +0 -0
  151. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/hello_world_jupyter.ipynb +0 -0
  152. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/lifecycle_example.py +0 -0
  153. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/local_image.py +0 -0
  154. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/media/image_bison.jpg +0 -0
  155. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/non_strict_output_type.py +0 -0
  156. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/previous_response_id.py +0 -0
  157. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/prompt_template.py +0 -0
  158. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/remote_image.py +0 -0
  159. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/session_example.py +0 -0
  160. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/stream_items.py +0 -0
  161. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/stream_text.py +0 -0
  162. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/basic/tools.py +0 -0
  163. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/customer_service/main.py +0 -0
  164. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/README.md +0 -0
  165. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/__init__.py +0 -0
  166. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/__init__.py +0 -0
  167. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/financials_agent.py +0 -0
  168. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/planner_agent.py +0 -0
  169. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/risk_agent.py +0 -0
  170. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/search_agent.py +0 -0
  171. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
  172. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/agents/writer_agent.py +0 -0
  173. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/main.py +0 -0
  174. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/manager.py +0 -0
  175. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/financial_research_agent/printer.py +0 -0
  176. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/handoffs/message_filter.py +0 -0
  177. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/handoffs/message_filter_streaming.py +0 -0
  178. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/hosted_mcp/__init__.py +0 -0
  179. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/hosted_mcp/approvals.py +0 -0
  180. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/hosted_mcp/simple.py +0 -0
  181. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/filesystem_example/README.md +0 -0
  182. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/filesystem_example/main.py +0 -0
  183. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
  184. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
  185. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
  186. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/git_example/README.md +0 -0
  187. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/git_example/main.py +0 -0
  188. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/prompt_server/README.md +0 -0
  189. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/prompt_server/main.py +0 -0
  190. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/prompt_server/server.py +0 -0
  191. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/sse_example/README.md +0 -0
  192. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/sse_example/main.py +0 -0
  193. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/sse_example/server.py +0 -0
  194. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/streamablehttp_example/README.md +0 -0
  195. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/streamablehttp_example/main.py +0 -0
  196. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/mcp/streamablehttp_example/server.py +0 -0
  197. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/README.md +0 -0
  198. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/custom_example_agent.py +0 -0
  199. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/custom_example_global.py +0 -0
  200. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/custom_example_provider.py +0 -0
  201. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/litellm_auto.py +0 -0
  202. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/model_providers/litellm_provider.py +0 -0
  203. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/app/README.md +0 -0
  204. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/app/server.py +0 -0
  205. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/app/static/app.js +0 -0
  206. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/app/static/index.html +0 -0
  207. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/cli/demo.py +0 -0
  208. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/realtime/cli/ui.py +0 -0
  209. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/reasoning_content/__init__.py +0 -0
  210. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/reasoning_content/main.py +0 -0
  211. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/reasoning_content/runner_example.py +0 -0
  212. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/README.md +0 -0
  213. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/__init__.py +0 -0
  214. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/agents/__init__.py +0 -0
  215. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/agents/planner_agent.py +0 -0
  216. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/agents/search_agent.py +0 -0
  217. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/agents/writer_agent.py +0 -0
  218. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/main.py +0 -0
  219. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/manager.py +0 -0
  220. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/printer.py +0 -0
  221. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/sample_outputs/product_recs.md +0 -0
  222. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
  223. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/sample_outputs/vacation.md +0 -0
  224. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/research_bot/sample_outputs/vacation.txt +0 -0
  225. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/tools/code_interpreter.py +0 -0
  226. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/tools/computer_use.py +0 -0
  227. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/tools/file_search.py +0 -0
  228. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/tools/image_generator.py +0 -0
  229. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/tools/web_search.py +0 -0
  230. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/__init__.py +0 -0
  231. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/static/README.md +0 -0
  232. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/static/__init__.py +0 -0
  233. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/static/main.py +0 -0
  234. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/static/util.py +0 -0
  235. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/streamed/README.md +0 -0
  236. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/streamed/__init__.py +0 -0
  237. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/streamed/main.py +0 -0
  238. {openai_agents-0.2.1 → openai_agents-0.2.2}/examples/voice/streamed/my_workflow.py +0 -0
  239. {openai_agents-0.2.1 → openai_agents-0.2.2}/mkdocs.yml +0 -0
  240. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/__init__.py +0 -0
  241. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/_config.py +0 -0
  242. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/_debug.py +0 -0
  243. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/_run_impl.py +0 -0
  244. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/agent.py +0 -0
  245. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/agent_output.py +0 -0
  246. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/computer.py +0 -0
  247. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/exceptions.py +0 -0
  248. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/__init__.py +0 -0
  249. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/handoff_filters.py +0 -0
  250. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/handoff_prompt.py +0 -0
  251. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/models/__init__.py +0 -0
  252. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/models/litellm_model.py +0 -0
  253. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/models/litellm_provider.py +0 -0
  254. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/extensions/visualization.py +0 -0
  255. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/function_schema.py +0 -0
  256. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/guardrail.py +0 -0
  257. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/handoffs.py +0 -0
  258. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/items.py +0 -0
  259. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/lifecycle.py +0 -0
  260. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/logger.py +0 -0
  261. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/mcp/__init__.py +0 -0
  262. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/mcp/server.py +0 -0
  263. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/mcp/util.py +0 -0
  264. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/memory/__init__.py +0 -0
  265. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/memory/session.py +0 -0
  266. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/model_settings.py +0 -0
  267. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/__init__.py +0 -0
  268. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/_openai_shared.py +0 -0
  269. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/chatcmpl_converter.py +0 -0
  270. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/chatcmpl_helpers.py +0 -0
  271. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/chatcmpl_stream_handler.py +0 -0
  272. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/fake_id.py +0 -0
  273. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/interface.py +0 -0
  274. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/multi_provider.py +0 -0
  275. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/openai_chatcompletions.py +0 -0
  276. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/openai_provider.py +0 -0
  277. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/models/openai_responses.py +0 -0
  278. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/prompts.py +0 -0
  279. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/py.typed +0 -0
  280. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/README.md +0 -0
  281. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/__init__.py +0 -0
  282. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/agent.py +0 -0
  283. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/config.py +0 -0
  284. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/events.py +0 -0
  285. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/handoffs.py +0 -0
  286. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/items.py +0 -0
  287. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/model.py +0 -0
  288. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/model_events.py +0 -0
  289. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/model_inputs.py +0 -0
  290. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/realtime/openai_realtime.py +0 -0
  291. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/repl.py +0 -0
  292. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/result.py +0 -0
  293. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/run.py +0 -0
  294. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/run_context.py +0 -0
  295. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/stream_events.py +0 -0
  296. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/strict_schema.py +0 -0
  297. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tool.py +0 -0
  298. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tool_context.py +0 -0
  299. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/__init__.py +0 -0
  300. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/create.py +0 -0
  301. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/logger.py +0 -0
  302. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/processor_interface.py +0 -0
  303. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/processors.py +0 -0
  304. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/provider.py +0 -0
  305. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/scope.py +0 -0
  306. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/setup.py +0 -0
  307. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/span_data.py +0 -0
  308. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/spans.py +0 -0
  309. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/traces.py +0 -0
  310. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/tracing/util.py +0 -0
  311. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/usage.py +0 -0
  312. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/__init__.py +0 -0
  313. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_coro.py +0 -0
  314. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_error_tracing.py +0 -0
  315. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_json.py +0 -0
  316. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_pretty_print.py +0 -0
  317. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_transforms.py +0 -0
  318. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/util/_types.py +0 -0
  319. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/version.py +0 -0
  320. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/__init__.py +0 -0
  321. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/events.py +0 -0
  322. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/exceptions.py +0 -0
  323. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/imports.py +0 -0
  324. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/input.py +0 -0
  325. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/model.py +0 -0
  326. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/models/__init__.py +0 -0
  327. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/models/openai_model_provider.py +0 -0
  328. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/models/openai_stt.py +0 -0
  329. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/models/openai_tts.py +0 -0
  330. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/pipeline.py +0 -0
  331. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/pipeline_config.py +0 -0
  332. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/result.py +0 -0
  333. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/utils.py +0 -0
  334. {openai_agents-0.2.1 → openai_agents-0.2.2}/src/agents/voice/workflow.py +0 -0
  335. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/README.md +0 -0
  336. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/__init__.py +0 -0
  337. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/conftest.py +0 -0
  338. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/fake_model.py +0 -0
  339. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/fastapi/__init__.py +0 -0
  340. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/fastapi/streaming_app.py +0 -0
  341. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/fastapi/test_streaming_context.py +0 -0
  342. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/__init__.py +0 -0
  343. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/conftest.py +0 -0
  344. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/helpers.py +0 -0
  345. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_caching.py +0 -0
  346. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_connect_disconnect.py +0 -0
  347. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_mcp_tracing.py +0 -0
  348. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_mcp_util.py +0 -0
  349. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_prompt_server.py +0 -0
  350. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_runner_calls_mcp.py +0 -0
  351. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_server_errors.py +0 -0
  352. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/mcp/test_tool_filtering.py +0 -0
  353. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/model_settings/test_serialization.py +0 -0
  354. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/__init__.py +0 -0
  355. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/conftest.py +0 -0
  356. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/test_kwargs_functionality.py +0 -0
  357. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/test_litellm_chatcompletions_stream.py +0 -0
  358. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/test_litellm_extra_body.py +0 -0
  359. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/models/test_map.py +0 -0
  360. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/__init__.py +0 -0
  361. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_agent.py +0 -0
  362. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_conversion_helpers.py +0 -0
  363. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_item_parsing.py +0 -0
  364. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_model_events.py +0 -0
  365. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_openai_realtime.py +0 -0
  366. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/realtime/test_realtime_handoffs.py +0 -0
  367. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_config.py +0 -0
  368. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_hooks.py +0 -0
  369. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_prompt.py +0 -0
  370. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_runner.py +0 -0
  371. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_runner_streamed.py +0 -0
  372. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_agent_tracing.py +0 -0
  373. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_cancel_streaming.py +0 -0
  374. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_computer_action.py +0 -0
  375. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_config.py +0 -0
  376. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_doc_parsing.py +0 -0
  377. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_extension_filters.py +0 -0
  378. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_extra_headers.py +0 -0
  379. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_function_schema.py +0 -0
  380. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_function_tool.py +0 -0
  381. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_function_tool_decorator.py +0 -0
  382. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_global_hooks.py +0 -0
  383. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_guardrails.py +0 -0
  384. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_handoff_tool.py +0 -0
  385. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_items_helpers.py +0 -0
  386. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_max_turns.py +0 -0
  387. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_openai_chatcompletions.py +0 -0
  388. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_openai_chatcompletions_converter.py +0 -0
  389. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_openai_chatcompletions_stream.py +0 -0
  390. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_openai_responses_converter.py +0 -0
  391. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_output_tool.py +0 -0
  392. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_pretty_print.py +0 -0
  393. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_reasoning_content.py +0 -0
  394. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_repl.py +0 -0
  395. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_responses.py +0 -0
  396. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_responses_tracing.py +0 -0
  397. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_result_cast.py +0 -0
  398. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_run.py +0 -0
  399. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_run_config.py +0 -0
  400. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_run_error_details.py +0 -0
  401. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_run_step_execution.py +0 -0
  402. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_run_step_processing.py +0 -0
  403. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_session.py +0 -0
  404. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_strict_schema.py +0 -0
  405. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tool_choice_reset.py +0 -0
  406. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tool_converter.py +0 -0
  407. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tool_use_behavior.py +0 -0
  408. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_trace_processor.py +0 -0
  409. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tracing.py +0 -0
  410. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tracing_errors.py +0 -0
  411. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_tracing_errors_streamed.py +0 -0
  412. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_usage.py +0 -0
  413. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/test_visualization.py +0 -0
  414. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/testing_processor.py +0 -0
  415. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/tracing/test_processor_api_key.py +0 -0
  416. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/__init__.py +0 -0
  417. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/conftest.py +0 -0
  418. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/fake_models.py +0 -0
  419. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/helpers.py +0 -0
  420. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/test_input.py +0 -0
  421. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/test_openai_stt.py +0 -0
  422. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/test_openai_tts.py +0 -0
  423. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/test_pipeline.py +0 -0
  424. {openai_agents-0.2.1 → openai_agents-0.2.2}/tests/voice/test_workflow.py +0 -0
@@ -0,0 +1,60 @@
1
+ name: "Update Translated Docs"
2
+
3
+ # This GitHub Actions job automates the process of updating all translated document pages. Please note the following:
4
+ # 1. The translation results may vary each time; some differences in detail are expected.
5
+ # 2. When you add a new page to the left-hand menu, **make sure to manually update mkdocs.yml** to include the new item.
6
+ # 3. If you switch to a different LLM (for example, from o3 to a newer model), be sure to conduct thorough testing before making the switch.
7
+
8
+ on:
9
+ push:
10
+ branches:
11
+ - main
12
+ paths:
13
+ - 'docs/**'
14
+ - mkdocs.yml
15
+
16
+ jobs:
17
+ update-docs:
18
+ if: "!contains(github.event.head_commit.message, 'Update all translated document pages')"
19
+ name: Build and Push Translated Docs
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 20
22
+ env:
23
+ PROD_OPENAI_API_KEY: ${{ secrets.PROD_OPENAI_API_KEY }}
24
+ steps:
25
+ - name: Checkout repository
26
+ uses: actions/checkout@v3
27
+ with:
28
+ fetch-depth: 0
29
+ - name: Setup uv
30
+ uses: astral-sh/setup-uv@v5
31
+ with:
32
+ enable-cache: true
33
+ - name: Install dependencies
34
+ run: make sync
35
+ - name: Build full docs
36
+ run: make build-full-docs
37
+
38
+ - name: Commit changes
39
+ id: commit
40
+ run: |
41
+ git config user.name "github-actions[bot]"
42
+ git config user.email "github-actions[bot]@users.noreply.github.com"
43
+ git add docs/
44
+ if [ -n "$(git status --porcelain)" ]; then
45
+ git commit -m "Update all translated document pages"
46
+ echo "committed=true" >> "$GITHUB_OUTPUT"
47
+ else
48
+ echo "No changes to commit"
49
+ echo "committed=false" >> "$GITHUB_OUTPUT"
50
+ fi
51
+
52
+ - name: Create Pull Request
53
+ if: steps.commit.outputs.committed == 'true'
54
+ uses: peter-evans/create-pull-request@v6
55
+ with:
56
+ commit-message: "Update all translated document pages"
57
+ title: "Update all translated document pages"
58
+ body: "Automated update of translated documentation"
59
+ branch: update-translated-docs-${{ github.run_id }}
60
+ delete-branch: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openai-agents
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: OpenAI Agents SDK
5
5
  Project-URL: Homepage, https://openai.github.io/openai-agents-python/
6
6
  Project-URL: Repository, https://github.com/openai/openai-agents-python
@@ -30,7 +30,8 @@ languages = {
30
30
  }
31
31
 
32
32
  # Initialize OpenAI client
33
- openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
33
+ api_key = os.getenv("PROD_OPENAI_API_KEY") or os.getenv("OPENAI_API_KEY")
34
+ openai_client = OpenAI(api_key=api_key)
34
35
 
35
36
  # Define dictionaries for translation control
36
37
  do_not_translate = [
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openai-agents"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = "OpenAI Agents SDK"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -2,13 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import asyncio
6
-
7
- from ..run_context import RunContextWrapper, TContext
5
+ from ..run_context import TContext
8
6
  from .agent import RealtimeAgent
9
7
  from .config import (
10
8
  RealtimeRunConfig,
11
- RealtimeSessionModelSettings,
12
9
  )
13
10
  from .model import (
14
11
  RealtimeModel,
@@ -67,16 +64,6 @@ class RealtimeRunner:
67
64
  print(event)
68
65
  ```
69
66
  """
70
- model_settings = await self._get_model_settings(
71
- agent=self._starting_agent,
72
- disable_tracing=self._config.get("tracing_disabled", False) if self._config else False,
73
- initial_settings=model_config.get("initial_model_settings") if model_config else None,
74
- overrides=self._config.get("model_settings") if self._config else None,
75
- )
76
-
77
- model_config = model_config.copy() if model_config else {}
78
- model_config["initial_model_settings"] = model_settings
79
-
80
67
  # Create and return the connection
81
68
  session = RealtimeSession(
82
69
  model=self._model,
@@ -87,32 +74,3 @@ class RealtimeRunner:
87
74
  )
88
75
 
89
76
  return session
90
-
91
- async def _get_model_settings(
92
- self,
93
- agent: RealtimeAgent,
94
- disable_tracing: bool,
95
- context: TContext | None = None,
96
- initial_settings: RealtimeSessionModelSettings | None = None,
97
- overrides: RealtimeSessionModelSettings | None = None,
98
- ) -> RealtimeSessionModelSettings:
99
- context_wrapper = RunContextWrapper(context)
100
- model_settings = initial_settings.copy() if initial_settings else {}
101
-
102
- instructions, tools = await asyncio.gather(
103
- agent.get_system_prompt(context_wrapper),
104
- agent.get_all_tools(context_wrapper),
105
- )
106
-
107
- if instructions is not None:
108
- model_settings["instructions"] = instructions
109
- if tools is not None:
110
- model_settings["tools"] = tools
111
-
112
- if overrides:
113
- model_settings.update(overrides)
114
-
115
- if disable_tracing:
116
- model_settings["tracing"] = None
117
-
118
- return model_settings
@@ -114,8 +114,13 @@ class RealtimeSession(RealtimeModelListener):
114
114
  # Add ourselves as a listener
115
115
  self._model.add_listener(self)
116
116
 
117
+ model_config = self._model_config.copy()
118
+ model_config["initial_model_settings"] = await self._get_updated_model_settings_from_agent(
119
+ self._current_agent
120
+ )
121
+
117
122
  # Connect to the model
118
- await self._model.connect(self._model_config)
123
+ await self._model.connect(model_config)
119
124
 
120
125
  # Emit initial history update
121
126
  await self._put_event(
@@ -319,7 +324,9 @@ class RealtimeSession(RealtimeModelListener):
319
324
  self._current_agent = result
320
325
 
321
326
  # Get updated model settings from new agent
322
- updated_settings = await self._get__updated_model_settings(self._current_agent)
327
+ updated_settings = await self._get_updated_model_settings_from_agent(
328
+ self._current_agent
329
+ )
323
330
 
324
331
  # Send handoff event
325
332
  await self._put_event(
@@ -495,19 +502,28 @@ class RealtimeSession(RealtimeModelListener):
495
502
  # Mark as closed
496
503
  self._closed = True
497
504
 
498
- async def _get__updated_model_settings(
499
- self, new_agent: RealtimeAgent
505
+ async def _get_updated_model_settings_from_agent(
506
+ self,
507
+ agent: RealtimeAgent,
500
508
  ) -> RealtimeSessionModelSettings:
501
509
  updated_settings: RealtimeSessionModelSettings = {}
502
510
  instructions, tools, handoffs = await asyncio.gather(
503
- new_agent.get_system_prompt(self._context_wrapper),
504
- new_agent.get_all_tools(self._context_wrapper),
505
- self._get_handoffs(new_agent, self._context_wrapper),
511
+ agent.get_system_prompt(self._context_wrapper),
512
+ agent.get_all_tools(self._context_wrapper),
513
+ self._get_handoffs(agent, self._context_wrapper),
506
514
  )
507
515
  updated_settings["instructions"] = instructions or ""
508
516
  updated_settings["tools"] = tools or []
509
517
  updated_settings["handoffs"] = handoffs or []
510
518
 
519
+ # Override with initial settings
520
+ initial_settings = self._model_config.get("initial_model_settings", {})
521
+ updated_settings.update(initial_settings)
522
+
523
+ disable_tracing = self._run_config.get("tracing_disabled", False)
524
+ if disable_tracing:
525
+ updated_settings["tracing"] = None
526
+
511
527
  return updated_settings
512
528
 
513
529
  @classmethod
@@ -1,18 +1,21 @@
1
1
  from unittest.mock import AsyncMock, Mock, patch
2
2
 
3
3
  import pytest
4
- from inline_snapshot import snapshot
5
4
 
6
5
  from agents.realtime.agent import RealtimeAgent
7
6
  from agents.realtime.config import RealtimeRunConfig, RealtimeSessionModelSettings
8
7
  from agents.realtime.model import RealtimeModel, RealtimeModelConfig
9
8
  from agents.realtime.runner import RealtimeRunner
10
9
  from agents.realtime.session import RealtimeSession
10
+ from agents.tool import function_tool
11
11
 
12
12
 
13
13
  class MockRealtimeModel(RealtimeModel):
14
+ def __init__(self):
15
+ self.connect_args = None
16
+
14
17
  async def connect(self, options=None):
15
- pass
18
+ self.connect_args = options
16
19
 
17
20
  def add_listener(self, listener):
18
21
  pass
@@ -53,7 +56,9 @@ def mock_model():
53
56
 
54
57
 
55
58
  @pytest.mark.asyncio
56
- async def test_run_creates_session_with_no_settings(mock_agent, mock_model):
59
+ async def test_run_creates_session_with_no_settings(
60
+ mock_agent: Mock, mock_model: MockRealtimeModel
61
+ ):
57
62
  """Test that run() creates a session correctly if no settings are provided"""
58
63
  runner = RealtimeRunner(mock_agent, model=mock_model)
59
64
 
@@ -71,22 +76,17 @@ async def test_run_creates_session_with_no_settings(mock_agent, mock_model):
71
76
  assert call_args[1]["agent"] == mock_agent
72
77
  assert call_args[1]["context"] is None
73
78
 
74
- # Verify model_config contains expected settings from agent
79
+ # With no settings provided, model_config should be None
75
80
  model_config = call_args[1]["model_config"]
76
- assert model_config == snapshot(
77
- {
78
- "initial_model_settings": {
79
- "instructions": "Test instructions",
80
- "tools": [{"type": "function", "name": "test_tool"}],
81
- }
82
- }
83
- )
81
+ assert model_config is None
84
82
 
85
83
  assert session == mock_session
86
84
 
87
85
 
88
86
  @pytest.mark.asyncio
89
- async def test_run_creates_session_with_settings_only_in_init(mock_agent, mock_model):
87
+ async def test_run_creates_session_with_settings_only_in_init(
88
+ mock_agent: Mock, mock_model: MockRealtimeModel
89
+ ):
90
90
  """Test that it creates a session with the right settings if they are provided only in init"""
91
91
  config = RealtimeRunConfig(
92
92
  model_settings=RealtimeSessionModelSettings(model_name="gpt-4o-realtime", voice="nova")
@@ -99,28 +99,19 @@ async def test_run_creates_session_with_settings_only_in_init(mock_agent, mock_m
99
99
 
100
100
  _ = await runner.run()
101
101
 
102
- # Verify session was created with config overrides
102
+ # Verify session was created - runner no longer processes settings
103
103
  call_args = mock_session_class.call_args
104
104
  model_config = call_args[1]["model_config"]
105
105
 
106
- # Should have agent settings plus config overrides
107
- assert model_config == snapshot(
108
- {
109
- "initial_model_settings": {
110
- "instructions": "Test instructions",
111
- "tools": [{"type": "function", "name": "test_tool"}],
112
- "model_name": "gpt-4o-realtime",
113
- "voice": "nova",
114
- }
115
- }
116
- )
106
+ # Runner should pass None for model_config when none provided to run()
107
+ assert model_config is None
117
108
 
118
109
 
119
110
  @pytest.mark.asyncio
120
111
  async def test_run_creates_session_with_settings_in_both_init_and_run_overrides(
121
- mock_agent, mock_model
112
+ mock_agent: Mock, mock_model: MockRealtimeModel
122
113
  ):
123
- """Test settings in both init and run() - init should override run()"""
114
+ """Test settings provided in run() parameter are passed through"""
124
115
  init_config = RealtimeRunConfig(
125
116
  model_settings=RealtimeSessionModelSettings(model_name="gpt-4o-realtime", voice="nova")
126
117
  )
@@ -138,26 +129,18 @@ async def test_run_creates_session_with_settings_in_both_init_and_run_overrides(
138
129
 
139
130
  _ = await runner.run(model_config=run_model_config)
140
131
 
141
- # Verify run() settings override init settings
132
+ # Verify run() model_config is passed through as-is
142
133
  call_args = mock_session_class.call_args
143
134
  model_config = call_args[1]["model_config"]
144
135
 
145
- # Should have agent settings, then init config, then run config overrides
146
- assert model_config == snapshot(
147
- {
148
- "initial_model_settings": {
149
- "voice": "nova",
150
- "input_audio_format": "pcm16",
151
- "instructions": "Test instructions",
152
- "tools": [{"type": "function", "name": "test_tool"}],
153
- "model_name": "gpt-4o-realtime",
154
- }
155
- }
156
- )
136
+ # Runner should pass the model_config from run() parameter directly
137
+ assert model_config == run_model_config
157
138
 
158
139
 
159
140
  @pytest.mark.asyncio
160
- async def test_run_creates_session_with_settings_only_in_run(mock_agent, mock_model):
141
+ async def test_run_creates_session_with_settings_only_in_run(
142
+ mock_agent: Mock, mock_model: MockRealtimeModel
143
+ ):
161
144
  """Test settings provided only in run()"""
162
145
  runner = RealtimeRunner(mock_agent, model=mock_model)
163
146
 
@@ -173,26 +156,16 @@ async def test_run_creates_session_with_settings_only_in_run(mock_agent, mock_mo
173
156
 
174
157
  _ = await runner.run(model_config=run_model_config)
175
158
 
176
- # Verify run() settings are applied
159
+ # Verify run() model_config is passed through as-is
177
160
  call_args = mock_session_class.call_args
178
161
  model_config = call_args[1]["model_config"]
179
162
 
180
- # Should have agent settings plus run() settings
181
- assert model_config == snapshot(
182
- {
183
- "initial_model_settings": {
184
- "model_name": "gpt-4o-realtime-preview",
185
- "voice": "shimmer",
186
- "modalities": ["text", "audio"],
187
- "instructions": "Test instructions",
188
- "tools": [{"type": "function", "name": "test_tool"}],
189
- }
190
- }
191
- )
163
+ # Runner should pass the model_config from run() parameter directly
164
+ assert model_config == run_model_config
192
165
 
193
166
 
194
167
  @pytest.mark.asyncio
195
- async def test_run_with_context_parameter(mock_agent, mock_model):
168
+ async def test_run_with_context_parameter(mock_agent: Mock, mock_model: MockRealtimeModel):
196
169
  """Test that context parameter is passed through to session"""
197
170
  runner = RealtimeRunner(mock_agent, model=mock_model)
198
171
  test_context = {"user_id": "test123"}
@@ -208,17 +181,69 @@ async def test_run_with_context_parameter(mock_agent, mock_model):
208
181
 
209
182
 
210
183
  @pytest.mark.asyncio
211
- async def test_get_model_settings_with_none_values(mock_model):
212
- """Test _get_model_settings handles None values from agent properly"""
184
+ async def test_run_with_none_values_from_agent_does_not_crash(mock_model: MockRealtimeModel):
185
+ """Test that runner handles agents with None values without crashing"""
213
186
  agent = Mock(spec=RealtimeAgent)
214
187
  agent.get_system_prompt = AsyncMock(return_value=None)
215
188
  agent.get_all_tools = AsyncMock(return_value=None)
216
189
 
217
190
  runner = RealtimeRunner(agent, model=mock_model)
218
191
 
219
- with patch("agents.realtime.runner.RealtimeSession"):
220
- await runner.run()
192
+ with patch("agents.realtime.runner.RealtimeSession") as mock_session_class:
193
+ mock_session = Mock(spec=RealtimeSession)
194
+ mock_session_class.return_value = mock_session
195
+
196
+ session = await runner.run()
197
+
198
+ # Should not crash and return session
199
+ assert session == mock_session
200
+ # Runner no longer calls agent methods directly - session does that
201
+ agent.get_system_prompt.assert_not_called()
202
+ agent.get_all_tools.assert_not_called()
203
+
204
+
205
+ @pytest.mark.asyncio
206
+ async def test_tool_and_handoffs_are_correct(mock_model: MockRealtimeModel):
207
+ @function_tool
208
+ def tool_one():
209
+ return "result_one"
210
+
211
+ agent_1 = RealtimeAgent(
212
+ name="one",
213
+ instructions="instr_one",
214
+ )
215
+ agent_2 = RealtimeAgent(
216
+ name="two",
217
+ instructions="instr_two",
218
+ tools=[tool_one],
219
+ handoffs=[agent_1],
220
+ )
221
+
222
+ session = RealtimeSession(
223
+ model=mock_model,
224
+ agent=agent_2,
225
+ context=None,
226
+ model_config=None,
227
+ run_config=None,
228
+ )
229
+
230
+ async with session:
231
+ pass
221
232
 
222
- # Should not crash and agent methods should be called
223
- agent.get_system_prompt.assert_called_once()
224
- agent.get_all_tools.assert_called_once()
233
+ # Assert that the model.connect() was called with the correct settings
234
+ connect_args = mock_model.connect_args
235
+ assert connect_args is not None
236
+ assert isinstance(connect_args, dict)
237
+ initial_model_settings = connect_args["initial_model_settings"]
238
+ assert initial_model_settings is not None
239
+ assert isinstance(initial_model_settings, dict)
240
+ assert initial_model_settings["instructions"] == "instr_two"
241
+ assert len(initial_model_settings["tools"]) == 1
242
+ tool = initial_model_settings["tools"][0]
243
+ assert tool.name == "tool_one"
244
+
245
+ handoffs = initial_model_settings["handoffs"]
246
+ assert len(handoffs) == 1
247
+ handoff = handoffs[0]
248
+ assert handoff.tool_name == "transfer_to_one"
249
+ assert handoff.agent_name == "one"
@@ -29,7 +29,7 @@ from agents.realtime.items import (
29
29
  RealtimeItem,
30
30
  UserMessageItem,
31
31
  )
32
- from agents.realtime.model import RealtimeModel
32
+ from agents.realtime.model import RealtimeModel, RealtimeModelConfig
33
33
  from agents.realtime.model_events import (
34
34
  RealtimeModelAudioDoneEvent,
35
35
  RealtimeModelAudioEvent,
@@ -1206,3 +1206,117 @@ class TestGuardrailFunctionality:
1206
1206
  guardrail_events = [e for e in events if isinstance(e, RealtimeGuardrailTripped)]
1207
1207
  assert len(guardrail_events) == 1
1208
1208
  assert len(guardrail_events[0].guardrail_results) == 2
1209
+
1210
+
1211
+ class TestModelSettingsIntegration:
1212
+ """Test suite for model settings integration in RealtimeSession."""
1213
+
1214
+ @pytest.mark.asyncio
1215
+ async def test_session_gets_model_settings_from_agent_during_connection(self):
1216
+ """Test that session properly gets model settings from agent during __aenter__."""
1217
+ # Create mock model that records the config passed to connect()
1218
+ mock_model = Mock(spec=RealtimeModel)
1219
+ mock_model.connect = AsyncMock()
1220
+ mock_model.add_listener = Mock()
1221
+
1222
+ # Create agent with specific settings
1223
+ agent = Mock(spec=RealtimeAgent)
1224
+ agent.get_system_prompt = AsyncMock(return_value="Test agent instructions")
1225
+ agent.get_all_tools = AsyncMock(return_value=[{"type": "function", "name": "test_tool"}])
1226
+ agent.handoffs = []
1227
+
1228
+ session = RealtimeSession(mock_model, agent, None)
1229
+
1230
+ # Connect the session
1231
+ await session.__aenter__()
1232
+
1233
+ # Verify model.connect was called with settings from agent
1234
+ mock_model.connect.assert_called_once()
1235
+ connect_config = mock_model.connect.call_args[0][0]
1236
+
1237
+ initial_settings = connect_config["initial_model_settings"]
1238
+ assert initial_settings["instructions"] == "Test agent instructions"
1239
+ assert initial_settings["tools"] == [{"type": "function", "name": "test_tool"}]
1240
+ assert initial_settings["handoffs"] == []
1241
+
1242
+ await session.__aexit__(None, None, None)
1243
+
1244
+ @pytest.mark.asyncio
1245
+ async def test_model_config_overrides_agent_settings(self):
1246
+ """Test that initial_model_settings from model_config override agent settings."""
1247
+ mock_model = Mock(spec=RealtimeModel)
1248
+ mock_model.connect = AsyncMock()
1249
+ mock_model.add_listener = Mock()
1250
+
1251
+ agent = Mock(spec=RealtimeAgent)
1252
+ agent.get_system_prompt = AsyncMock(return_value="Agent instructions")
1253
+ agent.get_all_tools = AsyncMock(return_value=[{"type": "function", "name": "agent_tool"}])
1254
+ agent.handoffs = []
1255
+
1256
+ # Provide model config with overrides
1257
+ model_config: RealtimeModelConfig = {
1258
+ "initial_model_settings": {
1259
+ "instructions": "Override instructions",
1260
+ "voice": "nova",
1261
+ "model_name": "gpt-4o-realtime",
1262
+ }
1263
+ }
1264
+
1265
+ session = RealtimeSession(mock_model, agent, None, model_config=model_config)
1266
+
1267
+ await session.__aenter__()
1268
+
1269
+ # Verify overrides were applied
1270
+ connect_config = mock_model.connect.call_args[0][0]
1271
+ initial_settings = connect_config["initial_model_settings"]
1272
+
1273
+ # Should have override values
1274
+ assert initial_settings["instructions"] == "Override instructions"
1275
+ assert initial_settings["voice"] == "nova"
1276
+ assert initial_settings["model_name"] == "gpt-4o-realtime"
1277
+ # Should still have agent tools since not overridden
1278
+ assert initial_settings["tools"] == [{"type": "function", "name": "agent_tool"}]
1279
+
1280
+ await session.__aexit__(None, None, None)
1281
+
1282
+ @pytest.mark.asyncio
1283
+ async def test_handoffs_are_included_in_model_settings(self):
1284
+ """Test that handoffs from agent are properly processed into model settings."""
1285
+ mock_model = Mock(spec=RealtimeModel)
1286
+ mock_model.connect = AsyncMock()
1287
+ mock_model.add_listener = Mock()
1288
+
1289
+ # Create agent with handoffs
1290
+ agent = Mock(spec=RealtimeAgent)
1291
+ agent.get_system_prompt = AsyncMock(return_value="Agent with handoffs")
1292
+ agent.get_all_tools = AsyncMock(return_value=[])
1293
+
1294
+ # Create a mock handoff
1295
+ handoff_agent = Mock(spec=RealtimeAgent)
1296
+ handoff_agent.name = "handoff_target"
1297
+
1298
+ mock_handoff = Mock(spec=Handoff)
1299
+ mock_handoff.tool_name = "transfer_to_specialist"
1300
+ mock_handoff.is_enabled = True
1301
+
1302
+ agent.handoffs = [handoff_agent] # Agent handoff
1303
+
1304
+ # Mock the _get_handoffs method since it's complex
1305
+ with pytest.MonkeyPatch().context() as m:
1306
+
1307
+ async def mock_get_handoffs(cls, agent, context_wrapper):
1308
+ return [mock_handoff]
1309
+
1310
+ m.setattr("agents.realtime.session.RealtimeSession._get_handoffs", mock_get_handoffs)
1311
+
1312
+ session = RealtimeSession(mock_model, agent, None)
1313
+
1314
+ await session.__aenter__()
1315
+
1316
+ # Verify handoffs were included
1317
+ connect_config = mock_model.connect.call_args[0][0]
1318
+ initial_settings = connect_config["initial_model_settings"]
1319
+
1320
+ assert initial_settings["handoffs"] == [mock_handoff]
1321
+
1322
+ await session.__aexit__(None, None, None)
@@ -1,8 +1,11 @@
1
- from unittest.mock import AsyncMock, patch
1
+ from unittest.mock import AsyncMock, Mock, patch
2
2
 
3
3
  import pytest
4
4
 
5
+ from agents.realtime.agent import RealtimeAgent
6
+ from agents.realtime.model import RealtimeModel
5
7
  from agents.realtime.openai_realtime import OpenAIRealtimeWebSocketModel
8
+ from agents.realtime.session import RealtimeSession
6
9
 
7
10
 
8
11
  class TestRealtimeTracingIntegration:
@@ -219,36 +222,24 @@ class TestRealtimeTracingIntegration:
219
222
  @pytest.mark.asyncio
220
223
  async def test_tracing_disabled_prevents_tracing(self, mock_websocket):
221
224
  """Test that tracing_disabled=True prevents tracing configuration."""
222
- from agents.realtime.agent import RealtimeAgent
223
- from agents.realtime.runner import RealtimeRunner
224
225
 
225
- # Create a test agent and runner with tracing disabled
226
+ # Create a test agent and mock model
226
227
  agent = RealtimeAgent(name="test_agent", instructions="test")
228
+ agent.handoffs = []
227
229
 
228
- runner = RealtimeRunner(starting_agent=agent, config={"tracing_disabled": True})
230
+ mock_model = Mock(spec=RealtimeModel)
229
231
 
230
- # Test the _get_model_settings method directly since that's where the logic is
231
- model_settings = await runner._get_model_settings(
232
+ # Create session with tracing disabled
233
+ session = RealtimeSession(
234
+ model=mock_model,
232
235
  agent=agent,
233
- disable_tracing=True, # This should come from config["tracing_disabled"]
234
- initial_settings=None,
235
- overrides=None,
236
+ context=None,
237
+ model_config=None,
238
+ run_config={"tracing_disabled": True},
236
239
  )
237
240
 
241
+ # Test the _get_updated_model_settings_from_agent method directly
242
+ model_settings = await session._get_updated_model_settings_from_agent(agent)
243
+
238
244
  # When tracing is disabled, model settings should have tracing=None
239
245
  assert model_settings["tracing"] is None
240
-
241
- # Also test that the runner passes disable_tracing=True correctly
242
- with patch.object(runner, "_get_model_settings") as mock_get_settings:
243
- mock_get_settings.return_value = {"tracing": None}
244
-
245
- with patch("agents.realtime.session.RealtimeSession") as mock_session_class:
246
- mock_session = AsyncMock()
247
- mock_session_class.return_value = mock_session
248
-
249
- await runner.run()
250
-
251
- # Verify that _get_model_settings was called with disable_tracing=True
252
- mock_get_settings.assert_called_once_with(
253
- agent=agent, disable_tracing=True, initial_settings=None, overrides=None
254
- )
@@ -90,6 +90,8 @@ def fake_agent():
90
90
  """Create a fake agent for testing."""
91
91
  agent = Mock()
92
92
  agent.get_all_tools = AsyncMock(return_value=[])
93
+ agent.get_system_prompt = AsyncMock(return_value="test instructions")
94
+ agent.handoffs = []
93
95
  return agent
94
96
 
95
97
 
@@ -1482,7 +1482,7 @@ wheels = [
1482
1482
 
1483
1483
  [[package]]
1484
1484
  name = "openai-agents"
1485
- version = "0.2.1"
1485
+ version = "0.2.2"
1486
1486
  source = { editable = "." }
1487
1487
  dependencies = [
1488
1488
  { name = "griffe" },