openai 0.113.0 → 0.115.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 (284) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -0
  3. data/README.md +17 -2
  4. data/docs/architecture/security-model.md +11 -16
  5. data/examples/responses/websocket_workflows.rb +78 -3
  6. data/lib/openai/auth/subject_token_providers/azure_managed_identity_token_provider.rb +10 -8
  7. data/lib/openai/auth/subject_token_providers/gcp_id_token_provider.rb +8 -7
  8. data/lib/openai/helpers/chat/tool_runner.rb +1 -1
  9. data/lib/openai/helpers/live/websocket.rb +31 -0
  10. data/lib/openai/helpers/realtime/connection.rb +33 -0
  11. data/lib/openai/helpers/realtime/connection_manager.rb +1 -0
  12. data/lib/openai/helpers/realtime/conversation_item_variant_resolver.rb +5 -0
  13. data/lib/openai/helpers/realtime/recovery.rb +5 -1
  14. data/lib/openai/helpers/realtime/translation.rb +5 -0
  15. data/lib/openai/helpers/realtime/transports/async_websocket.rb +19 -0
  16. data/lib/openai/helpers/responses_websocket/connection.rb +53 -15
  17. data/lib/openai/helpers/responses_websocket/connection_manager.rb +1 -0
  18. data/lib/openai/helpers/responses_websocket/connection_resources.rb +1 -1
  19. data/lib/openai/helpers/structured_output/response_parser.rb +1 -0
  20. data/lib/openai/helpers/structured_output.rb +58 -0
  21. data/lib/openai/helpers/websocket/connection_manager.rb +11 -0
  22. data/lib/openai/helpers/websocket/resource.rb +1 -0
  23. data/lib/openai/helpers/websocket/typed_connection.rb +1 -0
  24. data/lib/openai/internal/type/array_of.rb +1 -1
  25. data/lib/openai/internal/type/hash_of.rb +1 -1
  26. data/lib/openai/internal/type/request_parameters.rb +2 -1
  27. data/lib/openai/internal/type/union.rb +18 -6
  28. data/lib/openai/models/admin/organization/external_key.rb +169 -0
  29. data/lib/openai/models/admin/organization/external_key_create_params.rb +311 -0
  30. data/lib/openai/models/admin/organization/external_key_delete_params.rb +24 -0
  31. data/lib/openai/models/admin/organization/external_key_list_params.rb +69 -0
  32. data/lib/openai/models/admin/organization/external_key_retrieve_params.rb +24 -0
  33. data/lib/openai/models/admin/organization/external_key_validate_params.rb +24 -0
  34. data/lib/openai/models/admin/organization/external_key_validate_response.rb +20 -0
  35. data/lib/openai/models/audio/speech_model.rb +12 -0
  36. data/lib/openai/models/audio_model.rb +15 -0
  37. data/lib/openai/models/beta/agent.rb +49 -1
  38. data/lib/openai/models/beta/agent_create_params.rb +51 -1
  39. data/lib/openai/models/beta/agent_session.rb +75 -2
  40. data/lib/openai/models/beta/agent_update_params.rb +62 -1
  41. data/lib/openai/models/beta/agents/session_create_params.rb +94 -2
  42. data/lib/openai/models/beta/agents/session_list_params.rb +16 -1
  43. data/lib/openai/models/beta/agents/session_update_params.rb +50 -5
  44. data/lib/openai/models/beta/assistant_update_params.rb +18 -0
  45. data/lib/openai/models/beta/beta_response.rb +224 -1
  46. data/lib/openai/models/beta/beta_response_configuration_update_item.rb +64 -3
  47. data/lib/openai/models/beta/beta_response_configuration_update_item_param.rb +64 -4
  48. data/lib/openai/models/beta/beta_response_input_file.rb +9 -9
  49. data/lib/openai/models/beta/beta_response_input_file_content.rb +9 -9
  50. data/lib/openai/models/beta/beta_response_input_image.rb +9 -9
  51. data/lib/openai/models/beta/beta_response_input_image_content.rb +9 -9
  52. data/lib/openai/models/beta/beta_response_input_item.rb +2 -3
  53. data/lib/openai/models/beta/beta_response_input_text.rb +9 -9
  54. data/lib/openai/models/beta/beta_response_input_text_content.rb +9 -9
  55. data/lib/openai/models/beta/beta_response_item.rb +11 -11
  56. data/lib/openai/models/beta/beta_response_output_item.rb +9 -9
  57. data/lib/openai/models/beta/beta_response_tool_search_output_item_param.rb +6 -6
  58. data/lib/openai/models/beta/beta_responses_client_event.rb +20 -1
  59. data/lib/openai/models/beta/beta_tool.rb +6 -6
  60. data/lib/openai/models/beta/response_compact_params.rb +6 -0
  61. data/lib/openai/models/beta/response_create_params.rb +6 -0
  62. data/lib/openai/models/chat/chat_completion_content_part.rb +9 -9
  63. data/lib/openai/models/chat/chat_completion_content_part_image.rb +9 -9
  64. data/lib/openai/models/chat/chat_completion_content_part_input_audio.rb +9 -9
  65. data/lib/openai/models/chat/chat_completion_content_part_text.rb +9 -9
  66. data/lib/openai/models/chat_model.rb +6 -0
  67. data/lib/openai/models/conversations/computer_screenshot_content.rb +9 -9
  68. data/lib/openai/models/conversations/conversation_item.rb +2 -2
  69. data/lib/openai/models/image_edit_params.rb +46 -25
  70. data/lib/openai/models/live/fork_server_event.rb +43 -3
  71. data/lib/openai/models/live/server_event.rb +43 -3
  72. data/lib/openai/models/live/sideband_client_event.rb +40 -1
  73. data/lib/openai/models/live/sideband_server_event.rb +43 -3
  74. data/lib/openai/models/realtime/audio_transcription.rb +15 -0
  75. data/lib/openai/models/realtime/conversation_item_added.rb +2 -2
  76. data/lib/openai/models/realtime/conversation_item_create_event.rb +2 -2
  77. data/lib/openai/models/realtime/conversation_item_created_event.rb +2 -2
  78. data/lib/openai/models/realtime/conversation_item_done.rb +2 -2
  79. data/lib/openai/models/realtime/realtime_response.rb +2 -2
  80. data/lib/openai/models/realtime/realtime_response_create_params.rb +2 -2
  81. data/lib/openai/models/realtime/realtime_server_event.rb +2 -2
  82. data/lib/openai/models/realtime/realtime_session.rb +18 -0
  83. data/lib/openai/models/realtime/realtime_session_create_request.rb +18 -0
  84. data/lib/openai/models/realtime/realtime_session_create_response.rb +18 -0
  85. data/lib/openai/models/realtime/response_output_item_added_event.rb +2 -2
  86. data/lib/openai/models/realtime/response_output_item_done_event.rb +2 -2
  87. data/lib/openai/models/responses/response.rb +221 -1
  88. data/lib/openai/models/responses/response_compact_params.rb +6 -0
  89. data/lib/openai/models/responses/response_configuration_update_item.rb +50 -3
  90. data/lib/openai/models/responses/response_configuration_update_item_param.rb +50 -4
  91. data/lib/openai/models/responses/response_input_file.rb +9 -9
  92. data/lib/openai/models/responses/response_input_file_content.rb +9 -9
  93. data/lib/openai/models/responses/response_input_image.rb +9 -9
  94. data/lib/openai/models/responses/response_input_image_content.rb +9 -9
  95. data/lib/openai/models/responses/response_input_item.rb +2 -3
  96. data/lib/openai/models/responses/response_input_text.rb +9 -9
  97. data/lib/openai/models/responses/response_input_text_content.rb +9 -9
  98. data/lib/openai/models/responses/response_item.rb +2 -2
  99. data/lib/openai/models/responses/response_tool_search_output_item_param.rb +6 -6
  100. data/lib/openai/models/responses/responses_client_event.rb +14 -1
  101. data/lib/openai/models/responses/tool.rb +6 -6
  102. data/lib/openai/net_http_client.rb +6 -0
  103. data/lib/openai/providers/vertex.rb +0 -10
  104. data/lib/openai/resources/admin/organization/external_keys.rb +132 -0
  105. data/lib/openai/resources/admin/organization.rb +4 -0
  106. data/lib/openai/resources/audio/speech.rb +8 -0
  107. data/lib/openai/resources/audio/translations.rb +8 -0
  108. data/lib/openai/resources/beta/agents/sessions.rb +22 -6
  109. data/lib/openai/resources/beta/agents.rb +17 -2
  110. data/lib/openai/resources/images.rb +36 -18
  111. data/lib/openai/version.rb +1 -1
  112. data/lib/openai.rb +8 -0
  113. data/rbi/openai/helpers/live/websocket.rbi +1 -12
  114. data/rbi/openai/helpers/realtime/connection.rbi +5 -0
  115. data/rbi/openai/helpers/realtime/transports/async_websocket.rbi +5 -0
  116. data/rbi/openai/helpers/responses_websocket/connection.rbi +7 -2
  117. data/rbi/openai/helpers/structured_output.rbi +10 -0
  118. data/rbi/openai/internal/type/array_of.rbi +1 -1
  119. data/rbi/openai/internal/type/hash_of.rbi +1 -1
  120. data/rbi/openai/internal/type/union.rbi +5 -0
  121. data/rbi/openai/models/admin/organization/external_key.rbi +301 -0
  122. data/rbi/openai/models/admin/organization/external_key_create_params.rbi +532 -0
  123. data/rbi/openai/models/admin/organization/external_key_delete_params.rbi +57 -0
  124. data/rbi/openai/models/admin/organization/external_key_list_params.rbi +129 -0
  125. data/rbi/openai/models/admin/organization/external_key_retrieve_params.rbi +57 -0
  126. data/rbi/openai/models/admin/organization/external_key_validate_params.rbi +57 -0
  127. data/rbi/openai/models/admin/organization/external_key_validate_response.rbi +50 -0
  128. data/rbi/openai/models/beta/agent.rbi +103 -1
  129. data/rbi/openai/models/beta/agent_create_params.rbi +109 -0
  130. data/rbi/openai/models/beta/agent_session.rbi +136 -3
  131. data/rbi/openai/models/beta/agent_update_params.rbi +120 -0
  132. data/rbi/openai/models/beta/agents/session_create_params.rbi +153 -0
  133. data/rbi/openai/models/beta/agents/session_list_params.rbi +19 -0
  134. data/rbi/openai/models/beta/agents/session_update_params.rbi +94 -6
  135. data/rbi/openai/models/beta/beta_response.rbi +394 -0
  136. data/rbi/openai/models/beta/beta_response_configuration_update_item.rbi +113 -3
  137. data/rbi/openai/models/beta/beta_response_configuration_update_item_param.rbi +125 -4
  138. data/rbi/openai/models/beta/beta_response_input_file.rbi +9 -9
  139. data/rbi/openai/models/beta/beta_response_input_file_content.rbi +9 -9
  140. data/rbi/openai/models/beta/beta_response_input_image.rbi +9 -9
  141. data/rbi/openai/models/beta/beta_response_input_image_content.rbi +9 -9
  142. data/rbi/openai/models/beta/beta_response_input_text.rbi +9 -9
  143. data/rbi/openai/models/beta/beta_response_input_text_content.rbi +9 -9
  144. data/rbi/openai/models/beta/beta_response_item.rbi +9 -9
  145. data/rbi/openai/models/beta/beta_response_output_item.rbi +9 -9
  146. data/rbi/openai/models/beta/beta_response_tool_search_output_item_param.rbi +6 -6
  147. data/rbi/openai/models/beta/beta_responses_client_event.rbi +17 -0
  148. data/rbi/openai/models/beta/beta_tool.rbi +6 -6
  149. data/rbi/openai/models/chat/chat_completion_content_part.rbi +9 -9
  150. data/rbi/openai/models/chat/chat_completion_content_part_image.rbi +9 -9
  151. data/rbi/openai/models/chat/chat_completion_content_part_input_audio.rbi +9 -9
  152. data/rbi/openai/models/chat/chat_completion_content_part_text.rbi +9 -9
  153. data/rbi/openai/models/conversations/computer_screenshot_content.rbi +9 -9
  154. data/rbi/openai/models/decision_create_params.rbi +4 -1
  155. data/rbi/openai/models/image_edit_params.rbi +49 -24
  156. data/rbi/openai/models/live/fork_server_event.rbi +65 -1
  157. data/rbi/openai/models/live/server_event.rbi +65 -1
  158. data/rbi/openai/models/live/sideband_client_event.rbi +60 -0
  159. data/rbi/openai/models/live/sideband_server_event.rbi +65 -1
  160. data/rbi/openai/models/realtime/conversation_item_added.rbi +6 -3
  161. data/rbi/openai/models/realtime/conversation_item_create_event.rbi +6 -3
  162. data/rbi/openai/models/realtime/conversation_item_created_event.rbi +6 -3
  163. data/rbi/openai/models/realtime/conversation_item_done.rbi +6 -3
  164. data/rbi/openai/models/realtime/realtime_response.rbi +8 -4
  165. data/rbi/openai/models/realtime/realtime_response_create_params.rbi +8 -4
  166. data/rbi/openai/models/realtime/realtime_server_event.rbi +6 -3
  167. data/rbi/openai/models/realtime/response_output_item_added_event.rbi +6 -3
  168. data/rbi/openai/models/realtime/response_output_item_done_event.rbi +6 -3
  169. data/rbi/openai/models/responses/response.rbi +394 -0
  170. data/rbi/openai/models/responses/response_configuration_update_item.rbi +76 -3
  171. data/rbi/openai/models/responses/response_configuration_update_item_param.rbi +74 -4
  172. data/rbi/openai/models/responses/response_input_file.rbi +9 -9
  173. data/rbi/openai/models/responses/response_input_file_content.rbi +9 -9
  174. data/rbi/openai/models/responses/response_input_image.rbi +9 -9
  175. data/rbi/openai/models/responses/response_input_image_content.rbi +9 -9
  176. data/rbi/openai/models/responses/response_input_text.rbi +9 -9
  177. data/rbi/openai/models/responses/response_input_text_content.rbi +9 -9
  178. data/rbi/openai/models/responses/response_tool_search_output_item_param.rbi +6 -6
  179. data/rbi/openai/models/responses/responses_client_event.rbi +17 -0
  180. data/rbi/openai/models/responses/tool.rbi +6 -6
  181. data/rbi/openai/net_http_client.rbi +5 -0
  182. data/rbi/openai/resources/admin/organization/external_keys.rbi +86 -0
  183. data/rbi/openai/resources/admin/organization.rbi +3 -0
  184. data/rbi/openai/resources/audio/speech.rbi +8 -0
  185. data/rbi/openai/resources/audio/translations.rbi +6 -0
  186. data/rbi/openai/resources/beta/agents/sessions.rbi +18 -2
  187. data/rbi/openai/resources/beta/agents.rbi +15 -0
  188. data/rbi/openai/resources/images.rbi +34 -16
  189. data/rbi/openai/resources/responses.rbi +2 -0
  190. data/realtime.md +6 -0
  191. data/responses-websocket.md +53 -0
  192. data/sig/openai/helpers/live/websocket.rbs +1 -9
  193. data/sig/openai/helpers/realtime/connection.rbs +3 -0
  194. data/sig/openai/helpers/realtime/transports/async_websocket.rbs +3 -0
  195. data/sig/openai/helpers/responses_websocket/connection.rbs +7 -1
  196. data/sig/openai/helpers/structured_output.rbs +9 -0
  197. data/sig/openai/internal/type/union.rbs +4 -0
  198. data/sig/openai/models/admin/organization/external_key.rbs +186 -0
  199. data/sig/openai/models/admin/organization/external_key_create_params.rbs +423 -0
  200. data/sig/openai/models/admin/organization/external_key_delete_params.rbs +27 -0
  201. data/sig/openai/models/admin/organization/external_key_list_params.rbs +81 -0
  202. data/sig/openai/models/admin/organization/external_key_retrieve_params.rbs +27 -0
  203. data/sig/openai/models/admin/organization/external_key_validate_params.rbs +27 -0
  204. data/sig/openai/models/admin/organization/external_key_validate_response.rbs +17 -0
  205. data/sig/openai/models/admin/organization/external_storage_create_params.rbs +72 -2
  206. data/sig/openai/models/audio/speech_create_params.rbs +15 -2
  207. data/sig/openai/models/audio/transcription_create_params.rbs +30 -2
  208. data/sig/openai/models/audio/voice_create_params.rbs +47 -2
  209. data/sig/openai/models/beta/agent.rbs +54 -2
  210. data/sig/openai/models/beta/agent_create_params.rbs +54 -0
  211. data/sig/openai/models/beta/agent_session.rbs +82 -3
  212. data/sig/openai/models/beta/agent_update_params.rbs +64 -0
  213. data/sig/openai/models/beta/agents/session_create_params.rbs +91 -0
  214. data/sig/openai/models/beta/agents/session_list_params.rbs +20 -0
  215. data/sig/openai/models/beta/agents/session_update_params.rbs +48 -6
  216. data/sig/openai/models/beta/assistant_create_params.rbs +5 -2
  217. data/sig/openai/models/beta/beta_response.rbs +223 -0
  218. data/sig/openai/models/beta/beta_response_configuration_update_item.rbs +58 -2
  219. data/sig/openai/models/beta/beta_response_configuration_update_item_param.rbs +58 -2
  220. data/sig/openai/models/beta/beta_response_input_file.rbs +9 -9
  221. data/sig/openai/models/beta/beta_response_input_file_content.rbs +6 -6
  222. data/sig/openai/models/beta/beta_response_input_image.rbs +9 -9
  223. data/sig/openai/models/beta/beta_response_input_image_content.rbs +6 -6
  224. data/sig/openai/models/beta/beta_response_input_text.rbs +9 -9
  225. data/sig/openai/models/beta/beta_response_input_text_content.rbs +6 -6
  226. data/sig/openai/models/beta/beta_response_item.rbs +9 -9
  227. data/sig/openai/models/beta/beta_response_output_item.rbs +9 -9
  228. data/sig/openai/models/beta/beta_response_tool_search_output_item_param.rbs +4 -4
  229. data/sig/openai/models/beta/beta_responses_client_event.rbs +17 -0
  230. data/sig/openai/models/beta/beta_tool.rbs +4 -4
  231. data/sig/openai/models/beta/response_create_params.rbs +5 -2
  232. data/sig/openai/models/beta/responses/input_token_count_params.rbs +10 -2
  233. data/sig/openai/models/beta/thread_create_and_run_params.rbs +11 -5
  234. data/sig/openai/models/beta/thread_create_params.rbs +11 -5
  235. data/sig/openai/models/beta/threads/message_create_params.rbs +6 -3
  236. data/sig/openai/models/beta/threads/run_create_params.rbs +6 -3
  237. data/sig/openai/models/chat/chat_completion_content_part.rbs +9 -9
  238. data/sig/openai/models/chat/chat_completion_content_part_image.rbs +9 -9
  239. data/sig/openai/models/chat/chat_completion_content_part_input_audio.rbs +9 -9
  240. data/sig/openai/models/chat/chat_completion_content_part_text.rbs +9 -9
  241. data/sig/openai/models/conversations/computer_screenshot_content.rbs +9 -9
  242. data/sig/openai/models/decision_create_params.rbs +27 -2
  243. data/sig/openai/models/eval_create_params.rbs +25 -4
  244. data/sig/openai/models/evals/run_create_params.rbs +52 -8
  245. data/sig/openai/models/image_edit_params.rbs +47 -16
  246. data/sig/openai/models/live/fork_server_event.rbs +39 -0
  247. data/sig/openai/models/live/server_event.rbs +39 -0
  248. data/sig/openai/models/live/session_accept_params.rbs +39 -2
  249. data/sig/openai/models/live/sideband_client_event.rbs +32 -0
  250. data/sig/openai/models/live/sideband_server_event.rbs +39 -0
  251. data/sig/openai/models/realtime/conversation_item.rbs +1 -0
  252. data/sig/openai/models/responses/input_token_count_params.rbs +10 -2
  253. data/sig/openai/models/responses/response.rbs +223 -0
  254. data/sig/openai/models/responses/response_configuration_update_item.rbs +45 -2
  255. data/sig/openai/models/responses/response_configuration_update_item_param.rbs +45 -2
  256. data/sig/openai/models/responses/response_create_params.rbs +5 -2
  257. data/sig/openai/models/responses/response_input_file.rbs +9 -9
  258. data/sig/openai/models/responses/response_input_file_content.rbs +6 -6
  259. data/sig/openai/models/responses/response_input_image.rbs +9 -9
  260. data/sig/openai/models/responses/response_input_image_content.rbs +6 -6
  261. data/sig/openai/models/responses/response_input_text.rbs +9 -9
  262. data/sig/openai/models/responses/response_input_text_content.rbs +6 -6
  263. data/sig/openai/models/responses/response_tool_search_output_item_param.rbs +4 -4
  264. data/sig/openai/models/responses/responses_client_event.rbs +17 -0
  265. data/sig/openai/models/responses/tool.rbs +4 -4
  266. data/sig/openai/models/video_edit_params.rbs +11 -2
  267. data/sig/openai/models/video_extend_params.rbs +11 -2
  268. data/sig/openai/net_http_client.rbs +3 -0
  269. data/sig/openai/resources/admin/organization/external_keys.rbs +70 -0
  270. data/sig/openai/resources/admin/organization/external_storage.rbs +23 -1
  271. data/sig/openai/resources/admin/organization.rbs +2 -0
  272. data/sig/openai/resources/audio/speech.rbs +2 -1
  273. data/sig/openai/resources/audio/transcriptions.rbs +14 -2
  274. data/sig/openai/resources/audio/voices.rbs +14 -1
  275. data/sig/openai/resources/beta/agents/sessions.rbs +4 -0
  276. data/sig/openai/resources/beta/agents.rbs +4 -0
  277. data/sig/openai/resources/beta/responses/input_tokens.rbs +2 -1
  278. data/sig/openai/resources/beta/responses.rbs +4 -2
  279. data/sig/openai/resources/decisions.rbs +7 -1
  280. data/sig/openai/resources/images.rbs +2 -0
  281. data/sig/openai/resources/responses/input_tokens.rbs +2 -1
  282. data/sig/openai/resources/responses.rbs +5 -2
  283. data/sig/openai/resources/videos.rbs +2 -2
  284. metadata +25 -1
@@ -301,6 +301,24 @@ module OpenAI
301
301
  sig { params(text: OpenAI::Beta::BetaResponseTextConfig::OrHash).void }
302
302
  attr_writer :text
303
303
 
304
+ # Usage reported by hosted tools, separate from base model `usage`. The field can
305
+ # be omitted when tool usage is unavailable. When present, tool families with no
306
+ # recorded usage have zero counts.
307
+ #
308
+ # `image_gen` sums available token counts across image generation calls. Calls
309
+ # with missing or incomplete usage records may be skipped. Output token details
310
+ # and cached input counts can be omitted. An omitted cache count means cache usage
311
+ # is unknown.
312
+ #
313
+ # `web_search.num_requests` counts billable searches. Discounted searches and
314
+ # actions such as opening a page are excluded. Use billing records to reconcile
315
+ # final charges.
316
+ sig { returns(T.nilable(OpenAI::Beta::BetaResponse::ToolUsage)) }
317
+ attr_reader :tool_usage
318
+
319
+ sig { params(tool_usage: OpenAI::Beta::BetaResponse::ToolUsage::OrHash).void }
320
+ attr_writer :tool_usage
321
+
304
322
  # An integer between 0 and 20 specifying the maximum number of most likely tokens
305
323
  # to return at each token position, each with an associated log probability. In
306
324
  # some cases, the number of returned tokens may be fewer than requested.
@@ -469,6 +487,8 @@ module OpenAI
469
487
 
470
488
  text: OpenAI::Beta::BetaResponseTextConfig::OrHash,
471
489
 
490
+ tool_usage: OpenAI::Beta::BetaResponse::ToolUsage::OrHash,
491
+
472
492
  top_logprobs: T.nilable(Integer),
473
493
 
474
494
  truncation: T.nilable(OpenAI::Beta::BetaResponse::Truncation::OrSymbol),
@@ -690,6 +710,20 @@ module OpenAI
690
710
  # - [Structured Outputs](https://developers.openai.com/api/docs/guides/structured-outputs)
691
711
  text: nil,
692
712
 
713
+ # Usage reported by hosted tools, separate from base model `usage`. The field can
714
+ # be omitted when tool usage is unavailable. When present, tool families with no
715
+ # recorded usage have zero counts.
716
+ #
717
+ # `image_gen` sums available token counts across image generation calls. Calls
718
+ # with missing or incomplete usage records may be skipped. Output token details
719
+ # and cached input counts can be omitted. An omitted cache count means cache usage
720
+ # is unknown.
721
+ #
722
+ # `web_search.num_requests` counts billable searches. Discounted searches and
723
+ # actions such as opening a page are excluded. Use billing records to reconcile
724
+ # final charges.
725
+ tool_usage: nil,
726
+
693
727
  # An integer between 0 and 20 specifying the maximum number of most likely tokens
694
728
  # to return at each token position, each with an associated log probability. In
695
729
  # some cases, the number of returned tokens may be fewer than requested.
@@ -756,6 +790,7 @@ module OpenAI
756
790
  service_tier: T.nilable(OpenAI::Beta::BetaResponse::ServiceTier::TaggedSymbol),
757
791
  status: OpenAI::Beta::BetaResponseStatus::TaggedSymbol,
758
792
  text: OpenAI::Beta::BetaResponseTextConfig,
793
+ tool_usage: OpenAI::Beta::BetaResponse::ToolUsage,
759
794
  top_logprobs: T.nilable(Integer),
760
795
  truncation: T.nilable(OpenAI::Beta::BetaResponse::Truncation::TaggedSymbol),
761
796
  usage: OpenAI::Beta::BetaResponseUsage,
@@ -2310,6 +2345,365 @@ module OpenAI
2310
2345
  end
2311
2346
  end
2312
2347
 
2348
+ class ToolUsage < OpenAI::Internal::Type::BaseModel
2349
+ OrHash = T.type_alias do
2350
+ T.any(
2351
+ OpenAI::Beta::BetaResponse::ToolUsage,
2352
+ OpenAI::Internal::AnyHash
2353
+ )
2354
+ end
2355
+
2356
+ # Aggregated usage statistics for image generation tool calls.
2357
+ sig { returns(OpenAI::Beta::BetaResponse::ToolUsage::ImageGen) }
2358
+ attr_reader :image_gen
2359
+
2360
+ sig { params(image_gen: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OrHash).void }
2361
+ attr_writer :image_gen
2362
+
2363
+ # Aggregated billable usage statistics for web search tool calls.
2364
+ sig { returns(OpenAI::Beta::BetaResponse::ToolUsage::WebSearch) }
2365
+ attr_reader :web_search
2366
+
2367
+ sig { params(web_search: OpenAI::Beta::BetaResponse::ToolUsage::WebSearch::OrHash).void }
2368
+ attr_writer :web_search
2369
+
2370
+ # Usage reported by hosted tools, separate from base model `usage`. The field can
2371
+ # be omitted when tool usage is unavailable. When present, tool families with no
2372
+ # recorded usage have zero counts.
2373
+ #
2374
+ # `image_gen` sums available token counts across image generation calls. Calls
2375
+ # with missing or incomplete usage records may be skipped. Output token details
2376
+ # and cached input counts can be omitted. An omitted cache count means cache usage
2377
+ # is unknown.
2378
+ #
2379
+ # `web_search.num_requests` counts billable searches. Discounted searches and
2380
+ # actions such as opening a page are excluded. Use billing records to reconcile
2381
+ # final charges.
2382
+ sig do
2383
+ params(
2384
+
2385
+ image_gen: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OrHash,
2386
+
2387
+ web_search: OpenAI::Beta::BetaResponse::ToolUsage::WebSearch::OrHash
2388
+ )
2389
+ .returns(T.attached_class)
2390
+ end
2391
+ def self.new(
2392
+
2393
+ # Aggregated usage statistics for image generation tool calls.
2394
+ image_gen:,
2395
+
2396
+ # Aggregated billable usage statistics for web search tool calls.
2397
+
2398
+ web_search:
2399
+ )
2400
+ end
2401
+
2402
+ sig do
2403
+ override.returns(
2404
+ {
2405
+ image_gen: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen,
2406
+ web_search: OpenAI::Beta::BetaResponse::ToolUsage::WebSearch
2407
+ }
2408
+ )
2409
+ end
2410
+ def to_hash
2411
+ end
2412
+
2413
+ class ImageGen < OpenAI::Internal::Type::BaseModel
2414
+ OrHash = T.type_alias do
2415
+ T.any(
2416
+ OpenAI::Beta::BetaResponse::ToolUsage::ImageGen,
2417
+ OpenAI::Internal::AnyHash
2418
+ )
2419
+ end
2420
+
2421
+ # The number of tokens (images and text) in the input prompt.
2422
+ sig { returns(Integer) }
2423
+ attr_accessor :input_tokens
2424
+
2425
+ # The input tokens detailed information for the image generation.
2426
+ sig { returns(OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::InputTokensDetails) }
2427
+ attr_reader :input_tokens_details
2428
+
2429
+ sig {
2430
+ params(input_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::InputTokensDetails::OrHash)
2431
+ .void
2432
+ }
2433
+ attr_writer :input_tokens_details
2434
+
2435
+ # The number of output tokens generated by the model.
2436
+ sig { returns(Integer) }
2437
+ attr_accessor :output_tokens
2438
+
2439
+ # The total number of tokens (images and text) used for the image generation.
2440
+ sig { returns(Integer) }
2441
+ attr_accessor :total_tokens
2442
+
2443
+ sig { returns(T.nilable(Integer)) }
2444
+ attr_reader :cached_tokens
2445
+
2446
+ sig { params(cached_tokens: Integer).void }
2447
+ attr_writer :cached_tokens
2448
+
2449
+ sig { returns(T.nilable(OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::CachedTokensDetails)) }
2450
+ attr_reader :cached_tokens_details
2451
+
2452
+ sig {
2453
+ params(
2454
+ cached_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::CachedTokensDetails::OrHash
2455
+ )
2456
+ .void
2457
+ }
2458
+ attr_writer :cached_tokens_details
2459
+
2460
+ # The output token details for the image generation.
2461
+ sig { returns(T.nilable(OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OutputTokensDetails)) }
2462
+ attr_reader :output_tokens_details
2463
+
2464
+ sig {
2465
+ params(
2466
+ output_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OutputTokensDetails::OrHash
2467
+ )
2468
+ .void
2469
+ }
2470
+ attr_writer :output_tokens_details
2471
+
2472
+ # Aggregated usage statistics for image generation tool calls.
2473
+ sig do
2474
+ params(
2475
+
2476
+ input_tokens: Integer,
2477
+
2478
+ input_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::InputTokensDetails::OrHash,
2479
+
2480
+ output_tokens: Integer,
2481
+
2482
+ total_tokens: Integer,
2483
+
2484
+ cached_tokens: Integer,
2485
+
2486
+ cached_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::CachedTokensDetails::OrHash,
2487
+
2488
+ output_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OutputTokensDetails::OrHash
2489
+ )
2490
+ .returns(T.attached_class)
2491
+ end
2492
+ def self.new(
2493
+
2494
+ # The number of tokens (images and text) in the input prompt.
2495
+ input_tokens:,
2496
+
2497
+ # The input tokens detailed information for the image generation.
2498
+ input_tokens_details:,
2499
+
2500
+ # The number of output tokens generated by the model.
2501
+ output_tokens:,
2502
+
2503
+ # The total number of tokens (images and text) used for the image generation.
2504
+ total_tokens:,
2505
+
2506
+ cached_tokens: nil,
2507
+
2508
+ cached_tokens_details: nil,
2509
+
2510
+ # The output token details for the image generation.
2511
+
2512
+ output_tokens_details: nil
2513
+ )
2514
+ end
2515
+
2516
+ sig do
2517
+ override.returns(
2518
+ {
2519
+ input_tokens: Integer,
2520
+ input_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::InputTokensDetails,
2521
+ output_tokens: Integer,
2522
+ total_tokens: Integer,
2523
+ cached_tokens: Integer,
2524
+ cached_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::CachedTokensDetails,
2525
+ output_tokens_details: OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OutputTokensDetails
2526
+ }
2527
+ )
2528
+ end
2529
+ def to_hash
2530
+ end
2531
+
2532
+ class InputTokensDetails < OpenAI::Internal::Type::BaseModel
2533
+ OrHash = T.type_alias do
2534
+ T.any(
2535
+ OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::InputTokensDetails,
2536
+ OpenAI::Internal::AnyHash
2537
+ )
2538
+ end
2539
+
2540
+ # The number of image tokens in the input prompt.
2541
+ sig { returns(Integer) }
2542
+ attr_accessor :image_tokens
2543
+
2544
+ # The number of text tokens in the input prompt.
2545
+ sig { returns(Integer) }
2546
+ attr_accessor :text_tokens
2547
+
2548
+ # The input tokens detailed information for the image generation.
2549
+ sig do
2550
+ params(
2551
+
2552
+ image_tokens: Integer,
2553
+
2554
+ text_tokens: Integer
2555
+ )
2556
+ .returns(T.attached_class)
2557
+ end
2558
+ def self.new(
2559
+
2560
+ # The number of image tokens in the input prompt.
2561
+ image_tokens:,
2562
+
2563
+ # The number of text tokens in the input prompt.
2564
+
2565
+ text_tokens:
2566
+ )
2567
+ end
2568
+
2569
+ sig do
2570
+ override.returns(
2571
+ {image_tokens: Integer, text_tokens: Integer}
2572
+ )
2573
+ end
2574
+ def to_hash
2575
+ end
2576
+
2577
+ end
2578
+
2579
+ class CachedTokensDetails < OpenAI::Internal::Type::BaseModel
2580
+ OrHash = T.type_alias do
2581
+ T.any(
2582
+ OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::CachedTokensDetails,
2583
+ OpenAI::Internal::AnyHash
2584
+ )
2585
+ end
2586
+
2587
+ sig { returns(Integer) }
2588
+ attr_accessor :cached_image_tokens
2589
+
2590
+ sig { returns(Integer) }
2591
+ attr_accessor :cached_text_tokens
2592
+
2593
+ sig do
2594
+ params(
2595
+
2596
+ cached_image_tokens: Integer,
2597
+
2598
+ cached_text_tokens: Integer
2599
+ )
2600
+ .returns(T.attached_class)
2601
+ end
2602
+ def self.new(
2603
+
2604
+ cached_image_tokens:,
2605
+
2606
+ cached_text_tokens:
2607
+ )
2608
+ end
2609
+
2610
+ sig do
2611
+ override.returns(
2612
+ {cached_image_tokens: Integer, cached_text_tokens: Integer}
2613
+ )
2614
+ end
2615
+ def to_hash
2616
+ end
2617
+
2618
+ end
2619
+
2620
+ class OutputTokensDetails < OpenAI::Internal::Type::BaseModel
2621
+ OrHash = T.type_alias do
2622
+ T.any(
2623
+ OpenAI::Beta::BetaResponse::ToolUsage::ImageGen::OutputTokensDetails,
2624
+ OpenAI::Internal::AnyHash
2625
+ )
2626
+ end
2627
+
2628
+ # The number of image output tokens generated by the model.
2629
+ sig { returns(Integer) }
2630
+ attr_accessor :image_tokens
2631
+
2632
+ # The number of text output tokens generated by the model.
2633
+ sig { returns(Integer) }
2634
+ attr_accessor :text_tokens
2635
+
2636
+ # The output token details for the image generation.
2637
+ sig do
2638
+ params(
2639
+
2640
+ image_tokens: Integer,
2641
+
2642
+ text_tokens: Integer
2643
+ )
2644
+ .returns(T.attached_class)
2645
+ end
2646
+ def self.new(
2647
+
2648
+ # The number of image output tokens generated by the model.
2649
+ image_tokens:,
2650
+
2651
+ # The number of text output tokens generated by the model.
2652
+
2653
+ text_tokens:
2654
+ )
2655
+ end
2656
+
2657
+ sig do
2658
+ override.returns(
2659
+ {image_tokens: Integer, text_tokens: Integer}
2660
+ )
2661
+ end
2662
+ def to_hash
2663
+ end
2664
+
2665
+ end
2666
+ end
2667
+
2668
+ class WebSearch < OpenAI::Internal::Type::BaseModel
2669
+ OrHash = T.type_alias do
2670
+ T.any(
2671
+ OpenAI::Beta::BetaResponse::ToolUsage::WebSearch,
2672
+ OpenAI::Internal::AnyHash
2673
+ )
2674
+ end
2675
+
2676
+ # The number of billable web search requests issued.
2677
+ sig { returns(Integer) }
2678
+ attr_accessor :num_requests
2679
+
2680
+ # Aggregated billable usage statistics for web search tool calls.
2681
+ sig do
2682
+ params(
2683
+
2684
+ num_requests: Integer
2685
+ )
2686
+ .returns(T.attached_class)
2687
+ end
2688
+ def self.new(
2689
+
2690
+ # The number of billable web search requests issued.
2691
+
2692
+ num_requests:
2693
+ )
2694
+ end
2695
+
2696
+ sig do
2697
+ override.returns(
2698
+ {num_requests: Integer}
2699
+ )
2700
+ end
2701
+ def to_hash
2702
+ end
2703
+
2704
+ end
2705
+ end
2706
+
2313
2707
  # The truncation strategy to use for the model response.
2314
2708
  #
2315
2709
  # - `auto`: If the input to this Response exceeds the model's context window size,
@@ -38,8 +38,15 @@ module OpenAI
38
38
  sig { params(reasoning: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Reasoning::OrHash).void }
39
39
  attr_writer :reasoning
40
40
 
41
- # A configuration update that applies to subsequent responses until it is replaced
42
- # by another configuration update.
41
+ # The text output configuration for subsequent responses.
42
+ sig { returns(T.nilable(OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text)) }
43
+ attr_reader :text
44
+
45
+ sig { params(text: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::OrHash).void }
46
+ attr_writer :text
47
+
48
+ # A configuration update for subsequent responses. Each setting stays in effect
49
+ # until a later update replaces that setting.
43
50
  sig do
44
51
  params(
45
52
 
@@ -49,6 +56,8 @@ module OpenAI
49
56
 
50
57
  reasoning: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Reasoning::OrHash,
51
58
 
59
+ text: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::OrHash,
60
+
52
61
  type: Symbol
53
62
  )
54
63
  .returns(T.attached_class)
@@ -64,6 +73,9 @@ module OpenAI
64
73
  # The reasoning configuration applied by this update.
65
74
  reasoning: nil,
66
75
 
76
+ # The text output configuration for subsequent responses.
77
+ text: nil,
78
+
67
79
  # The item type. Always `configuration_update`.
68
80
 
69
81
  type: :configuration_update
@@ -76,7 +88,8 @@ module OpenAI
76
88
  id: String,
77
89
  type: Symbol,
78
90
  agent: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Agent,
79
- reasoning: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Reasoning
91
+ reasoning: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Reasoning,
92
+ text: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text
80
93
  }
81
94
  )
82
95
  end
@@ -192,6 +205,103 @@ module OpenAI
192
205
  end
193
206
  end
194
207
 
208
+ class Text < OpenAI::Internal::Type::BaseModel
209
+ OrHash = T.type_alias do
210
+ T.any(
211
+ OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text,
212
+ OpenAI::Internal::AnyHash
213
+ )
214
+ end
215
+
216
+ # Use a JSON schema for structured output or text to return to plain text.
217
+ sig { returns(OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Variants) }
218
+ attr_accessor :format_
219
+
220
+ # The text output configuration for subsequent responses.
221
+ sig do
222
+ params(
223
+
224
+ format_: T.any(
225
+ OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Text::OrHash,
226
+ OpenAI::Beta::BetaResponseFormatTextJSONSchemaConfig::OrHash
227
+ )
228
+ )
229
+ .returns(T.attached_class)
230
+ end
231
+ def self.new(
232
+
233
+ # Use a JSON schema for structured output or text to return to plain text.
234
+
235
+ format_:
236
+ )
237
+ end
238
+
239
+ sig do
240
+ override.returns(
241
+ {format_: OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Variants}
242
+ )
243
+ end
244
+ def to_hash
245
+ end
246
+
247
+ # Use a JSON schema for structured output or text to return to plain text.
248
+ module Format
249
+ extend OpenAI::Internal::Type::Union
250
+
251
+ Variants = T.type_alias {
252
+ T.any(
253
+ OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Text,
254
+ OpenAI::Beta::BetaResponseFormatTextJSONSchemaConfig
255
+ )
256
+ }
257
+
258
+ class Text < OpenAI::Internal::Type::BaseModel
259
+ OrHash = T.type_alias do
260
+ T.any(
261
+ OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Text,
262
+ OpenAI::Internal::AnyHash
263
+ )
264
+ end
265
+
266
+ # The type of response format being defined. Always `text`.
267
+ sig { returns(Symbol) }
268
+ attr_accessor :type
269
+
270
+ # Default response format. Used to generate text responses.
271
+ sig do
272
+ params(
273
+
274
+ type: Symbol
275
+ )
276
+ .returns(T.attached_class)
277
+ end
278
+ def self.new(
279
+
280
+ # The type of response format being defined. Always `text`.
281
+
282
+ type: :text
283
+ )
284
+ end
285
+
286
+ sig do
287
+ override.returns(
288
+ {type: Symbol}
289
+ )
290
+ end
291
+ def to_hash
292
+ end
293
+
294
+ end
295
+
296
+ sig {
297
+ override.returns(T::Array[OpenAI::Beta::BetaResponseConfigurationUpdateItem::Text::Format::Variants])
298
+ }
299
+ def self.variants
300
+ end
301
+
302
+ end
303
+ end
304
+
195
305
  end
196
306
 
197
307
  end