openai 0.103.0 → 0.104.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 (395) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/README.md +23 -1
  4. data/lib/openai/client.rb +3 -386
  5. data/lib/openai/helpers/admin/organization/projects/api_keys.rb +42 -0
  6. data/lib/openai/helpers/agents/session_stream_resource.rb +60 -0
  7. data/lib/openai/helpers/beta/agents/artifacts.rb +18 -0
  8. data/lib/openai/helpers/beta/agents/files.rb +41 -0
  9. data/lib/openai/helpers/client_runtime.rb +391 -0
  10. data/lib/openai/helpers/files.rb +47 -0
  11. data/lib/openai/helpers/live/websocket.rb +8 -57
  12. data/lib/openai/helpers/models/chat/parsed.rb +32 -0
  13. data/lib/openai/helpers/models/responses/parsed.rb +30 -0
  14. data/lib/openai/helpers/models/responses/response.rb +32 -0
  15. data/lib/openai/helpers/models/webhooks/webhook_endpoint_with_secret.rb +20 -0
  16. data/lib/openai/helpers/realtime/client_extension.rb +1 -2
  17. data/lib/openai/helpers/realtime/connection_manager.rb +1 -1
  18. data/lib/openai/helpers/realtime/translation.rb +7 -50
  19. data/lib/openai/helpers/responses_websocket/client_extension.rb +1 -2
  20. data/lib/openai/helpers/streaming/chat_completion_resource.rb +36 -0
  21. data/lib/openai/helpers/streaming/response_stream.rb +1 -16
  22. data/lib/openai/helpers/streaming/response_stream_resource.rb +78 -0
  23. data/lib/openai/helpers/vector_stores/file_batches.rb +188 -0
  24. data/lib/openai/helpers/vector_stores/files.rb +198 -0
  25. data/lib/openai/helpers/websocket/client_request.rb +31 -6
  26. data/lib/openai/helpers/websocket/connection.rb +58 -0
  27. data/lib/openai/helpers/websocket/connection_manager.rb +4 -2
  28. data/lib/openai/helpers/websocket/protocol.rb +2 -1
  29. data/lib/openai/helpers/websocket/resource.rb +54 -0
  30. data/lib/openai/helpers/websocket/typed_connection.rb +95 -0
  31. data/lib/openai/helpers/websocket.rb +4 -0
  32. data/lib/openai/models/admin/organization/audit_log_list_response.rb +5 -3
  33. data/lib/openai/models/admin/organization/external_storage_configuration.rb +5 -3
  34. data/lib/openai/models/admin/organization/external_storage_create_params.rb +33 -3
  35. data/lib/openai/models/admin/organization/oci_external_storage_provider.rb +37 -0
  36. data/lib/openai/models/admin/organization/project_residency.rb +3 -0
  37. data/lib/openai/models/admin/organization/projects/api_key_update_params.rb +64 -0
  38. data/lib/openai/models/admin/organization/projects/api_key_update_scopes_params.rb +34 -0
  39. data/lib/openai/models/admin/organization/usage_decisions_params.rb +177 -0
  40. data/lib/openai/models/admin/organization/usage_decisions_response.rb +351 -0
  41. data/lib/openai/models/audio/speech_create_params.rb +6 -3
  42. data/lib/openai/models/audio/translation_create_response.rb +0 -1
  43. data/lib/openai/models/audio/voice.rb +17 -2
  44. data/lib/openai/models/audio/voice_create_params.rb +100 -3
  45. data/lib/openai/models/beta/agent_create_params.rb +4 -2
  46. data/lib/openai/models/beta/agent_list_params.rb +4 -4
  47. data/lib/openai/models/beta/agent_session.rb +37 -1
  48. data/lib/openai/models/beta/agent_update_params.rb +4 -2
  49. data/lib/openai/models/beta/agents/environment_list_params.rb +7 -7
  50. data/lib/openai/models/beta/agents/session_create_params.rb +39 -3
  51. data/lib/openai/models/beta/agents/session_list_params.rb +7 -10
  52. data/lib/openai/models/beta/agents/session_update_params.rb +33 -1
  53. data/lib/openai/models/beta/agents/sessions/artifact_list_params.rb +11 -11
  54. data/lib/openai/models/beta/agents/vault_list_params.rb +23 -13
  55. data/lib/openai/models/beta/agents/vault_status_filter.rb +1 -3
  56. data/lib/openai/models/beta/agents/vault_update_params.rb +47 -0
  57. data/lib/openai/models/beta/agents/vaults/credential_list_params.rb +23 -13
  58. data/lib/openai/models/beta/beta_response.rb +23 -2
  59. data/lib/openai/models/beta/beta_response_error.rb +19 -1
  60. data/lib/openai/models/beta/beta_response_input_item.rb +107 -1
  61. data/lib/openai/models/beta/beta_response_item.rb +107 -1
  62. data/lib/openai/models/beta/beta_response_output_item.rb +107 -1
  63. data/lib/openai/models/beta/beta_responses_client_event.rb +23 -2
  64. data/lib/openai/models/beta/response_compact_params.rb +21 -0
  65. data/lib/openai/models/beta/response_create_params.rb +23 -2
  66. data/lib/openai/models/beta/session_turn_error.rb +3 -0
  67. data/lib/openai/models/chat/chat_completion_audio_param.rb +3 -3
  68. data/lib/openai/models/chat/chat_completion_message.rb +0 -8
  69. data/lib/openai/models/chat/chat_completion_message_function_tool_call.rb +0 -8
  70. data/lib/openai/models/chat/completion_create_params.rb +5 -12
  71. data/lib/openai/models/chat_model.rb +21 -0
  72. data/lib/openai/models/conversations/conversation_item.rb +107 -1
  73. data/lib/openai/models/decision.rb +17 -2
  74. data/lib/openai/models/decision_create_params.rb +29 -12
  75. data/lib/openai/models/decision_input_image.rb +4 -3
  76. data/lib/openai/models/decision_input_message.rb +4 -4
  77. data/lib/openai/models/decision_input_part.rb +3 -2
  78. data/lib/openai/models/image_edit_completed_event.rb +1 -2
  79. data/lib/openai/models/image_edit_partial_image_event.rb +1 -2
  80. data/lib/openai/models/image_gen_completed_event.rb +1 -2
  81. data/lib/openai/models/image_gen_partial_image_event.rb +1 -2
  82. data/lib/openai/models/images_response.rb +1 -2
  83. data/lib/openai/models/live/built_in_voice.rb +1 -0
  84. data/lib/openai/models/live/client_event.rb +14 -2
  85. data/lib/openai/models/live/decision_create_event.rb +26 -0
  86. data/lib/openai/models/live/decision_event.rb +117 -0
  87. data/lib/openai/models/live/decision_item_create_event.rb +194 -0
  88. data/lib/openai/models/live/decision_item_created_event.rb +202 -0
  89. data/lib/openai/models/live/decision_item_delete_event.rb +38 -0
  90. data/lib/openai/models/live/decision_item_deleted_event.rb +46 -0
  91. data/lib/openai/models/live/decision_trigger.rb +244 -0
  92. data/lib/openai/models/live/decisions_delegation_config.rb +201 -0
  93. data/lib/openai/models/live/decisions_delegation_update_config.rb +208 -0
  94. data/lib/openai/models/live/delegation_created_event.rb +10 -10
  95. data/lib/openai/models/live/fork_client_event.rb +14 -2
  96. data/lib/openai/models/live/fork_server_event.rb +17 -2
  97. data/lib/openai/models/live/media_session_config.rb +47 -11
  98. data/lib/openai/models/live/output_audio_fixture_play_event.rb +48 -0
  99. data/lib/openai/models/live/output_audio_fixture_played_event.rb +42 -0
  100. data/lib/openai/models/live/output_audio_fixture_playing_event.rb +41 -0
  101. data/lib/openai/models/live/server_event.rb +17 -2
  102. data/lib/openai/models/live/session_accept_params.rb +47 -11
  103. data/lib/openai/models/live/session_config.rb +47 -11
  104. data/lib/openai/models/live/session_resource.rb +47 -11
  105. data/lib/openai/models/live/session_update_config.rb +38 -6
  106. data/lib/openai/models/live/session_update_event.rb +8 -8
  107. data/lib/openai/models/live/sideband_client_event.rb +57 -0
  108. data/lib/openai/models/live/sideband_server_event.rb +78 -0
  109. data/lib/openai/models/realtime/realtime_audio_config_output.rb +6 -3
  110. data/lib/openai/models/realtime/realtime_response_create_audio_output.rb +6 -3
  111. data/lib/openai/models/realtime/realtime_response_status.rb +10 -1
  112. data/lib/openai/models/response_format_json_schema.rb +1 -1
  113. data/lib/openai/models/responses/function_tool.rb +8 -6
  114. data/lib/openai/models/responses/response.rb +2 -23
  115. data/lib/openai/models/responses/response_compact_params.rb +21 -0
  116. data/lib/openai/models/responses/response_create_params.rb +3 -6
  117. data/lib/openai/models/responses/response_error.rb +19 -1
  118. data/lib/openai/models/responses/response_format_text_config.rb +0 -4
  119. data/lib/openai/models/responses/response_function_tool_call.rb +0 -8
  120. data/lib/openai/models/responses/response_input_item.rb +107 -1
  121. data/lib/openai/models/responses/response_item.rb +107 -1
  122. data/lib/openai/models/responses/response_output_item.rb +107 -1
  123. data/lib/openai/models/responses/response_output_text.rb +0 -8
  124. data/lib/openai/models/responses/responses_client_event.rb +2 -2
  125. data/lib/openai/models/safety/safety_alert.rb +12 -1
  126. data/lib/openai/models/video_create_error.rb +19 -1
  127. data/lib/openai/models/webhooks/unwrap_webhook_event.rb +4 -4
  128. data/lib/openai/models/webhooks/webhook_endpoint_with_secret.rb +0 -9
  129. data/lib/openai/resources/admin/organization/external_storage.rb +1 -1
  130. data/lib/openai/resources/admin/organization/projects/api_keys.rb +61 -0
  131. data/lib/openai/resources/admin/organization/usage.rb +67 -0
  132. data/lib/openai/resources/audio/speech.rb +2 -1
  133. data/lib/openai/resources/audio/voices.rb +10 -10
  134. data/lib/openai/resources/beta/agents/environments/files.rb +3 -31
  135. data/lib/openai/resources/beta/agents/environments.rb +3 -3
  136. data/lib/openai/resources/beta/agents/sessions/artifacts.rb +5 -11
  137. data/lib/openai/resources/beta/agents/sessions.rb +20 -56
  138. data/lib/openai/resources/beta/agents/vaults/credentials.rb +10 -6
  139. data/lib/openai/resources/beta/agents/vaults.rb +45 -6
  140. data/lib/openai/resources/beta/agents.rb +6 -4
  141. data/lib/openai/resources/beta/responses.rb +2 -2
  142. data/lib/openai/resources/chat/completions.rb +11 -37
  143. data/lib/openai/resources/decisions.rb +9 -15
  144. data/lib/openai/resources/files.rb +0 -39
  145. data/lib/openai/resources/live/forks.rb +19 -0
  146. data/lib/openai/resources/live/sideband.rb +19 -0
  147. data/lib/openai/resources/live.rb +19 -0
  148. data/lib/openai/resources/realtime/translations.rb +19 -0
  149. data/lib/openai/resources/realtime.rb +19 -0
  150. data/lib/openai/resources/responses.rb +44 -95
  151. data/lib/openai/resources/vector_stores/file_batches.rb +0 -178
  152. data/lib/openai/resources/vector_stores/files.rb +0 -188
  153. data/lib/openai/resources/webhooks.rb +13 -29
  154. data/lib/openai/version.rb +1 -1
  155. data/lib/openai.rb +31 -0
  156. data/rbi/openai/client.rbi +0 -103
  157. data/rbi/openai/helpers/admin/organization/projects/api_keys.rbi +25 -0
  158. data/rbi/openai/helpers/beta/agents/artifacts.rbi +25 -0
  159. data/rbi/openai/helpers/beta/agents/files.rbi +48 -0
  160. data/rbi/openai/helpers/client_runtime.rbi +108 -0
  161. data/rbi/openai/helpers/files.rbi +25 -0
  162. data/rbi/openai/helpers/models/chat/parsed.rbi +21 -0
  163. data/rbi/openai/helpers/models/responses/parsed.rbi +19 -0
  164. data/rbi/openai/helpers/models/responses/response.rbi +15 -0
  165. data/rbi/openai/helpers/streaming/response_stream.rbi +301 -0
  166. data/rbi/openai/helpers/vector_stores/file_batches.rbi +102 -0
  167. data/rbi/openai/helpers/vector_stores/files.rbi +122 -0
  168. data/rbi/openai/helpers/websocket.rbi +82 -0
  169. data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +6 -3
  170. data/rbi/openai/models/admin/organization/external_storage_configuration.rbi +4 -2
  171. data/rbi/openai/models/admin/organization/external_storage_create_params.rbi +63 -4
  172. data/rbi/openai/models/admin/organization/oci_external_storage_provider.rbi +71 -0
  173. data/rbi/openai/models/admin/organization/project_residency.rbi +12 -0
  174. data/rbi/openai/models/admin/organization/projects/api_key_update_params.rbi +110 -0
  175. data/rbi/openai/models/admin/organization/projects/api_key_update_scopes_params.rbi +72 -0
  176. data/rbi/openai/models/admin/organization/usage_decisions_params.rbi +229 -0
  177. data/rbi/openai/models/admin/organization/usage_decisions_response.rbi +479 -0
  178. data/rbi/openai/models/audio/speech_create_params.rbi +6 -3
  179. data/rbi/openai/models/audio/voice.rbi +21 -2
  180. data/rbi/openai/models/audio/voice_create_params.rbi +149 -4
  181. data/rbi/openai/models/beta/agent_create_params.rbi +4 -2
  182. data/rbi/openai/models/beta/agent_list_params.rbi +8 -5
  183. data/rbi/openai/models/beta/agent_session.rbi +64 -1
  184. data/rbi/openai/models/beta/agent_update_params.rbi +4 -2
  185. data/rbi/openai/models/beta/agents/environment_list_params.rbi +7 -7
  186. data/rbi/openai/models/beta/agents/session_create_params.rbi +62 -2
  187. data/rbi/openai/models/beta/agents/session_list_params.rbi +11 -11
  188. data/rbi/openai/models/beta/agents/session_update_params.rbi +56 -0
  189. data/rbi/openai/models/beta/agents/sessions/artifact_list_params.rbi +19 -13
  190. data/rbi/openai/models/beta/agents/vault_list_params.rbi +30 -13
  191. data/rbi/openai/models/beta/agents/vault_status_filter.rbi +1 -3
  192. data/rbi/openai/models/beta/agents/vault_update_params.rbi +87 -0
  193. data/rbi/openai/models/beta/agents/vaults/credential_list_params.rbi +30 -13
  194. data/rbi/openai/models/beta/beta_response.rbi +2 -2
  195. data/rbi/openai/models/beta/beta_response_error.rbi +24 -3
  196. data/rbi/openai/models/beta/beta_response_input_item.rbi +191 -0
  197. data/rbi/openai/models/beta/beta_response_item.rbi +189 -0
  198. data/rbi/openai/models/beta/beta_response_output_item.rbi +191 -0
  199. data/rbi/openai/models/beta/beta_responses_client_event.rbi +2 -2
  200. data/rbi/openai/models/beta/response_create_params.rbi +2 -2
  201. data/rbi/openai/models/beta/session_turn_error.rbi +3 -0
  202. data/rbi/openai/models/chat/chat_completion_audio_param.rbi +3 -3
  203. data/rbi/openai/models/chat/chat_completion_message.rbi +0 -4
  204. data/rbi/openai/models/chat/chat_completion_message_function_tool_call.rbi +0 -4
  205. data/rbi/openai/models/chat/completion_create_params.rbi +63 -78
  206. data/rbi/openai/models/conversations/conversation_item.rbi +191 -0
  207. data/rbi/openai/models/decision.rbi +14 -1
  208. data/rbi/openai/models/decision_create_params.rbi +23 -12
  209. data/rbi/openai/models/decision_input_image.rbi +4 -3
  210. data/rbi/openai/models/decision_input_message.rbi +4 -4
  211. data/rbi/openai/models/decision_input_part.rbi +2 -1
  212. data/rbi/openai/models/image_edit_completed_event.rbi +1 -0
  213. data/rbi/openai/models/image_edit_partial_image_event.rbi +1 -0
  214. data/rbi/openai/models/image_gen_completed_event.rbi +1 -0
  215. data/rbi/openai/models/image_gen_partial_image_event.rbi +1 -0
  216. data/rbi/openai/models/images_response.rbi +1 -0
  217. data/rbi/openai/models/live/built_in_voice.rbi +1 -0
  218. data/rbi/openai/models/live/client_event.rbi +4 -0
  219. data/rbi/openai/models/live/decision_create_event.rbi +55 -0
  220. data/rbi/openai/models/live/decision_event.rbi +185 -0
  221. data/rbi/openai/models/live/decision_item_create_event.rbi +338 -0
  222. data/rbi/openai/models/live/decision_item_created_event.rbi +354 -0
  223. data/rbi/openai/models/live/decision_item_delete_event.rbi +66 -0
  224. data/rbi/openai/models/live/decision_item_deleted_event.rbi +77 -0
  225. data/rbi/openai/models/live/decision_trigger.rbi +465 -0
  226. data/rbi/openai/models/live/decisions_delegation_config.rbi +393 -0
  227. data/rbi/openai/models/live/decisions_delegation_update_config.rbi +412 -0
  228. data/rbi/openai/models/live/delegation_created_event.rbi +8 -10
  229. data/rbi/openai/models/live/fork_client_event.rbi +4 -0
  230. data/rbi/openai/models/live/fork_server_event.rbi +5 -0
  231. data/rbi/openai/models/live/media_session_config.rbi +95 -14
  232. data/rbi/openai/models/live/output_audio_fixture_play_event.rbi +76 -0
  233. data/rbi/openai/models/live/output_audio_fixture_played_event.rbi +73 -0
  234. data/rbi/openai/models/live/output_audio_fixture_playing_event.rbi +72 -0
  235. data/rbi/openai/models/live/server_event.rbi +5 -0
  236. data/rbi/openai/models/live/session_accept_params.rbi +88 -12
  237. data/rbi/openai/models/live/session_config.rbi +100 -14
  238. data/rbi/openai/models/live/session_resource.rbi +81 -10
  239. data/rbi/openai/models/live/session_update_config.rbi +86 -9
  240. data/rbi/openai/models/live/session_update_event.rbi +8 -8
  241. data/rbi/openai/models/live/sideband_client_event.rbi +40 -0
  242. data/rbi/openai/models/live/sideband_server_event.rbi +47 -0
  243. data/rbi/openai/models/realtime/realtime_audio_config_output.rbi +6 -3
  244. data/rbi/openai/models/realtime/realtime_response_create_audio_output.rbi +6 -3
  245. data/rbi/openai/models/realtime/realtime_response_status.rbi +13 -1
  246. data/rbi/openai/models/realtime/realtime_translation_input_audio_buffer_append_event.rbi +1 -1
  247. data/rbi/openai/models/realtime/realtime_translation_output_audio_delta_event.rbi +3 -3
  248. data/rbi/openai/models/realtime/realtime_translation_session_close_event.rbi +1 -1
  249. data/rbi/openai/models/realtime/realtime_translation_session_update_event.rbi +5 -1
  250. data/rbi/openai/models/responses/response.rbi +2 -7
  251. data/rbi/openai/models/responses/response_create_params.rbi +5 -9
  252. data/rbi/openai/models/responses/response_error.rbi +24 -3
  253. data/rbi/openai/models/responses/response_function_tool_call.rbi +0 -4
  254. data/rbi/openai/models/responses/response_function_web_search.rbi +21 -17
  255. data/rbi/openai/models/responses/response_input_item.rbi +191 -0
  256. data/rbi/openai/models/responses/response_item.rbi +189 -0
  257. data/rbi/openai/models/responses/response_output_item.rbi +191 -0
  258. data/rbi/openai/models/responses/response_output_text.rbi +0 -4
  259. data/rbi/openai/models/responses/responses_client_event.rbi +2 -2
  260. data/rbi/openai/models/safety/safety_alert.rbi +13 -1
  261. data/rbi/openai/models/video_create_error.rbi +24 -3
  262. data/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +1 -1
  263. data/rbi/openai/resources/admin/organization/external_storage.rbi +2 -1
  264. data/rbi/openai/resources/admin/organization/projects/api_keys.rbi +48 -0
  265. data/rbi/openai/resources/admin/organization/usage.rbi +56 -0
  266. data/rbi/openai/resources/audio/speech.rbi +2 -1
  267. data/rbi/openai/resources/audio/voices.rbi +13 -10
  268. data/rbi/openai/resources/beta/agents/environments/files.rbi +3 -33
  269. data/rbi/openai/resources/beta/agents/environments.rbi +3 -3
  270. data/rbi/openai/resources/beta/agents/sessions/artifacts.rbi +5 -13
  271. data/rbi/openai/resources/beta/agents/sessions.rbi +15 -4
  272. data/rbi/openai/resources/beta/agents/vaults/credentials.rbi +9 -5
  273. data/rbi/openai/resources/beta/agents/vaults.rbi +34 -5
  274. data/rbi/openai/resources/beta/agents.rbi +6 -4
  275. data/rbi/openai/resources/beta/responses.rbi +2 -2
  276. data/rbi/openai/resources/chat/completions.rbi +26 -29
  277. data/rbi/openai/resources/decisions.rbi +9 -15
  278. data/rbi/openai/resources/files.rbi +0 -18
  279. data/rbi/openai/resources/live/forks.rbi +17 -0
  280. data/rbi/openai/resources/live/sideband.rbi +17 -0
  281. data/rbi/openai/resources/live.rbi +17 -0
  282. data/rbi/openai/resources/realtime/translations.rbi +17 -0
  283. data/rbi/openai/resources/realtime.rbi +17 -0
  284. data/rbi/openai/resources/responses.rbi +41 -333
  285. data/rbi/openai/resources/vector_stores/file_batches.rbi +0 -93
  286. data/rbi/openai/resources/vector_stores/files.rbi +0 -113
  287. data/rbi/openai/resources/webhooks.rbi +1 -1
  288. data/sig/openai/client.rbs +0 -50
  289. data/sig/openai/helpers/admin/organization/projects/api_keys.rbs +18 -0
  290. data/sig/openai/helpers/beta/agents/artifacts.rbs +17 -0
  291. data/sig/openai/helpers/beta/agents/files.rbs +30 -0
  292. data/sig/openai/helpers/client_runtime.rbs +53 -0
  293. data/sig/openai/helpers/files.rbs +12 -0
  294. data/sig/openai/helpers/models/responses/response.rbs +9 -0
  295. data/sig/openai/helpers/streaming/response_stream.rbs +37 -0
  296. data/sig/openai/helpers/vector_stores/file_batches.rbs +38 -0
  297. data/sig/openai/helpers/vector_stores/files.rbs +43 -0
  298. data/sig/openai/helpers/websocket.rbs +40 -0
  299. data/sig/openai/models/admin/organization/audit_log_list_response.rbs +1 -0
  300. data/sig/openai/models/admin/organization/external_storage_configuration.rbs +1 -0
  301. data/sig/openai/models/admin/organization/external_storage_create_params.rbs +33 -0
  302. data/sig/openai/models/admin/organization/oci_external_storage_provider.rbs +34 -0
  303. data/sig/openai/models/admin/organization/project_residency.rbs +6 -0
  304. data/sig/openai/models/admin/organization/projects/api_key_update_params.rbs +77 -0
  305. data/sig/openai/models/admin/organization/projects/api_key_update_scopes_params.rbs +38 -0
  306. data/sig/openai/models/admin/organization/usage_decisions_params.rbs +170 -0
  307. data/sig/openai/models/admin/organization/usage_decisions_response.rbs +319 -0
  308. data/sig/openai/models/audio/speech_create_params.rbs +4 -2
  309. data/sig/openai/models/audio/voice.rbs +21 -3
  310. data/sig/openai/models/audio/voice_create_params.rbs +90 -1
  311. data/sig/openai/models/beta/agent_create_params.rbs +4 -2
  312. data/sig/openai/models/beta/agent_list_params.rbs +9 -6
  313. data/sig/openai/models/beta/agent_session.rbs +36 -2
  314. data/sig/openai/models/beta/agent_update_params.rbs +4 -2
  315. data/sig/openai/models/beta/agents/environment_list_params.rbs +9 -9
  316. data/sig/openai/models/beta/agents/session_create_params.rbs +29 -2
  317. data/sig/openai/models/beta/agents/session_list_params.rbs +12 -12
  318. data/sig/openai/models/beta/agents/session_update_params.rbs +23 -0
  319. data/sig/openai/models/beta/agents/sessions/artifact_list_params.rbs +21 -15
  320. data/sig/openai/models/beta/agents/vault_list_params.rbs +32 -14
  321. data/sig/openai/models/beta/agents/vault_update_params.rbs +54 -0
  322. data/sig/openai/models/beta/agents/vaults/credential_list_params.rbs +32 -14
  323. data/sig/openai/models/beta/beta_response.rbs +2 -2
  324. data/sig/openai/models/beta/beta_response_error.rbs +19 -3
  325. data/sig/openai/models/beta/beta_response_input_item.rbs +110 -0
  326. data/sig/openai/models/beta/beta_response_item.rbs +110 -0
  327. data/sig/openai/models/beta/beta_response_output_item.rbs +110 -0
  328. data/sig/openai/models/beta/beta_responses_client_event.rbs +2 -2
  329. data/sig/openai/models/beta/response_create_params.rbs +2 -2
  330. data/sig/openai/models/beta/session_turn_error.rbs +4 -0
  331. data/sig/openai/models/chat/chat_completion_audio_param.rbs +2 -2
  332. data/sig/openai/models/chat/completion_create_params.rbs +2 -2
  333. data/sig/openai/models/conversations/conversation_item.rbs +110 -0
  334. data/sig/openai/models/decision.rbs +13 -0
  335. data/sig/openai/models/decision_create_params.rbs +19 -8
  336. data/sig/openai/models/decision_input_image.rbs +2 -2
  337. data/sig/openai/models/decision_input_message.rbs +2 -2
  338. data/sig/openai/models/live/built_in_voice.rbs +2 -0
  339. data/sig/openai/models/live/client_event.rbs +4 -0
  340. data/sig/openai/models/live/decision_create_event.rbs +18 -0
  341. data/sig/openai/models/live/decision_event.rbs +102 -0
  342. data/sig/openai/models/live/decision_item_create_event.rbs +183 -0
  343. data/sig/openai/models/live/decision_item_created_event.rbs +195 -0
  344. data/sig/openai/models/live/decision_item_delete_event.rbs +33 -0
  345. data/sig/openai/models/live/decision_item_deleted_event.rbs +49 -0
  346. data/sig/openai/models/live/decision_trigger.rbs +234 -0
  347. data/sig/openai/models/live/decisions_delegation_config.rbs +195 -0
  348. data/sig/openai/models/live/decisions_delegation_update_config.rbs +202 -0
  349. data/sig/openai/models/live/delegation_created_event.rbs +6 -7
  350. data/sig/openai/models/live/fork_client_event.rbs +4 -0
  351. data/sig/openai/models/live/fork_server_event.rbs +5 -0
  352. data/sig/openai/models/live/media_session_config.rbs +58 -11
  353. data/sig/openai/models/live/output_audio_fixture_play_event.rbs +42 -0
  354. data/sig/openai/models/live/output_audio_fixture_played_event.rbs +44 -0
  355. data/sig/openai/models/live/output_audio_fixture_playing_event.rbs +44 -0
  356. data/sig/openai/models/live/server_event.rbs +5 -0
  357. data/sig/openai/models/live/session_accept_params.rbs +57 -10
  358. data/sig/openai/models/live/session_config.rbs +58 -11
  359. data/sig/openai/models/live/session_resource.rbs +57 -10
  360. data/sig/openai/models/live/session_update_config.rbs +54 -3
  361. data/sig/openai/models/live/session_update_event.rbs +6 -6
  362. data/sig/openai/models/live/sideband_client_event.rbs +26 -0
  363. data/sig/openai/models/live/sideband_server_event.rbs +33 -0
  364. data/sig/openai/models/realtime/realtime_audio_config_output.rbs +6 -3
  365. data/sig/openai/models/realtime/realtime_response_create_audio_output.rbs +6 -3
  366. data/sig/openai/models/realtime/realtime_response_status.rbs +15 -3
  367. data/sig/openai/models/responses/response.rbs +2 -4
  368. data/sig/openai/models/responses/response_create_params.rbs +2 -2
  369. data/sig/openai/models/responses/response_error.rbs +19 -3
  370. data/sig/openai/models/responses/response_input_item.rbs +110 -0
  371. data/sig/openai/models/responses/response_item.rbs +110 -0
  372. data/sig/openai/models/responses/response_output_item.rbs +110 -0
  373. data/sig/openai/models/responses/responses_client_event.rbs +2 -2
  374. data/sig/openai/models/safety/safety_alert.rbs +12 -2
  375. data/sig/openai/models/video_create_error.rbs +19 -3
  376. data/sig/openai/models/webhooks/unwrap_webhook_event.rbs +1 -1
  377. data/sig/openai/resources/admin/organization/projects/api_keys.rbs +8 -0
  378. data/sig/openai/resources/admin/organization/usage.rbs +15 -0
  379. data/sig/openai/resources/beta/agents/environments/files.rbs +0 -17
  380. data/sig/openai/resources/beta/agents/sessions/artifacts.rbs +2 -6
  381. data/sig/openai/resources/beta/agents/sessions.rbs +4 -1
  382. data/sig/openai/resources/beta/agents/vaults/credentials.rbs +2 -1
  383. data/sig/openai/resources/beta/agents/vaults.rbs +9 -1
  384. data/sig/openai/resources/beta/agents.rbs +1 -1
  385. data/sig/openai/resources/files.rbs +0 -7
  386. data/sig/openai/resources/live/forks.rbs +8 -0
  387. data/sig/openai/resources/live/sideband.rbs +8 -0
  388. data/sig/openai/resources/live.rbs +7 -0
  389. data/sig/openai/resources/realtime/translations.rbs +7 -0
  390. data/sig/openai/resources/realtime.rbs +7 -0
  391. data/sig/openai/resources/responses.rbs +7 -31
  392. data/sig/openai/resources/vector_stores/file_batches.rbs +0 -31
  393. data/sig/openai/resources/vector_stores/files.rbs +0 -36
  394. data/sig/openai/resources/webhooks.rbs +1 -1
  395. metadata +89 -1
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../../helpers/resource_polling"
4
-
5
3
  module OpenAI
6
4
  module Resources
7
5
  class VectorStores
@@ -58,63 +56,6 @@ module OpenAI
58
56
  )
59
57
  end
60
58
 
61
- # Create a vector store file batch and wait for processing to finish.
62
- #
63
- # The returned batch may have a `failed` or `cancelled` status; callers should
64
- # inspect its status and file counts. Polling intervals and the overall timeout
65
- # are in seconds. Finite timeouts include authentication and request replay
66
- # time and disable transport retries so the deadline remains strict. Set
67
- # `timeout` to `nil` to wait indefinitely and retain configured transport retries.
68
- #
69
- # @overload create_and_poll(vector_store_id, attributes: nil, chunking_strategy: nil, file_ids: nil, files: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
70
- #
71
- # @param vector_store_id [String] The ID of the vector store for which to create a File Batch.
72
- #
73
- # @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to apply to each file in `file_ids`.
74
- #
75
- # @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the files.
76
- #
77
- # @param file_ids [Array<String>] File IDs to add to the vector store.
78
- #
79
- # @param files [Array<OpenAI::Models::VectorStores::FileBatchCreateParams::File>] File IDs with per-file attributes or chunking strategies.
80
- #
81
- # @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
82
- # polling hint and otherwise waits 5 seconds.
83
- #
84
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
85
- # indefinitely.
86
- #
87
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
88
- #
89
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
90
- # @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
91
- def create_and_poll(
92
- vector_store_id,
93
- attributes: nil,
94
- chunking_strategy: nil,
95
- file_ids: nil,
96
- files: nil,
97
- poll_interval: nil,
98
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
99
- request_options: {}
100
- )
101
- OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
102
-
103
- params = {request_options: request_options}
104
- params[:attributes] = attributes unless attributes.nil?
105
- params[:chunking_strategy] = chunking_strategy unless chunking_strategy.nil?
106
- params[:file_ids] = file_ids unless file_ids.nil?
107
- params[:files] = files unless files.nil?
108
- batch = create(vector_store_id, params)
109
- poll(
110
- batch.id,
111
- vector_store_id: vector_store_id,
112
- poll_interval: poll_interval,
113
- timeout: timeout,
114
- request_options: request_options
115
- )
116
- end
117
-
118
59
  # Retrieves a vector store file batch.
119
60
  #
120
61
  # @overload retrieve(batch_id, vector_store_id:, request_options: {})
@@ -236,125 +177,6 @@ module OpenAI
236
177
  )
237
178
  end
238
179
 
239
- # Wait for a vector store file batch to finish processing.
240
- #
241
- # The returned batch may have a `failed` or `cancelled` status; callers should
242
- # inspect its status and file counts. Polling intervals and the overall timeout
243
- # are in seconds. Set `timeout` to `nil` to wait indefinitely.
244
- #
245
- # @overload poll(batch_id, vector_store_id:, poll_interval: nil, timeout: 1800.0, request_options: {})
246
- #
247
- # @param batch_id [String] The ID of the file batch being retrieved.
248
- #
249
- # @param vector_store_id [String] The ID of the vector store that the file batch belongs to.
250
- #
251
- # @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
252
- # polling hint and otherwise waits 5 seconds.
253
- #
254
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
255
- # indefinitely.
256
- #
257
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
258
- #
259
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
260
- # @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
261
- def poll(
262
- batch_id,
263
- vector_store_id:,
264
- poll_interval: nil,
265
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
266
- request_options: {}
267
- )
268
- OpenAI::Helpers::ResourcePolling.poll_vector_store_file_batch(
269
- self,
270
- batch_id,
271
- vector_store_id: vector_store_id,
272
- poll_interval: poll_interval,
273
- timeout: timeout,
274
- request_options: request_options
275
- )
276
- end
277
-
278
- # Upload files concurrently, create a vector store file batch, and wait for
279
- # processing to finish.
280
- #
281
- # Existing file IDs can be included alongside new uploads. Upload concurrency is
282
- # bounded and defaults to 5. Set `max_concurrency` to 1 for sequential uploads.
283
- # Inputs are enumerated before requests begin so the 2,000-file API limit can be
284
- # checked without orphaning uploads. Stream-backed inputs are safely spooled during
285
- # enumeration, including IO objects yielded from block-scoped enumerators.
286
- #
287
- # @overload upload_and_poll(vector_store_id, files:, file_ids: [], max_concurrency: 5, attributes: nil, chunking_strategy: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
288
- #
289
- # @param vector_store_id [String] The ID of the vector store for which to create a File Batch.
290
- #
291
- # @param files [Enumerable<Pathname, StringIO, IO, String, OpenAI::FilePart>] Files to upload.
292
- #
293
- # @param file_ids [Array<String>] IDs of files that have already been uploaded.
294
- #
295
- # @param max_concurrency [Integer] Maximum number of simultaneous file uploads.
296
- #
297
- # @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to apply to every file.
298
- #
299
- # @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the files.
300
- #
301
- # @param poll_interval [Integer, Float, nil] How often to retrieve the batch. When omitted, the SDK honors the server's
302
- # polling hint and otherwise waits 5 seconds.
303
- #
304
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
305
- # indefinitely.
306
- #
307
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] Applied to every upload and to the
308
- # batch creation and polling requests. Idempotency keys are scoped to each
309
- # upload and the batch creation.
310
- #
311
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
312
- # @return [OpenAI::Models::VectorStores::VectorStoreFileBatch]
313
- def upload_and_poll(
314
- vector_store_id,
315
- files:,
316
- file_ids: [],
317
- max_concurrency: 5,
318
- attributes: nil,
319
- chunking_strategy: nil,
320
- poll_interval: nil,
321
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
322
- request_options: {}
323
- )
324
- OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
325
- request_options_scope = OpenAI::Internal::RequestOptionsScope.new(request_options)
326
-
327
- max_files = OpenAI::Internal::VectorStoreFileUploader::MAX_FILES_PER_BATCH
328
- if file_ids.length > max_files
329
- raise ArgumentError, "`file_ids` cannot contain more than #{max_files} entries"
330
- end
331
-
332
- uploaded = OpenAI::Internal::VectorStoreFileUploader
333
- .new(
334
- client: @client,
335
- max_concurrency: max_concurrency,
336
- request_options: request_options
337
- )
338
- .upload(files, max_files: max_files - file_ids.length)
339
-
340
- if uploaded.empty?
341
- raise(
342
- ArgumentError,
343
- "No `files` provided. Use `create_and_poll` when all files are already uploaded."
344
- )
345
- end
346
-
347
- create_and_poll(
348
- vector_store_id,
349
- file_ids: [*file_ids, *uploaded.map(&:id)],
350
- attributes: attributes,
351
- chunking_strategy: chunking_strategy,
352
- poll_interval: poll_interval,
353
- timeout: timeout,
354
- request_options: request_options_scope.child("file-batch")
355
- )
356
- end
357
-
358
180
  # @api private
359
181
  #
360
182
  # @param client [OpenAI::Client]
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "../../helpers/resource_polling"
4
-
5
3
  module OpenAI
6
4
  module Resources
7
5
  class VectorStores
@@ -51,58 +49,6 @@ module OpenAI
51
49
  )
52
50
  end
53
51
 
54
- # Attach a file to a vector store and wait for processing to finish.
55
- #
56
- # The returned file may have a `failed` or `cancelled` status; callers should
57
- # inspect the status and `last_error`. Polling intervals and the overall timeout
58
- # are in seconds. Finite timeouts include authentication and request replay
59
- # time and disable transport retries so the deadline remains strict. Set
60
- # `timeout` to `nil` to wait indefinitely and retain configured transport retries.
61
- #
62
- # @overload create_and_poll(vector_store_id, file_id:, attributes: nil, chunking_strategy: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
63
- #
64
- # @param vector_store_id [String] The ID of the vector store for which to create a File.
65
- #
66
- # @param file_id [String] A File ID to attach to the vector store.
67
- #
68
- # @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to attach to the vector store file.
69
- #
70
- # @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the file.
71
- #
72
- # @param poll_interval [Integer, Float, nil] How often to retrieve the file. When omitted, the SDK honors the server's
73
- # polling hint and otherwise waits 5 seconds.
74
- #
75
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
76
- # indefinitely.
77
- #
78
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
79
- #
80
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
81
- # @return [OpenAI::Models::VectorStores::VectorStoreFile]
82
- def create_and_poll(
83
- vector_store_id,
84
- file_id:,
85
- attributes: nil,
86
- chunking_strategy: nil,
87
- poll_interval: nil,
88
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
89
- request_options: {}
90
- )
91
- OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
92
-
93
- params = {file_id: file_id, request_options: request_options}
94
- params[:attributes] = attributes unless attributes.nil?
95
- params[:chunking_strategy] = chunking_strategy unless chunking_strategy.nil?
96
- file = create(vector_store_id, params)
97
- poll(
98
- file.id,
99
- vector_store_id: vector_store_id,
100
- poll_interval: poll_interval,
101
- timeout: timeout,
102
- request_options: request_options
103
- )
104
- end
105
-
106
52
  # Retrieves a vector store file.
107
53
  #
108
54
  # @overload retrieve(file_id, vector_store_id:, request_options: {})
@@ -257,140 +203,6 @@ module OpenAI
257
203
  )
258
204
  end
259
205
 
260
- # Wait for a vector store file to finish processing.
261
- #
262
- # The returned file may have a `failed` or `cancelled` status; callers should
263
- # inspect the status and `last_error`. Polling intervals and the overall timeout
264
- # are in seconds. Set `timeout` to `nil` to wait indefinitely.
265
- #
266
- # @overload poll(file_id, vector_store_id:, poll_interval: nil, timeout: 1800.0, request_options: {})
267
- #
268
- # @param file_id [String] The ID of the file being retrieved.
269
- #
270
- # @param vector_store_id [String] The ID of the vector store that the file belongs to.
271
- #
272
- # @param poll_interval [Integer, Float, nil] How often to retrieve the file. When omitted, the SDK honors the server's
273
- # polling hint and otherwise waits 5 seconds.
274
- #
275
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
276
- # indefinitely.
277
- #
278
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
279
- #
280
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
281
- # @return [OpenAI::Models::VectorStores::VectorStoreFile]
282
- def poll(
283
- file_id,
284
- vector_store_id:,
285
- poll_interval: nil,
286
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
287
- request_options: {}
288
- )
289
- OpenAI::Helpers::ResourcePolling.poll_vector_store_file(
290
- self,
291
- file_id,
292
- vector_store_id: vector_store_id,
293
- poll_interval: poll_interval,
294
- timeout: timeout,
295
- request_options: request_options
296
- )
297
- end
298
-
299
- # Upload a file and attach it to a vector store.
300
- #
301
- # Processing continues asynchronously; use {#upload_and_poll} to wait until the
302
- # file is ready.
303
- #
304
- # @overload upload(vector_store_id, file:, attributes: nil, chunking_strategy: nil, request_options: {})
305
- #
306
- # @param vector_store_id [String] The ID of the vector store to attach the file to.
307
- #
308
- # @param file [Pathname, StringIO, IO, String, OpenAI::FilePart] The file to upload.
309
- #
310
- # @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to attach to the vector store file.
311
- #
312
- # @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the file.
313
- #
314
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] Applied to the upload and attach
315
- # requests. Idempotency keys are scoped to each operation.
316
- #
317
- # @return [OpenAI::Models::VectorStores::VectorStoreFile]
318
- def upload(
319
- vector_store_id,
320
- file:,
321
- attributes: nil,
322
- chunking_strategy: nil,
323
- request_options: {}
324
- )
325
- request_options_scope = OpenAI::Internal::RequestOptionsScope.new(request_options)
326
- uploaded = @client.files.create(
327
- file: file,
328
- purpose: :assistants,
329
- request_options: request_options_scope.child("file-upload")
330
- )
331
- params = {
332
- file_id: uploaded.id,
333
- request_options: request_options_scope.child("vector-store-file")
334
- }
335
- params[:attributes] = attributes unless attributes.nil?
336
- params[:chunking_strategy] = chunking_strategy unless chunking_strategy.nil?
337
- create(vector_store_id, params)
338
- end
339
-
340
- # Upload a file, attach it to a vector store, and wait for processing to
341
- # finish.
342
- #
343
- # The returned file may have a `failed` or `cancelled` status; callers should
344
- # inspect the status and `last_error`.
345
- #
346
- # @overload upload_and_poll(vector_store_id, file:, attributes: nil, chunking_strategy: nil, poll_interval: nil, timeout: 1800.0, request_options: {})
347
- #
348
- # @param vector_store_id [String] The ID of the vector store to attach the file to.
349
- #
350
- # @param file [Pathname, StringIO, IO, String, OpenAI::FilePart] The file to upload.
351
- #
352
- # @param attributes [Hash{Symbol=>String, Float, Boolean}, nil] Attributes to attach to the vector store file.
353
- #
354
- # @param chunking_strategy [OpenAI::Models::AutoFileChunkingStrategyParam, OpenAI::Models::StaticFileChunkingStrategyObjectParam] The chunking strategy used to chunk the file.
355
- #
356
- # @param poll_interval [Integer, Float, nil] How often to retrieve the file. When omitted, the SDK honors the server's
357
- # polling hint and otherwise waits 5 seconds.
358
- #
359
- # @param timeout [Integer, Float, nil] Maximum total time to poll. Defaults to 30 minutes. Set to `nil` to wait
360
- # indefinitely.
361
- #
362
- # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] Applied to the upload, attach,
363
- # and polling requests. Idempotency keys are scoped to each write.
364
- #
365
- # @raise [ArgumentError, OpenAI::Errors::PollingError]
366
- # @return [OpenAI::Models::VectorStores::VectorStoreFile]
367
- def upload_and_poll(
368
- vector_store_id,
369
- file:,
370
- attributes: nil,
371
- chunking_strategy: nil,
372
- poll_interval: nil,
373
- timeout: OpenAI::Internal::Poller::DEFAULT_TIMEOUT,
374
- request_options: {}
375
- )
376
- OpenAI::Internal::Poller.validate!(poll_interval: poll_interval, timeout: timeout)
377
-
378
- attached = upload(
379
- vector_store_id,
380
- file: file,
381
- attributes: attributes,
382
- chunking_strategy: chunking_strategy,
383
- request_options: request_options
384
- )
385
- poll(
386
- attached.id,
387
- vector_store_id: vector_store_id,
388
- poll_interval: poll_interval,
389
- timeout: timeout,
390
- request_options: request_options
391
- )
392
- end
393
-
394
206
  # Retrieve the parsed contents of a vector store file.
395
207
  #
396
208
  # @overload content(file_id, vector_store_id:, request_options: {})
@@ -200,12 +200,12 @@ module OpenAI
200
200
  # Validates that the given payload was sent by OpenAI and parses the payload.
201
201
  #
202
202
  # @param payload [String] The raw webhook payload as a string
203
- # @param headers [Hash] The webhook headers
204
- # @param webhook_secret [String, nil] The webhook secret (optional, will use client webhook secret or ENV["OPENAI_WEBHOOK_SECRET"] if not provided)
205
203
  #
206
- # @return [OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent]
204
+ # @param headers [Hash{String, Symbol=>String}] The raw HTTP headers that came with the payload
207
205
  #
208
- # @raise [ArgumentError] if signature verification fails
206
+ # @param webhook_secret [String, nil] The webhook signing key
207
+ #
208
+ # @return [OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent]
209
209
  def unwrap(
210
210
  payload,
211
211
  headers = {},
@@ -219,12 +219,13 @@ module OpenAI
219
219
 
220
220
  # Validates whether or not the webhook payload was sent by OpenAI.
221
221
  #
222
- # @param payload [String] The webhook payload as a string
223
- # @param headers [Hash] The webhook headers
224
- # @param webhook_secret [String, nil] The webhook secret (optional, will use client webhook secret or ENV["OPENAI_WEBHOOK_SECRET"] if not provided)
225
- # @param tolerance [Integer] Maximum age of the webhook in seconds (default: 300 = 5 minutes)
222
+ # @param payload [String] The raw webhook payload as a string
223
+ #
224
+ # @param headers [Hash{String, Symbol=>String}] The raw HTTP headers that came with the payload
226
225
  #
227
- # @raise [ArgumentError] if the signature is invalid
226
+ # @param webhook_secret [String, nil] The webhook signing key
227
+ #
228
+ # @param tolerance [Integer] Maximum age of the webhook in seconds
228
229
  def verify_signature(
229
230
  payload,
230
231
  headers,
@@ -253,20 +254,10 @@ module OpenAI
253
254
  end
254
255
 
255
256
  signature_header, timestamp_header, webhook_id = normalized_headers.values_at(*header_names)
257
+ raise ArgumentError, "Missing required webhook-signature header" if signature_header.nil?
258
+ raise ArgumentError, "Missing required webhook-timestamp header" if timestamp_header.nil?
259
+ raise ArgumentError, "Missing required webhook-id header" if webhook_id.nil?
256
260
 
257
- if signature_header.nil?
258
- raise ArgumentError, "Missing required webhook-signature header"
259
- end
260
-
261
- if timestamp_header.nil?
262
- raise ArgumentError, "Missing required webhook-timestamp header"
263
- end
264
-
265
- if webhook_id.nil?
266
- raise ArgumentError, "Missing required webhook-id header"
267
- end
268
-
269
- # Validate timestamp to prevent replay attacks
270
261
  begin
271
262
  timestamp_seconds = timestamp_header.to_i
272
263
  rescue ArgumentError
@@ -282,14 +273,10 @@ module OpenAI
282
273
  raise OpenAI::Errors::InvalidWebhookSignatureError, "Webhook timestamp is too new"
283
274
  end
284
275
 
285
- # Extract signatures from v1,<base64> format
286
- # The signature header can have multiple values, separated by spaces.
287
- # Each value is in the format v1,<base64>. We should accept if any match.
288
276
  signatures = signature_header.split.map do |part|
289
277
  part.start_with?("v1,") ? part[3..] : part
290
278
  end
291
279
 
292
- # Decode the secret if it starts with whsec_
293
280
  decoded_secret = if webhook_secret.start_with?("whsec_")
294
281
  webhook_secret[6..].unpack1("m0")
295
282
  else
@@ -298,13 +285,10 @@ module OpenAI
298
285
 
299
286
  raise ArgumentError, "The webhook secret must not be empty" if decoded_secret.empty?
300
287
 
301
- # Create the signed payload: {webhook_id}.{timestamp}.{payload}
302
288
  signed_payload = "#{webhook_id}.#{timestamp_header}.#{payload}"
303
289
 
304
- # Compute HMAC-SHA256 signature
305
290
  expected_signature = [OpenSSL::HMAC.digest("sha256", decoded_secret, signed_payload)].pack("m0")
306
291
 
307
- # Accept if any signature matches using timing-safe comparison
308
292
  return if signatures.any? { |signature| OpenSSL.secure_compare(expected_signature, signature) }
309
293
 
310
294
  raise(
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.103.0"
4
+ VERSION = "0.104.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -152,10 +152,12 @@ require_relative "openai/models/beta/beta_response_audio_transcript_delta_event"
152
152
  require_relative "openai/models/beta/beta_response_audio_done_event"
153
153
  require_relative "openai/models/beta/beta_response_audio_delta_event"
154
154
  require_relative "openai/models/reasoning_effort"
155
+ require_relative "openai/helpers/models/chat/parsed"
155
156
  require_relative "openai/models/chat/chat_completion_message"
156
157
  require_relative "openai/models/responses/response_input_file"
157
158
  require_relative "openai/models/responses/response_input_image"
158
159
  require_relative "openai/models/responses/response_input_text"
160
+ require_relative "openai/helpers/models/responses/parsed"
159
161
  require_relative "openai/models/responses/response_output_text"
160
162
  require_relative "openai/models/responses/response_output_refusal"
161
163
  require_relative "openai/models/graders/score_model_grader"
@@ -288,6 +290,7 @@ require_relative "openai/models/admin/organization/invite_delete_params"
288
290
  require_relative "openai/models/admin/organization/invite_delete_response"
289
291
  require_relative "openai/models/admin/organization/invite_list_params"
290
292
  require_relative "openai/models/admin/organization/invite_retrieve_params"
293
+ require_relative "openai/models/admin/organization/oci_external_storage_provider"
291
294
  require_relative "openai/models/admin/organization/organization_data_retention"
292
295
  require_relative "openai/models/admin/organization/organization_spend_alert"
293
296
  require_relative "openai/models/admin/organization/organization_spend_alert_deleted"
@@ -304,6 +307,8 @@ require_relative "openai/models/admin/organization/projects/api_key_delete_param
304
307
  require_relative "openai/models/admin/organization/projects/api_key_delete_response"
305
308
  require_relative "openai/models/admin/organization/projects/api_key_list_params"
306
309
  require_relative "openai/models/admin/organization/projects/api_key_retrieve_params"
310
+ require_relative "openai/models/admin/organization/projects/api_key_update_params"
311
+ require_relative "openai/models/admin/organization/projects/api_key_update_scopes_params"
307
312
  require_relative "openai/models/admin/organization/projects/certificate_activate_params"
308
313
  require_relative "openai/models/admin/organization/projects/certificate_activate_response"
309
314
  require_relative "openai/models/admin/organization/projects/certificate_deactivate_params"
@@ -408,6 +413,8 @@ require_relative "openai/models/admin/organization/usage_completions_params"
408
413
  require_relative "openai/models/admin/organization/usage_completions_response"
409
414
  require_relative "openai/models/admin/organization/usage_costs_params"
410
415
  require_relative "openai/models/admin/organization/usage_costs_response"
416
+ require_relative "openai/models/admin/organization/usage_decisions_params"
417
+ require_relative "openai/models/admin/organization/usage_decisions_response"
411
418
  require_relative "openai/models/admin/organization/usage_embeddings_params"
412
419
  require_relative "openai/models/admin/organization/usage_embeddings_response"
413
420
  require_relative "openai/models/admin/organization/usage_file_search_calls_params"
@@ -556,6 +563,7 @@ require_relative "openai/models/beta/agents/vaults/mcp_oauth_token_endpoint_auth
556
563
  require_relative "openai/models/beta/agents/vaults/mcp_oauth_token_endpoint_auth_rotate_param"
557
564
  require_relative "openai/models/beta/agents/vault_status"
558
565
  require_relative "openai/models/beta/agents/vault_status_filter"
566
+ require_relative "openai/models/beta/agents/vault_update_params"
559
567
  require_relative "openai/models/beta/agent_send_subagent_input_call_item"
560
568
  require_relative "openai/models/beta/agent_session"
561
569
  require_relative "openai/models/beta/agent_session_assistant_message"
@@ -1070,6 +1078,15 @@ require_relative "openai/models/live/commentary_appended_event"
1070
1078
  require_relative "openai/models/live/commentary_append_event"
1071
1079
  require_relative "openai/models/live/custom_voice"
1072
1080
  require_relative "openai/models/live/data_channel_config"
1081
+ require_relative "openai/models/live/decision_create_event"
1082
+ require_relative "openai/models/live/decision_event"
1083
+ require_relative "openai/models/live/decision_item_created_event"
1084
+ require_relative "openai/models/live/decision_item_create_event"
1085
+ require_relative "openai/models/live/decision_item_deleted_event"
1086
+ require_relative "openai/models/live/decision_item_delete_event"
1087
+ require_relative "openai/models/live/decisions_delegation_config"
1088
+ require_relative "openai/models/live/decisions_delegation_update_config"
1089
+ require_relative "openai/models/live/decision_trigger"
1073
1090
  require_relative "openai/models/live/delegation_created_event"
1074
1091
  require_relative "openai/models/live/error"
1075
1092
  require_relative "openai/models/live/error_event"
@@ -1093,6 +1110,9 @@ require_relative "openai/models/live/live_create_response"
1093
1110
  require_relative "openai/models/live/media_session_config"
1094
1111
  require_relative "openai/models/live/media_session_fork_config"
1095
1112
  require_relative "openai/models/live/output_audio_delta_event"
1113
+ require_relative "openai/models/live/output_audio_fixture_played_event"
1114
+ require_relative "openai/models/live/output_audio_fixture_play_event"
1115
+ require_relative "openai/models/live/output_audio_fixture_playing_event"
1096
1116
  require_relative "openai/models/live/output_transcript_delta_event"
1097
1117
  require_relative "openai/models/live/response_create_event"
1098
1118
  require_relative "openai/models/live/response_event"
@@ -1119,6 +1139,8 @@ require_relative "openai/models/live/session_updated_event"
1119
1139
  require_relative "openai/models/live/session_update_event"
1120
1140
  require_relative "openai/models/live/session_usage"
1121
1141
  require_relative "openai/models/live/session_usage_updated_event"
1142
+ require_relative "openai/models/live/sideband_client_event"
1143
+ require_relative "openai/models/live/sideband_server_event"
1122
1144
  require_relative "openai/models/live/thinking_appended_event"
1123
1145
  require_relative "openai/models/live/thinking_append_event"
1124
1146
  require_relative "openai/models/metadata"
@@ -1489,6 +1511,7 @@ require_relative "openai/models/webhooks/webhook_endpoint"
1489
1511
  require_relative "openai/models/webhooks/webhook_endpoint_list"
1490
1512
  require_relative "openai/models/webhooks/webhook_endpoint_test_result"
1491
1513
  require_relative "openai/models/webhooks/webhook_endpoint_with_secret"
1514
+ require_relative "openai/helpers/models/webhooks/webhook_endpoint_with_secret"
1492
1515
  require_relative "openai/models/webhooks/webhook_event_type_list"
1493
1516
  require_relative "openai/models/webhooks/webhook_list_params"
1494
1517
  require_relative "openai/models/webhooks/webhook_retrieve_params"
@@ -1539,9 +1562,11 @@ require_relative "openai/resources/batches"
1539
1562
  require_relative "openai/resources/beta"
1540
1563
  require_relative "openai/resources/beta/agents"
1541
1564
  require_relative "openai/resources/beta/agents/environments"
1565
+ require_relative "openai/helpers/beta/agents/files"
1542
1566
  require_relative "openai/resources/beta/agents/environments/files"
1543
1567
  require_relative "openai/resources/beta/agents/environments/templates"
1544
1568
  require_relative "openai/resources/beta/agents/sessions"
1569
+ require_relative "openai/helpers/beta/agents/artifacts"
1545
1570
  require_relative "openai/resources/beta/agents/sessions/artifacts"
1546
1571
  require_relative "openai/resources/beta/agents/sessions/events"
1547
1572
  require_relative "openai/resources/beta/agents/sessions/items"
@@ -1621,6 +1646,10 @@ require_relative "openai/resources/vector_stores/files"
1621
1646
  require_relative "openai/resources/videos"
1622
1647
  require_relative "openai/resources/webhooks"
1623
1648
  require_relative "openai/resources/webhooks/event_types"
1649
+ require_relative "openai/helpers/models/responses/response"
1650
+ require_relative "openai/helpers/files"
1651
+ require_relative "openai/helpers/vector_stores/file_batches"
1652
+ require_relative "openai/helpers/vector_stores/files"
1624
1653
  require_relative "openai/helpers/streaming/response_events"
1625
1654
  require_relative "openai/helpers/streaming/response_stream"
1626
1655
  require_relative "openai/helpers/streaming/exceptions"
@@ -1636,3 +1665,5 @@ require_relative "openai/helpers/beta/agents/creation_stream"
1636
1665
  require_relative "openai/helpers/agents/session_stream"
1637
1666
  require_relative "openai/helpers/beta/agents/function_tool"
1638
1667
  require_relative "openai/helpers/agents/message"
1668
+
1669
+ require_relative "openai/helpers/admin/organization/projects/api_keys"