openai 0.98.0 → 0.100.0

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.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +1 -1
  4. data/bedrock.md +17 -1
  5. data/lib/openai/client.rb +9 -0
  6. data/lib/openai/helpers/agents/session_stream.rb +11 -36
  7. data/lib/openai/helpers/agents/tools.rb +34 -4
  8. data/lib/openai/helpers/beta/agents/creation_stream.rb +26 -0
  9. data/lib/openai/helpers/beta/agents/function_tool.rb +11 -4
  10. data/lib/openai/helpers/beta/agents/tool_dispatcher.rb +74 -0
  11. data/lib/openai/helpers/beta/agents/tool_error.rb +28 -0
  12. data/lib/openai/models/admin/organization/usage_audio_speeches_response.rb +140 -5
  13. data/lib/openai/models/admin/organization/usage_audio_transcriptions_response.rb +140 -5
  14. data/lib/openai/models/admin/organization/usage_code_interpreter_sessions_response.rb +140 -5
  15. data/lib/openai/models/admin/organization/usage_completions_params.rb +9 -4
  16. data/lib/openai/models/admin/organization/usage_completions_response.rb +140 -5
  17. data/lib/openai/models/admin/organization/usage_costs_params.rb +16 -4
  18. data/lib/openai/models/admin/organization/usage_costs_response.rb +140 -5
  19. data/lib/openai/models/admin/organization/usage_embeddings_response.rb +140 -5
  20. data/lib/openai/models/admin/organization/usage_file_search_calls_response.rb +140 -5
  21. data/lib/openai/models/admin/organization/usage_images_response.rb +140 -5
  22. data/lib/openai/models/admin/organization/usage_moderations_response.rb +140 -5
  23. data/lib/openai/models/admin/organization/usage_vector_stores_response.rb +140 -5
  24. data/lib/openai/models/admin/organization/usage_web_search_calls_params.rb +9 -4
  25. data/lib/openai/models/admin/organization/usage_web_search_calls_response.rb +140 -5
  26. data/lib/openai/models/all_models.rb +42 -0
  27. data/lib/openai/models/audio/speech_create_params.rb +6 -0
  28. data/lib/openai/models/audio/voice.rb +75 -0
  29. data/lib/openai/models/audio/voice_create_params.rb +217 -0
  30. data/lib/openai/models/beta/agent_create_params.rb +0 -3
  31. data/lib/openai/models/beta/agent_update_params.rb +0 -3
  32. data/lib/openai/models/beta/agents/environments/template_create_params.rb +6 -6
  33. data/lib/openai/models/beta/agents/environments/template_update_params.rb +3 -6
  34. data/lib/openai/models/beta/agents/session_create_params.rb +0 -3
  35. data/lib/openai/models/beta/agents/session_update_params.rb +0 -3
  36. data/lib/openai/models/beta/agents/sessions/turns/item_list_params.rb +79 -0
  37. data/lib/openai/models/beta/beta_response.rb +220 -0
  38. data/lib/openai/models/beta/beta_response_computer_tool_call_output_item.rb +2 -2
  39. data/lib/openai/models/beta/beta_response_error.rb +12 -1
  40. data/lib/openai/models/beta/beta_responses_client_event.rb +220 -0
  41. data/lib/openai/models/beta/beta_responses_server_event.rb +12 -1
  42. data/lib/openai/models/beta/beta_tool.rb +15 -18
  43. data/lib/openai/models/beta/environment_param.rb +6 -6
  44. data/lib/openai/models/beta/response_compact_params.rb +220 -0
  45. data/lib/openai/models/beta/response_create_params.rb +220 -0
  46. data/lib/openai/models/beta/session_turn_error.rb +9 -0
  47. data/lib/openai/models/chat/chat_completion_audio_param.rb +6 -3
  48. data/lib/openai/models/chat/chat_completion_chunk.rb +85 -18
  49. data/lib/openai/models/chat_model.rb +178 -0
  50. data/lib/openai/models/error_object.rb +12 -1
  51. data/lib/openai/models/eval_create_params.rb +1 -1
  52. data/lib/openai/models/eval_create_response.rb +1 -1
  53. data/lib/openai/models/eval_list_response.rb +1 -1
  54. data/lib/openai/models/eval_retrieve_response.rb +1 -1
  55. data/lib/openai/models/eval_update_response.rb +1 -1
  56. data/lib/openai/models/fine_tuning/job_list_params.rb +14 -4
  57. data/lib/openai/models/graders/score_model_grader.rb +2 -2
  58. data/lib/openai/models/image.rb +14 -14
  59. data/lib/openai/models/image_create_variation_params.rb +7 -7
  60. data/lib/openai/models/image_edit_params.rb +88 -96
  61. data/lib/openai/models/image_generate_params.rb +51 -62
  62. data/lib/openai/models/image_model.rb +5 -3
  63. data/lib/openai/models/realtime/realtime_audio_config_output.rb +9 -6
  64. data/lib/openai/models/realtime/realtime_client_event.rb +9 -0
  65. data/lib/openai/models/realtime/realtime_response_create_audio_output.rb +9 -6
  66. data/lib/openai/models/realtime/session_update_event.rb +16 -0
  67. data/lib/openai/models/responses/response_compact_params.rb +220 -0
  68. data/lib/openai/models/responses/response_computer_tool_call_output_item.rb +2 -2
  69. data/lib/openai/models/responses/response_error.rb +12 -1
  70. data/lib/openai/models/responses/responses_server_event.rb +12 -1
  71. data/lib/openai/models/responses/tool.rb +15 -18
  72. data/lib/openai/models/responses_model.rb +42 -0
  73. data/lib/openai/models/video_create_error.rb +12 -1
  74. data/lib/openai/models/webhooks/agent_session_action_required_webhook_event.rb +109 -0
  75. data/lib/openai/models/webhooks/agent_session_created_webhook_event.rb +106 -0
  76. data/lib/openai/models/webhooks/agent_session_failed_webhook_event.rb +86 -0
  77. data/lib/openai/models/webhooks/agent_session_idle_webhook_event.rb +86 -0
  78. data/lib/openai/models/webhooks/agent_session_in_progress_webhook_event.rb +86 -0
  79. data/lib/openai/models/webhooks/unwrap_webhook_event.rb +18 -2
  80. data/lib/openai/models/webhooks/webhook_create_params.rb +5 -0
  81. data/lib/openai/models/webhooks/webhook_test_params.rb +5 -0
  82. data/lib/openai/models/webhooks/webhook_update_params.rb +5 -0
  83. data/lib/openai/providers/bedrock.rb +20 -1
  84. data/lib/openai/resources/admin/organization/usage.rb +15 -6
  85. data/lib/openai/resources/audio/speech.rb +2 -0
  86. data/lib/openai/resources/audio/voices.rb +53 -0
  87. data/lib/openai/resources/audio.rb +5 -0
  88. data/lib/openai/resources/beta/agents/environments/templates.rb +3 -4
  89. data/lib/openai/resources/beta/agents/sessions/turns/items.rb +68 -0
  90. data/lib/openai/resources/beta/agents/sessions/turns.rb +4 -0
  91. data/lib/openai/resources/beta/agents/sessions.rb +22 -2
  92. data/lib/openai/resources/fine_tuning/jobs.rb +7 -2
  93. data/lib/openai/resources/images.rb +79 -109
  94. data/lib/openai/resources/webhooks.rb +1 -1
  95. data/lib/openai/version.rb +1 -1
  96. data/lib/openai.rb +10 -0
  97. data/rbi/openai/helpers/agents.rbi +2 -0
  98. data/rbi/openai/helpers/beta/agents/function_tool.rbi +8 -3
  99. data/rbi/openai/helpers/beta/agents/tool_error.rbi +19 -0
  100. data/rbi/openai/helpers/beta/agents.rbi +12 -0
  101. data/rbi/openai/models/admin/organization/usage_audio_speeches_response.rbi +213 -3
  102. data/rbi/openai/models/admin/organization/usage_audio_transcriptions_response.rbi +213 -3
  103. data/rbi/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbi +213 -3
  104. data/rbi/openai/models/admin/organization/usage_completions_params.rbi +9 -4
  105. data/rbi/openai/models/admin/organization/usage_completions_response.rbi +213 -3
  106. data/rbi/openai/models/admin/organization/usage_costs_params.rbi +16 -4
  107. data/rbi/openai/models/admin/organization/usage_costs_response.rbi +213 -3
  108. data/rbi/openai/models/admin/organization/usage_embeddings_response.rbi +213 -3
  109. data/rbi/openai/models/admin/organization/usage_file_search_calls_response.rbi +213 -3
  110. data/rbi/openai/models/admin/organization/usage_images_response.rbi +213 -3
  111. data/rbi/openai/models/admin/organization/usage_moderations_response.rbi +213 -3
  112. data/rbi/openai/models/admin/organization/usage_vector_stores_response.rbi +213 -3
  113. data/rbi/openai/models/admin/organization/usage_web_search_calls_params.rbi +12 -4
  114. data/rbi/openai/models/admin/organization/usage_web_search_calls_response.rbi +213 -3
  115. data/rbi/openai/models/audio/speech_create_params.rbi +6 -0
  116. data/rbi/openai/models/audio/voice.rbi +111 -0
  117. data/rbi/openai/models/audio/voice_create_params.rbi +321 -0
  118. data/rbi/openai/models/beta/agent_create_params.rbi +0 -3
  119. data/rbi/openai/models/beta/agent_update_params.rbi +0 -3
  120. data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +6 -6
  121. data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +3 -6
  122. data/rbi/openai/models/beta/agents/session_create_params.rbi +0 -3
  123. data/rbi/openai/models/beta/agents/session_update_params.rbi +0 -3
  124. data/rbi/openai/models/beta/agents/sessions/turns/item_list_params.rbi +139 -0
  125. data/rbi/openai/models/beta/beta_response_computer_tool_call_output_item.rbi +2 -2
  126. data/rbi/openai/models/beta/beta_response_error.rbi +12 -0
  127. data/rbi/openai/models/beta/beta_responses_server_event.rbi +12 -0
  128. data/rbi/openai/models/beta/beta_tool.rbi +15 -18
  129. data/rbi/openai/models/beta/environment_param.rbi +6 -6
  130. data/rbi/openai/models/beta/session_turn_error.rbi +18 -0
  131. data/rbi/openai/models/chat/chat_completion_audio_param.rbi +6 -3
  132. data/rbi/openai/models/chat/chat_completion_chunk.rbi +123 -17
  133. data/rbi/openai/models/error_object.rbi +12 -0
  134. data/rbi/openai/models/eval_create_params.rbi +1 -1
  135. data/rbi/openai/models/eval_create_response.rbi +1 -1
  136. data/rbi/openai/models/eval_list_response.rbi +1 -1
  137. data/rbi/openai/models/eval_retrieve_response.rbi +1 -1
  138. data/rbi/openai/models/eval_update_response.rbi +1 -1
  139. data/rbi/openai/models/fine_tuning/job_list_params.rbi +14 -4
  140. data/rbi/openai/models/graders/score_model_grader.rbi +2 -2
  141. data/rbi/openai/models/image.rbi +14 -14
  142. data/rbi/openai/models/image_create_variation_params.rbi +6 -6
  143. data/rbi/openai/models/image_edit_params.rbi +73 -91
  144. data/rbi/openai/models/image_generate_params.rbi +30 -61
  145. data/rbi/openai/models/image_model.rbi +3 -3
  146. data/rbi/openai/models/realtime/realtime_audio_config_output.rbi +9 -6
  147. data/rbi/openai/models/realtime/realtime_response_create_audio_output.rbi +9 -6
  148. data/rbi/openai/models/realtime/session_update_event.rbi +16 -0
  149. data/rbi/openai/models/responses/response_computer_tool_call_output_item.rbi +2 -2
  150. data/rbi/openai/models/responses/response_error.rbi +12 -0
  151. data/rbi/openai/models/responses/responses_server_event.rbi +12 -0
  152. data/rbi/openai/models/responses/tool.rbi +15 -18
  153. data/rbi/openai/models/video_create_error.rbi +12 -0
  154. data/rbi/openai/models/webhooks/agent_session_action_required_webhook_event.rbi +222 -0
  155. data/rbi/openai/models/webhooks/agent_session_created_webhook_event.rbi +202 -0
  156. data/rbi/openai/models/webhooks/agent_session_failed_webhook_event.rbi +151 -0
  157. data/rbi/openai/models/webhooks/agent_session_idle_webhook_event.rbi +151 -0
  158. data/rbi/openai/models/webhooks/agent_session_in_progress_webhook_event.rbi +151 -0
  159. data/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +7 -1
  160. data/rbi/openai/models/webhooks/webhook_create_params.rbi +20 -0
  161. data/rbi/openai/models/webhooks/webhook_test_params.rbi +20 -0
  162. data/rbi/openai/models/webhooks/webhook_update_params.rbi +20 -0
  163. data/rbi/openai/resources/admin/organization/usage.rbi +15 -6
  164. data/rbi/openai/resources/audio/speech.rbi +2 -0
  165. data/rbi/openai/resources/audio/voices.rbi +49 -0
  166. data/rbi/openai/resources/audio.rbi +4 -0
  167. data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -4
  168. data/rbi/openai/resources/beta/agents/sessions/turns/items.rbi +62 -0
  169. data/rbi/openai/resources/beta/agents/sessions/turns.rbi +3 -0
  170. data/rbi/openai/resources/beta/agents/sessions.rbi +2 -0
  171. data/rbi/openai/resources/fine_tuning/jobs.rbi +7 -2
  172. data/rbi/openai/resources/images.rbi +77 -109
  173. data/rbi/openai/resources/webhooks.rbi +5 -0
  174. data/sig/openai/helpers/agents.rbs +3 -0
  175. data/sig/openai/helpers/beta/agents/function_tool.rbs +5 -2
  176. data/sig/openai/helpers/beta/agents/tool_error.rbs +17 -0
  177. data/sig/openai/helpers/beta/agents.rbs +5 -0
  178. data/sig/openai/models/admin/organization/usage_audio_speeches_response.rbs +107 -5
  179. data/sig/openai/models/admin/organization/usage_audio_transcriptions_response.rbs +107 -5
  180. data/sig/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbs +107 -5
  181. data/sig/openai/models/admin/organization/usage_completions_params.rbs +14 -6
  182. data/sig/openai/models/admin/organization/usage_completions_response.rbs +107 -5
  183. data/sig/openai/models/admin/organization/usage_costs_params.rbs +25 -7
  184. data/sig/openai/models/admin/organization/usage_costs_response.rbs +107 -5
  185. data/sig/openai/models/admin/organization/usage_embeddings_response.rbs +107 -5
  186. data/sig/openai/models/admin/organization/usage_file_search_calls_response.rbs +107 -5
  187. data/sig/openai/models/admin/organization/usage_images_response.rbs +107 -5
  188. data/sig/openai/models/admin/organization/usage_moderations_response.rbs +107 -5
  189. data/sig/openai/models/admin/organization/usage_vector_stores_response.rbs +107 -5
  190. data/sig/openai/models/admin/organization/usage_web_search_calls_params.rbs +19 -7
  191. data/sig/openai/models/admin/organization/usage_web_search_calls_response.rbs +107 -5
  192. data/sig/openai/models/audio/speech_create_params.rbs +4 -0
  193. data/sig/openai/models/audio/voice.rbs +70 -0
  194. data/sig/openai/models/audio/voice_create_params.rbs +203 -0
  195. data/sig/openai/models/beta/agent_create_params.rbs +1 -5
  196. data/sig/openai/models/beta/agent_update_params.rbs +1 -5
  197. data/sig/openai/models/beta/agents/environments/template_create_params.rbs +4 -4
  198. data/sig/openai/models/beta/agents/environments/template_update_params.rbs +2 -4
  199. data/sig/openai/models/beta/agents/session_create_params.rbs +1 -5
  200. data/sig/openai/models/beta/agents/session_update_params.rbs +1 -5
  201. data/sig/openai/models/beta/agents/sessions/turns/item_list_params.rbs +91 -0
  202. data/sig/openai/models/beta/beta_response_computer_tool_call_output_item.rbs +2 -2
  203. data/sig/openai/models/beta/beta_response_error.rbs +10 -0
  204. data/sig/openai/models/beta/beta_responses_server_event.rbs +10 -0
  205. data/sig/openai/models/beta/beta_tool.rbs +11 -15
  206. data/sig/openai/models/beta/environment_param.rbs +4 -4
  207. data/sig/openai/models/beta/session_turn_error.rbs +12 -0
  208. data/sig/openai/models/chat/chat_completion_audio_param.rbs +4 -2
  209. data/sig/openai/models/chat/chat_completion_chunk.rbs +96 -12
  210. data/sig/openai/models/error_object.rbs +10 -0
  211. data/sig/openai/models/eval_create_params.rbs +1 -1
  212. data/sig/openai/models/eval_create_response.rbs +1 -1
  213. data/sig/openai/models/eval_list_response.rbs +1 -1
  214. data/sig/openai/models/eval_retrieve_response.rbs +1 -1
  215. data/sig/openai/models/eval_update_response.rbs +1 -1
  216. data/sig/openai/models/fine_tuning/job_list_params.rbs +14 -4
  217. data/sig/openai/models/graders/score_model_grader.rbs +3 -3
  218. data/sig/openai/models/image.rbs +21 -21
  219. data/sig/openai/models/image_create_variation_params.rbs +4 -4
  220. data/sig/openai/models/image_edit_params.rbs +54 -66
  221. data/sig/openai/models/image_generate_params.rbs +23 -45
  222. data/sig/openai/models/image_model.rbs +6 -6
  223. data/sig/openai/models/realtime/realtime_audio_config_output.rbs +9 -6
  224. data/sig/openai/models/realtime/realtime_response_create_audio_output.rbs +9 -6
  225. data/sig/openai/models/responses/response_computer_tool_call_output_item.rbs +2 -2
  226. data/sig/openai/models/responses/response_error.rbs +10 -0
  227. data/sig/openai/models/responses/responses_server_event.rbs +10 -0
  228. data/sig/openai/models/responses/tool.rbs +11 -15
  229. data/sig/openai/models/video_create_error.rbs +10 -0
  230. data/sig/openai/models/webhooks/agent_session_action_required_webhook_event.rbs +114 -0
  231. data/sig/openai/models/webhooks/agent_session_created_webhook_event.rbs +115 -0
  232. data/sig/openai/models/webhooks/agent_session_failed_webhook_event.rbs +89 -0
  233. data/sig/openai/models/webhooks/agent_session_idle_webhook_event.rbs +89 -0
  234. data/sig/openai/models/webhooks/agent_session_in_progress_webhook_event.rbs +89 -0
  235. data/sig/openai/models/webhooks/unwrap_webhook_event.rbs +6 -1
  236. data/sig/openai/models/webhooks/webhook_create_params.rbs +10 -0
  237. data/sig/openai/models/webhooks/webhook_test_params.rbs +10 -0
  238. data/sig/openai/models/webhooks/webhook_update_params.rbs +10 -0
  239. data/sig/openai/resources/audio/voices.rbs +14 -0
  240. data/sig/openai/resources/audio.rbs +2 -0
  241. data/sig/openai/resources/beta/agents/sessions/turns/items.rbs +24 -0
  242. data/sig/openai/resources/beta/agents/sessions/turns.rbs +2 -0
  243. data/sig/openai/resources/beta/agents/sessions.rbs +1 -0
  244. data/sig/openai/resources/webhooks.rbs +6 -1
  245. metadata +35 -1
@@ -90,10 +90,29 @@ module OpenAI
90
90
  OpenAI::Internal::Provider::Runtime.new(
91
91
  name: name,
92
92
  base_url: base_url,
93
- prepare_request: auth.method(:prepare_request),
93
+ prepare_request: lambda do |request|
94
+ url = request.fetch(:url)
95
+ # AWS documents a separate inference path for this exact Mantle model.
96
+ if @base_url.nil? && @endpoint == :mantle && sol_inference_request?(request)
97
+ url = url.dup
98
+ url.path = "/openai#{url.path}"
99
+ request = request.merge(url: url)
100
+ end
101
+
102
+ auth.prepare_request(request)
103
+ end,
94
104
  authentication_headers: AUTH_HEADERS
95
105
  )
96
106
  end
107
+
108
+ private def sol_inference_request?(request)
109
+ unless request[:method] == :post &&
110
+ %w[/v1/responses /v1/chat/completions].include?(request.fetch(:url).path)
111
+ return false
112
+ end
113
+
114
+ request[:provider_request_model] == "openai.gpt-6.1-sol"
115
+ end
97
116
  end
98
117
 
99
118
  class BearerAuth
@@ -196,8 +196,10 @@ module OpenAI
196
196
  #
197
197
  # @param group_by [Array<Symbol, OpenAI::Models::Admin::Organization::UsageCompletionsParams::GroupBy>]
198
198
  # Group the usage data by the specified fields. Support fields include
199
- # `project_id`, `user_id`, `api_key_id`, `model`, `batch`, `service_tier` or any
200
- # combination of them.
199
+ # `project_id`, `user_id`, `api_key_id`, `model`, `batch`, `service_tier`,
200
+ # `api_source` or any combination of them. When grouped by `api_source`, results
201
+ # use `agents_api` for attributed Agents API activity and `unlabeled` for all
202
+ # other activity. Without source grouping, `api_source` is null.
201
203
  #
202
204
  # @param limit [Integer]
203
205
  # Specifies the number of buckets to return.
@@ -255,8 +257,13 @@ module OpenAI
255
257
  # End time (Unix seconds) of the query time range, exclusive.
256
258
  #
257
259
  # @param group_by [Array<Symbol, OpenAI::Models::Admin::Organization::UsageCostsParams::GroupBy>]
258
- # Group the costs by the specified fields. Support fields include `project_id`,
259
- # `line_item`, `api_key_id` and any combination of them.
260
+ # Group the costs by the specified fields. Supported fields include `project_id`,
261
+ # `user_id`, `line_item`, `api_key_id`, and `api_source`. Support for combining
262
+ # `user_id` with `project_id` grouping or the `project_ids` filter depends on the
263
+ # organization and requested time range. Unsupported combinations return HTTP 400.
264
+ # When grouped by `api_source`, results use `agents_api` for attributed Agents API
265
+ # activity and `unlabeled` for all other activity. Without source grouping,
266
+ # `api_source` is null.
260
267
  #
261
268
  # @param limit [Integer]
262
269
  # A limit on the number of buckets to be returned. Limit can range between 1 and
@@ -609,8 +616,10 @@ module OpenAI
609
616
  #
610
617
  # @param group_by [Array<Symbol, OpenAI::Models::Admin::Organization::UsageWebSearchCallsParams::GroupBy>]
611
618
  # Group the usage data by the specified fields. Support fields include
612
- # `project_id`, `user_id`, `api_key_id`, `model`, `context_level` or any
613
- # combination of them.
619
+ # `project_id`, `user_id`, `api_key_id`, `model`, `context_level`, `api_source` or
620
+ # any combination of them. When grouped by `api_source`, results use `agents_api`
621
+ # for attributed Agents API activity and `unlabeled` for all other activity.
622
+ # Without source grouping, `api_source` is null.
614
623
  #
615
624
  # @param limit [Integer]
616
625
  # Specifies the number of buckets to return.
@@ -26,6 +26,8 @@ module OpenAI
26
26
  # object with an `id`, for example `{ "id": "voice_1234" }`. Previews of the
27
27
  # voices are available in the
28
28
  # [Text to speech guide](https://developers.openai.com/api/docs/guides/text-to-speech#voice-options).
29
+ # Custom voices must be created from audio samples. Voices created from text
30
+ # prompts are supported only in Live.
29
31
  #
30
32
  # @param instructions [String]
31
33
  # Control the voice of your generated audio with additional instructions. Does not
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Audio
6
+ # Turn audio into text or text into audio.
7
+ class Voices
8
+ # Creates a voice from a text prompt or from a consent recording and an audio
9
+ # sample.
10
+ #
11
+ # For prompt-based creation, send `type: "prompt"` with a `name` and `prompt` as
12
+ # JSON or multipart form data. For creation from an audio sample, send
13
+ # `type: "audio_sample"` with a `name`, `audio_sample`, and `consent` recording ID
14
+ # as multipart form data. The type defaults to `audio_sample` when omitted.
15
+ #
16
+ # Returns the saved voice's metadata. Voices created from text prompts are
17
+ # supported only in Live, not in Realtime or the speech endpoint. The response
18
+ # does not include preview audio.
19
+ #
20
+ # @overload create(body:, request_options: {})
21
+ #
22
+ # @param body [OpenAI::Models::Audio::VoiceCreateParams::Body::AudioSample, OpenAI::Models::Audio::VoiceCreateParams::Body::Prompt]
23
+ # Creates a voice from a consent recording and an audio sample. Requires
24
+ # multipart/form-data.
25
+ #
26
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
27
+ #
28
+ # @return [OpenAI::Models::Audio::Voice]
29
+ #
30
+ # @see OpenAI::Models::Audio::VoiceCreateParams
31
+ def create(params)
32
+ parsed, options = OpenAI::Audio::VoiceCreateParams.dump_request(params)
33
+ @client.request(
34
+ method: :post,
35
+ path: "audio/voices",
36
+ headers: {"content-type" => "multipart/form-data"},
37
+ body: parsed[:body],
38
+ model: OpenAI::Audio::Voice,
39
+ security: {bearer_auth: true},
40
+ options: options
41
+ )
42
+ end
43
+
44
+ # @api private
45
+ #
46
+ # @param client [OpenAI::Client]
47
+ def initialize(client:)
48
+ @client = client
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -15,6 +15,10 @@ module OpenAI
15
15
  # @return [OpenAI::Resources::Audio::Speech]
16
16
  attr_reader :speech
17
17
 
18
+ # Turn audio into text or text into audio.
19
+ # @return [OpenAI::Resources::Audio::Voices]
20
+ attr_reader :voices
21
+
18
22
  # @api private
19
23
  #
20
24
  # @param client [OpenAI::Client]
@@ -23,6 +27,7 @@ module OpenAI
23
27
  @transcriptions = OpenAI::Resources::Audio::Transcriptions.new(client: client)
24
28
  @translations = OpenAI::Resources::Audio::Translations.new(client: client)
25
29
  @speech = OpenAI::Resources::Audio::Speech.new(client: client)
30
+ @voices = OpenAI::Resources::Audio::Voices.new(client: client)
26
31
  end
27
32
  end
28
33
  end
@@ -30,8 +30,8 @@ module OpenAI
30
30
  # An optional human-readable display name for the template.
31
31
  #
32
32
  # @param network [OpenAI::Models::Beta::Agents::Environments::TemplateCreateParams::Network, nil]
33
- # Network access policy for the environment. Defaults to disabled for GA requests
34
- # and enabled for beta requests.
33
+ # Network access policy for the environment. If omitted, the API version
34
+ # determines whether network access is enabled or disabled.
35
35
  #
36
36
  # @param packages [OpenAI::Models::Beta::Agents::Environments::TemplateCreateParams::Packages, nil]
37
37
  # Packages to install in the environment. Defaults to empty package lists.
@@ -113,8 +113,7 @@ module OpenAI
113
113
  #
114
114
  # @param network [OpenAI::Models::Beta::Agents::Environments::TemplateUpdateParams::Network, nil]
115
115
  # Network access available after setup completes. Omit to preserve the current
116
- # policy, or pass `null` to reset to disabled for GA requests or enabled for beta
117
- # requests.
116
+ # policy, or pass `null` to reset to the default policy.
118
117
  #
119
118
  # @param packages [OpenAI::Models::Beta::Agents::Environments::TemplateUpdateParams::Packages, nil]
120
119
  # Packages installed before the runtime network policy applies.
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Beta
6
+ class Agents
7
+ class Sessions
8
+ class Turns
9
+ class Items
10
+ # Lists items belonging to one root-agent turn, including its interactions with
11
+ # subagents. See
12
+ # [inspecting agent output](https://developers.openai.com/api/docs/guides/agents-api/observability).
13
+ #
14
+ # @overload list(turn_id, session_id:, after: nil, limit: nil, order: nil, request_options: {})
15
+ #
16
+ # @param turn_id [String]
17
+ # Path param: The ID of the turn.
18
+ #
19
+ # @param session_id [String]
20
+ # Path param: The ID of the session that owns the turn.
21
+ #
22
+ # @param after [String]
23
+ # Query param: Return items after this cursor in the selected order. Pass the
24
+ # previous response's last_id, which can differ from the last item's ID.
25
+ #
26
+ # @param limit [Integer]
27
+ # Query param: The maximum number of resources to return, between 1 and 100.
28
+ # Defaults to 20.
29
+ #
30
+ # @param order [Symbol, OpenAI::Models::Beta::Agents::Sessions::Turns::ItemListParams::Order]
31
+ # Query param: The order in which resources are returned. Defaults to `desc`.
32
+ #
33
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
34
+ #
35
+ # @return [OpenAI::Internal::ConversationCursorPage<OpenAI::Models::Beta::AgentSessionMessage, OpenAI::Models::Beta::AgentReasoningItem, OpenAI::Models::Beta::AgentFunctionCallItem, OpenAI::Models::Beta::AgentSessionItem::FunctionCallOutput, OpenAI::Models::Beta::AgentSessionItem::AgentMessage, OpenAI::Models::Beta::AgentMcpCallItem, OpenAI::Models::Beta::AgentSessionItem::ComputerUseCall, OpenAI::Models::Beta::AgentSessionItem::ComputerUseApprovalRequest, OpenAI::Models::Beta::AgentSessionItem::ComputerUseApprovalRequestResult, OpenAI::Models::Beta::AgentWebSearchCallItem, OpenAI::Models::Beta::AgentCommandExecutionItem, OpenAI::Models::Beta::AgentCreateSubagentCallItem, OpenAI::Models::Beta::AgentSendSubagentInputCallItem, OpenAI::Models::Beta::AgentResumeSubagentCallItem, OpenAI::Models::Beta::AgentWaitForSubagentsCallItem, OpenAI::Models::Beta::AgentInterruptSubagentCallItem, OpenAI::Models::Beta::AgentCloseSubagentCallItem>]
36
+ #
37
+ # @see OpenAI::Models::Beta::Agents::Sessions::Turns::ItemListParams
38
+ def list(turn_id, params)
39
+ parsed, options = OpenAI::Beta::Agents::Sessions::Turns::ItemListParams.dump_request(params)
40
+ session_id = parsed.delete(:session_id) do
41
+ raise ArgumentError.new("missing required path argument #{_1}")
42
+ end
43
+
44
+ query = OpenAI::Internal::Util.encode_query_params(parsed)
45
+ @client.request(
46
+ method: :get,
47
+ path: ["agents/sessions/%1$s/turns/%2$s/items", session_id, turn_id],
48
+ query: query,
49
+ page: OpenAI::Internal::ConversationCursorPage,
50
+ model: OpenAI::Beta::AgentSessionItem,
51
+ security: {bearer_auth: true},
52
+ options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options}
53
+ )
54
+ end
55
+
56
+ # @api private
57
+ #
58
+ # @param client [OpenAI::Client]
59
+ def initialize(client:)
60
+ @client = client
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -6,6 +6,9 @@ module OpenAI
6
6
  class Agents
7
7
  class Sessions
8
8
  class Turns
9
+ # @return [OpenAI::Resources::Beta::Agents::Sessions::Turns::Items]
10
+ attr_reader :items
11
+
9
12
  # Retrieves a turn's current status, timestamps, usage, and error. Returns 404 if
10
13
  # the turn does not belong to the session. See
11
14
  # [session turns](https://developers.openai.com/api/docs/guides/agents-api/sessions/manage#inspect-session-turns).
@@ -80,6 +83,7 @@ module OpenAI
80
83
  # @param client [OpenAI::Client]
81
84
  def initialize(client:)
82
85
  @client = client
86
+ @items = OpenAI::Resources::Beta::Agents::Sessions::Turns::Items.new(client: client)
83
87
  end
84
88
  end
85
89
  end
@@ -85,7 +85,7 @@ module OpenAI
85
85
  # the session or streams its events when stream is true. See
86
86
  # [running sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions).
87
87
  #
88
- # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, output_type: nil, metadata: nil, vault_ids: nil, request_options: {})
88
+ # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, output_type: nil, tool_handlers: {}, metadata: nil, vault_ids: nil, request_options: {})
89
89
  #
90
90
  # @param environment [OpenAI::Models::Beta::EnvironmentParam::None, OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted, OpenAI::Models::Beta::EnvironmentParam::SelfHosted]
91
91
  # An inline execution environment or a reference to an environment template.
@@ -112,6 +112,7 @@ module OpenAI
112
112
  # The IDs of vaults made available to the session.
113
113
  #
114
114
  # @param output_type [Class<OpenAI::BaseModel>, nil] Beta: configure and parse a structured answer.
115
+ # @param tool_handlers [Hash{String=>Proc}] Local handlers for initial-turn function calls (not sent to the API).
115
116
  #
116
117
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
117
118
  #
@@ -121,6 +122,7 @@ module OpenAI
121
122
  def create_streaming(params)
122
123
  params = params.to_h.transform_keys { _1.is_a?(String) ? _1.to_sym : _1 }
123
124
  output_type = params.delete(:output_type)
125
+ tool_handlers = params.delete(:tool_handlers)
124
126
  parser = OpenAI::Helpers::Beta::Agents::OutputParser.new(output_type) unless output_type.nil?
125
127
  parsed, options = OpenAI::Beta::Agents::SessionCreateParams.dump_request(params)
126
128
  unless parsed.fetch(:stream, true)
@@ -140,6 +142,10 @@ module OpenAI
140
142
  security: {bearer_auth: true},
141
143
  options: {extra_headers: {"OpenAI-Beta" => "agents=v1"}, **options}
142
144
  )
145
+ if tool_handlers
146
+ stream.configure_tool_handlers(sessions: self, tool_handlers: tool_handlers, request_options: options)
147
+ end
148
+
143
149
  stream.configure_output_parser(parser)
144
150
  end
145
151
 
@@ -274,17 +280,31 @@ module OpenAI
274
280
  # @param session_id [String]
275
281
  # @param input [String, Array<OpenAI::Models::Beta::AgentSessionInputMessageParam>]
276
282
  # @param tool_handlers [Hash{String=>Proc}]
283
+ # @param on_tool_error [Proc, nil]
284
+ # Beta: use with tool_handlers to log or monitor argument parsing, handler
285
+ # execution, and output conversion failures locally. Receives ToolError;
286
+ # API/transport errors still propagate normally. Ordinary observer errors
287
+ # are ignored, and the submitted tool failure stays generic.
277
288
  # @param idempotency_key [String, nil] Applies only to the input submission.
278
289
  # @param output_type [Class<OpenAI::BaseModel>, nil] Beta: parse output without changing session configuration.
279
290
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
280
291
  # @yieldparam stream [OpenAI::Helpers::Agents::SessionStream]
281
292
  # @return [OpenAI::Helpers::Agents::SessionStream]
282
- def stream(session_id, input:, tool_handlers: {}, idempotency_key: nil, output_type: nil, request_options: {})
293
+ def stream(
294
+ session_id,
295
+ input:,
296
+ tool_handlers: {},
297
+ on_tool_error: nil,
298
+ idempotency_key: nil,
299
+ output_type: nil,
300
+ request_options: {}
301
+ )
283
302
  stream = OpenAI::Helpers::Agents::SessionStream.new(
284
303
  sessions: self,
285
304
  session_id: session_id,
286
305
  input: input,
287
306
  tool_handlers: tool_handlers,
307
+ on_tool_error: on_tool_error,
288
308
  idempotency_key: idempotency_key,
289
309
  output_type: output_type,
290
310
  request_options: request_options
@@ -141,8 +141,13 @@ module OpenAI
141
141
  # Number of fine-tuning jobs to retrieve.
142
142
  #
143
143
  # @param metadata [Hash{Symbol=>String}, nil]
144
- # Optional metadata filter. To filter, use the syntax `metadata[k]=v`.
145
- # Alternatively, set `metadata=null` to indicate no metadata.
144
+ # Optional metadata filter. To filter, use the syntax `metadata[k]=v`. Omitting
145
+ # the parameter or passing an empty object applies no metadata filter. An empty
146
+ # value, such as `metadata[k]=`, filters for that key with an empty string value.
147
+ # To select jobs with null metadata, send the literal query string
148
+ # `metadata=null`. Nullable caller types do not specify how a client serializes
149
+ # null for a deep-object parameter. Use a raw query parameter if the client omits
150
+ # null. Do not combine the two query forms.
146
151
  #
147
152
  # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
148
153
  #