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
@@ -16,11 +16,17 @@ module OpenAI
16
16
  # Creates a reusable agent without storing credentials. See
17
17
  # [agent configuration](https://developers.openai.com/api/docs/guides/agents-api/configuration).
18
18
  #
19
- # @overload create(model:, instructions: nil, metadata: nil, multi_agent: nil, name: nil, reasoning: nil, service_tier: nil, text: nil, tools: nil, request_options: {})
19
+ # @overload create(model:, compaction: nil, experimental: nil, instructions: nil, metadata: nil, multi_agent: nil, name: nil, reasoning: nil, service_tier: nil, text: nil, tools: nil, request_options: {})
20
20
  #
21
21
  # @param model [String]
22
22
  # The model to use for the agent. The requested model name is preserved.
23
23
  #
24
+ # @param compaction [OpenAI::Models::Beta::AgentCreateParams::Compaction, nil]
25
+ # Context compaction settings. Omission or null enables background compaction.
26
+ #
27
+ # @param experimental [OpenAI::Models::Beta::AgentCreateParams::Experimental]
28
+ # Experimental agent settings. All experimental features default to disabled.
29
+ #
24
30
  # @param instructions [String, nil]
25
31
  # Additional instructions appended to the agent's default base instructions. Omit
26
32
  # or set to null to add no custom instructions.
@@ -95,11 +101,20 @@ module OpenAI
95
101
  # Updates a reusable agent. See
96
102
  # [agent configuration](https://developers.openai.com/api/docs/guides/agents-api/configuration).
97
103
  #
98
- # @overload update(agent_id, instructions: nil, metadata: nil, model: nil, multi_agent: nil, name: nil, reasoning: nil, service_tier: nil, text: nil, tools: nil, request_options: {})
104
+ # @overload update(agent_id, compaction: nil, experimental: nil, instructions: nil, metadata: nil, model: nil, multi_agent: nil, name: nil, reasoning: nil, service_tier: nil, text: nil, tools: nil, request_options: {})
99
105
  #
100
106
  # @param agent_id [String]
101
107
  # The ID of the reusable agent.
102
108
  #
109
+ # @param compaction [OpenAI::Models::Beta::AgentUpdateParams::Compaction, nil]
110
+ # Context compaction settings. Omit to keep the current settings. A supplied
111
+ # object replaces the settings; null or an empty object enables background
112
+ # compaction.
113
+ #
114
+ # @param experimental [OpenAI::Models::Beta::AgentUpdateParams::Experimental]
115
+ # Experimental settings to merge by key. Omitted settings keep their current
116
+ # values.
117
+ #
103
118
  # @param instructions [String, nil]
104
119
  # Additional instructions appended to the agent's default base instructions. Omit
105
120
  # to leave unchanged.
@@ -72,17 +72,17 @@ module OpenAI
72
72
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
73
73
  # content type.
74
74
  #
75
- # @overload edit(image:, prompt:, background: nil, input_fidelity: nil, mask: nil, model: nil, n: nil, output_compression: nil, output_format: nil, partial_images: nil, quality: nil, response_format: nil, safety_identifier: nil, size: nil, user: nil, request_options: {})
75
+ # @overload edit(image:, prompt:, background: nil, input_fidelity: nil, markup: nil, mask: nil, model: nil, n: nil, output_compression: nil, output_format: nil, partial_images: nil, quality: nil, response_format: nil, safety_identifier: nil, size: nil, user: nil, request_options: {})
76
76
  #
77
77
  # @param image [Pathname, StringIO, IO, String, OpenAI::FilePart, Array<Pathname, StringIO, IO, String, OpenAI::FilePart>]
78
78
  # The image(s) to edit. Must be a supported image file or an array of images.
79
79
  #
80
- # For the GPT image models (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`,
81
- # `gpt-image-2`, `gpt-image-2-2026-04-21`, `gpt-image-2.5-sunburst`,
82
- # `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`,
83
- # `gpt-image-2.5-flare-2026-09-08`, and `chatgpt-image-latest`), each image should
84
- # be a `png`, `webp`, or `jpg` file less than 50MB. You can provide up to 16
85
- # images.
80
+ # For the GPT image models (`gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`,
81
+ # `gpt-image-2-2026-04-21`, `gpt-image-2.5-sunburst`,
82
+ # `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`, and
83
+ # `gpt-image-2.5-flare-2026-09-08`), each image should be a `png`, `webp`, or
84
+ # `jpg` file less than 50MB. You can provide up to 16 images.
85
+ # `chatgpt-image-latest` follows the same input constraints as GPT image models.
86
86
  #
87
87
  # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
88
88
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
@@ -106,8 +106,17 @@ module OpenAI
106
106
  # @param input_fidelity [Symbol, OpenAI::Models::ImageEditParams::InputFidelity, nil]
107
107
  # Control how much effort the model will exert to match the style and features,
108
108
  # especially facial features, of input images. Supports `high` and `low` on
109
- # `gpt-image-1` and `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For
110
- # `gpt-image-2`, omit this parameter. Defaults to `low` on supported models.
109
+ # `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For `gpt-image-2`, omit
110
+ # this parameter. Defaults to `low` on supported models.
111
+ #
112
+ # @param markup [Pathname, StringIO, IO, String, OpenAI::FilePart]
113
+ # A transparent PNG overlaid on the first image to guide the edit. Must match that
114
+ # image's dimensions after orientation and contain transparent pixels. Supports
115
+ # GPT Image 2.5 and 2.6. Cannot be combined with mask.
116
+ #
117
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
118
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
119
+ # content type.
111
120
  #
112
121
  # @param mask [Pathname, StringIO, IO, String, OpenAI::FilePart]
113
122
  # An additional image whose fully transparent areas (e.g. where alpha is zero)
@@ -220,17 +229,17 @@ module OpenAI
220
229
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
221
230
  # content type.
222
231
  #
223
- # @overload edit_stream_raw(image:, prompt:, background: nil, input_fidelity: nil, mask: nil, model: nil, n: nil, output_compression: nil, output_format: nil, partial_images: nil, quality: nil, response_format: nil, safety_identifier: nil, size: nil, user: nil, request_options: {})
232
+ # @overload edit_stream_raw(image:, prompt:, background: nil, input_fidelity: nil, markup: nil, mask: nil, model: nil, n: nil, output_compression: nil, output_format: nil, partial_images: nil, quality: nil, response_format: nil, safety_identifier: nil, size: nil, user: nil, request_options: {})
224
233
  #
225
234
  # @param image [Pathname, StringIO, IO, String, OpenAI::FilePart, Array<Pathname, StringIO, IO, String, OpenAI::FilePart>]
226
235
  # The image(s) to edit. Must be a supported image file or an array of images.
227
236
  #
228
- # For the GPT image models (`gpt-image-1`, `gpt-image-1-mini`, `gpt-image-1.5`,
229
- # `gpt-image-2`, `gpt-image-2-2026-04-21`, `gpt-image-2.5-sunburst`,
230
- # `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`,
231
- # `gpt-image-2.5-flare-2026-09-08`, and `chatgpt-image-latest`), each image should
232
- # be a `png`, `webp`, or `jpg` file less than 50MB. You can provide up to 16
233
- # images.
237
+ # For the GPT image models (`gpt-image-1-mini`, `gpt-image-1.5`, `gpt-image-2`,
238
+ # `gpt-image-2-2026-04-21`, `gpt-image-2.5-sunburst`,
239
+ # `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`, and
240
+ # `gpt-image-2.5-flare-2026-09-08`), each image should be a `png`, `webp`, or
241
+ # `jpg` file less than 50MB. You can provide up to 16 images.
242
+ # `chatgpt-image-latest` follows the same input constraints as GPT image models.
234
243
  #
235
244
  # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
236
245
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
@@ -254,8 +263,17 @@ module OpenAI
254
263
  # @param input_fidelity [Symbol, OpenAI::Models::ImageEditParams::InputFidelity, nil]
255
264
  # Control how much effort the model will exert to match the style and features,
256
265
  # especially facial features, of input images. Supports `high` and `low` on
257
- # `gpt-image-1` and `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For
258
- # `gpt-image-2`, omit this parameter. Defaults to `low` on supported models.
266
+ # `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For `gpt-image-2`, omit
267
+ # this parameter. Defaults to `low` on supported models.
268
+ #
269
+ # @param markup [Pathname, StringIO, IO, String, OpenAI::FilePart]
270
+ # A transparent PNG overlaid on the first image to guide the edit. Must match that
271
+ # image's dimensions after orientation and contain transparent pixels. Supports
272
+ # GPT Image 2.5 and 2.6. Cannot be combined with mask.
273
+ #
274
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
275
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
276
+ # content type.
259
277
  #
260
278
  # @param mask [Pathname, StringIO, IO, String, OpenAI::FilePart]
261
279
  # An additional image whose fully transparent areas (e.g. where alpha is zero)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.113.0"
4
+ VERSION = "0.115.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -253,6 +253,13 @@ require_relative "openai/models/admin/organization/certificate_update_params"
253
253
  require_relative "openai/models/admin/organization/cost_quantity_unit"
254
254
  require_relative "openai/models/admin/organization/data_retention_retrieve_params"
255
255
  require_relative "openai/models/admin/organization/data_retention_update_params"
256
+ require_relative "openai/models/admin/organization/external_key"
257
+ require_relative "openai/models/admin/organization/external_key_create_params"
258
+ require_relative "openai/models/admin/organization/external_key_delete_params"
259
+ require_relative "openai/models/admin/organization/external_key_list_params"
260
+ require_relative "openai/models/admin/organization/external_key_retrieve_params"
261
+ require_relative "openai/models/admin/organization/external_key_validate_params"
262
+ require_relative "openai/models/admin/organization/external_key_validate_response"
256
263
  require_relative "openai/models/admin/organization/external_storage_configuration"
257
264
  require_relative "openai/models/admin/organization/external_storage_create_params"
258
265
  require_relative "openai/models/admin/organization/external_storage_deleted"
@@ -1553,6 +1560,7 @@ require_relative "openai/resources/admin/organization/admin_api_keys"
1553
1560
  require_relative "openai/resources/admin/organization/audit_logs"
1554
1561
  require_relative "openai/resources/admin/organization/certificates"
1555
1562
  require_relative "openai/resources/admin/organization/data_retention"
1563
+ require_relative "openai/resources/admin/organization/external_keys"
1556
1564
  require_relative "openai/resources/admin/organization/external_storage"
1557
1565
  require_relative "openai/resources/admin/organization/groups"
1558
1566
  require_relative "openai/resources/admin/organization/groups/roles"
@@ -116,18 +116,7 @@ module OpenAI
116
116
  class SidebandConnection
117
117
  include Enumerable
118
118
  ClientEvent = T.type_alias do
119
- T.any(
120
- OpenAI::Live::SessionUpdateEvent,
121
- OpenAI::Live::InputAudioMuteEvent,
122
- OpenAI::Live::InputAudioUnmuteEvent,
123
- OpenAI::Live::InstructionsAppendEvent,
124
- OpenAI::Live::ThinkingAppendEvent,
125
- OpenAI::Live::CommentaryAppendEvent,
126
- OpenAI::Live::ResponseItemCreateEvent,
127
- OpenAI::Live::ResponseCreateEvent,
128
- OpenAI::Live::SessionCloseEvent,
129
- T::Hash[T.any(String, Symbol), T.anything]
130
- )
119
+ T.any(OpenAI::Live::SidebandClientEvent::Variants, T::Hash[T.any(String, Symbol), T.anything])
131
120
  end
132
121
 
133
122
  Elem = type_member { {fixed: Connection::ServerEvent} }
@@ -100,6 +100,11 @@ module OpenAI
100
100
  def abort
101
101
  end
102
102
 
103
+ # @api private
104
+ sig { void }
105
+ def enable_no_status_recovery
106
+ end
107
+
103
108
  sig { returns(T::Boolean) }
104
109
  def closed?
105
110
  end
@@ -41,6 +41,11 @@ module OpenAI
41
41
  def abort
42
42
  end
43
43
 
44
+ # @api private
45
+ sig { void }
46
+ def enable_no_status_recovery
47
+ end
48
+
44
49
  # @api private
45
50
  sig { returns(T::Boolean) }
46
51
  def aborted?
@@ -55,8 +55,13 @@ module OpenAI
55
55
  end
56
56
 
57
57
  # @api private
58
- sig { params(event: ClientEvent).returns(OpenAI::Internal::AnyHash) }
59
- def encode_client_event(event)
58
+ sig { params(event: ClientEvent).void }
59
+ def send_response_create(event)
60
+ end
61
+
62
+ # @api private
63
+ sig { params(event: ClientEvent, response_create: T::Boolean).returns(OpenAI::Internal::AnyHash) }
64
+ def encode_client_event(event, response_create: false)
60
65
  end
61
66
 
62
67
  # @api private
@@ -11,6 +11,16 @@ module OpenAI
11
11
  #
12
12
  # Supported types: {NilClass} {String} {Symbol} {Integer} {Float} {OpenAI::Boolean}, {OpenAI::EnumOf}, {OpenAI::UnionOf}, {OpenAI::ArrayOf}, {OpenAI::BaseModel}
13
13
  module StructuredOutput
14
+ # @api private
15
+ module RequestWithFormatUpdate
16
+ sig { returns(T.nilable(OpenAI::Helpers::StructuredOutput::JsonSchemaConverter::Input)) }
17
+ attr_accessor :text_model
18
+ end
19
+
20
+ # @api private
21
+ sig { params(request: OpenAI::Internal::AnyHash).returns(OpenAI::Internal::AnyHash) }
22
+ def self.prepare_configuration_updates!(request)
23
+ end
14
24
  end
15
25
  end
16
26
  end
@@ -71,7 +71,7 @@ module OpenAI
71
71
 
72
72
  # @api private
73
73
  sig { returns(Elem) }
74
- protected def item_type
74
+ def item_type
75
75
  end
76
76
 
77
77
  # @api private
@@ -71,7 +71,7 @@ module OpenAI
71
71
 
72
72
  # @api private
73
73
  sig { returns(Elem) }
74
- protected def item_type
74
+ def item_type
75
75
  end
76
76
 
77
77
  # @api private
@@ -102,6 +102,11 @@ module OpenAI
102
102
  def coerce(value, state:)
103
103
  end
104
104
 
105
+ # @api private
106
+ sig { params(value: T.anything).returns(T.nilable(T.anything)) }
107
+ def variant_for_dump(value)
108
+ end
109
+
105
110
  # @api private
106
111
  sig do
107
112
  override
@@ -0,0 +1,301 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ module Models
5
+
6
+ module Admin
7
+
8
+ module Organization
9
+
10
+ class ExternalKey < OpenAI::Internal::Type::BaseModel
11
+
12
+ OrHash = T.type_alias do
13
+ T.any(
14
+ OpenAI::Admin::Organization::ExternalKey,
15
+ OpenAI::Internal::AnyHash
16
+ )
17
+ end
18
+
19
+ sig { returns(String) }
20
+ attr_accessor :id
21
+
22
+ sig { returns(T::Array[String]) }
23
+ attr_accessor :api_project_ids
24
+
25
+ sig { returns(Integer) }
26
+ attr_accessor :created_at
27
+
28
+ sig { returns(String) }
29
+ attr_accessor :name
30
+
31
+ sig { returns(String) }
32
+ attr_accessor :object
33
+
34
+ sig { returns(String) }
35
+ attr_accessor :type
36
+
37
+ sig { returns(String) }
38
+ attr_accessor :workspace_id
39
+
40
+ sig { returns(T.nilable(String)) }
41
+ attr_reader :audience
42
+
43
+ sig { params(audience: String).void }
44
+ attr_writer :audience
45
+
46
+ sig { returns(T.nilable(String)) }
47
+ attr_reader :external_id
48
+
49
+ sig { params(external_id: String).void }
50
+ attr_writer :external_id
51
+
52
+ sig { returns(T.nilable(String)) }
53
+ attr_reader :key_name
54
+
55
+ sig { params(key_name: String).void }
56
+ attr_writer :key_name
57
+
58
+ sig { returns(T.nilable(String)) }
59
+ attr_reader :key_version
60
+
61
+ sig { params(key_version: String).void }
62
+ attr_writer :key_version
63
+
64
+ sig { returns(T.nilable(String)) }
65
+ attr_reader :kms_arn
66
+
67
+ sig { params(kms_arn: String).void }
68
+ attr_writer :kms_arn
69
+
70
+ sig { returns(T.nilable(String)) }
71
+ attr_reader :kms_key_location
72
+
73
+ sig { params(kms_key_location: String).void }
74
+ attr_writer :kms_key_location
75
+
76
+ sig { returns(T.nilable(String)) }
77
+ attr_reader :kms_key_name
78
+
79
+ sig { params(kms_key_name: String).void }
80
+ attr_writer :kms_key_name
81
+
82
+ sig { returns(T.nilable(String)) }
83
+ attr_reader :kms_key_ring_name
84
+
85
+ sig { params(kms_key_ring_name: String).void }
86
+ attr_writer :kms_key_ring_name
87
+
88
+ sig { returns(T.nilable(String)) }
89
+ attr_reader :kms_key_version
90
+
91
+ sig { params(kms_key_version: String).void }
92
+ attr_writer :kms_key_version
93
+
94
+ sig { returns(T.nilable(String)) }
95
+ attr_reader :kms_project_id
96
+
97
+ sig { params(kms_project_id: String).void }
98
+ attr_writer :kms_project_id
99
+
100
+ sig { returns(T.nilable(OpenAI::Admin::Organization::ExternalKey::Purpose::TaggedSymbol)) }
101
+ attr_reader :purpose
102
+
103
+ sig { params(purpose: OpenAI::Admin::Organization::ExternalKey::Purpose::OrSymbol).void }
104
+ attr_writer :purpose
105
+
106
+ sig { returns(T.nilable(String)) }
107
+ attr_reader :role_arn
108
+
109
+ sig { params(role_arn: String).void }
110
+ attr_writer :role_arn
111
+
112
+ sig { returns(T.nilable(String)) }
113
+ attr_reader :tenant_id
114
+
115
+ sig { params(tenant_id: String).void }
116
+ attr_writer :tenant_id
117
+
118
+ sig { returns(T.nilable(String)) }
119
+ attr_reader :vault_uri
120
+
121
+ sig { params(vault_uri: String).void }
122
+ attr_writer :vault_uri
123
+
124
+ sig { returns(T.nilable(String)) }
125
+ attr_reader :workload_identity_pool_id
126
+
127
+ sig { params(workload_identity_pool_id: String).void }
128
+ attr_writer :workload_identity_pool_id
129
+
130
+ sig { returns(T.nilable(String)) }
131
+ attr_reader :workload_identity_project_number
132
+
133
+ sig { params(workload_identity_project_number: String).void }
134
+ attr_writer :workload_identity_project_number
135
+
136
+ sig { returns(T.nilable(String)) }
137
+ attr_reader :workload_identity_provider_id
138
+
139
+ sig { params(workload_identity_provider_id: String).void }
140
+ attr_writer :workload_identity_provider_id
141
+
142
+ sig do
143
+ params(
144
+
145
+ id: String,
146
+
147
+ api_project_ids: T::Array[String],
148
+
149
+ created_at: Integer,
150
+
151
+ name: String,
152
+
153
+ object: String,
154
+
155
+ type: String,
156
+
157
+ workspace_id: String,
158
+
159
+ audience: String,
160
+
161
+ external_id: String,
162
+
163
+ key_name: String,
164
+
165
+ key_version: String,
166
+
167
+ kms_arn: String,
168
+
169
+ kms_key_location: String,
170
+
171
+ kms_key_name: String,
172
+
173
+ kms_key_ring_name: String,
174
+
175
+ kms_key_version: String,
176
+
177
+ kms_project_id: String,
178
+
179
+ purpose: OpenAI::Admin::Organization::ExternalKey::Purpose::OrSymbol,
180
+
181
+ role_arn: String,
182
+
183
+ tenant_id: String,
184
+
185
+ vault_uri: String,
186
+
187
+ workload_identity_pool_id: String,
188
+
189
+ workload_identity_project_number: String,
190
+
191
+ workload_identity_provider_id: String
192
+ )
193
+ .returns(T.attached_class)
194
+ end
195
+ def self.new(
196
+
197
+ id:,
198
+
199
+ api_project_ids:,
200
+
201
+ created_at:,
202
+
203
+ name:,
204
+
205
+ object:,
206
+
207
+ type:,
208
+
209
+ workspace_id:,
210
+
211
+ audience: nil,
212
+
213
+ external_id: nil,
214
+
215
+ key_name: nil,
216
+
217
+ key_version: nil,
218
+
219
+ kms_arn: nil,
220
+
221
+ kms_key_location: nil,
222
+
223
+ kms_key_name: nil,
224
+
225
+ kms_key_ring_name: nil,
226
+
227
+ kms_key_version: nil,
228
+
229
+ kms_project_id: nil,
230
+
231
+ purpose: nil,
232
+
233
+ role_arn: nil,
234
+
235
+ tenant_id: nil,
236
+
237
+ vault_uri: nil,
238
+
239
+ workload_identity_pool_id: nil,
240
+
241
+ workload_identity_project_number: nil,
242
+
243
+ workload_identity_provider_id: nil
244
+ )
245
+ end
246
+
247
+ sig do
248
+ override.returns(
249
+ {
250
+ id: String,
251
+ api_project_ids: T::Array[String],
252
+ created_at: Integer,
253
+ name: String,
254
+ object: String,
255
+ type: String,
256
+ workspace_id: String,
257
+ audience: String,
258
+ external_id: String,
259
+ key_name: String,
260
+ key_version: String,
261
+ kms_arn: String,
262
+ kms_key_location: String,
263
+ kms_key_name: String,
264
+ kms_key_ring_name: String,
265
+ kms_key_version: String,
266
+ kms_project_id: String,
267
+ purpose: OpenAI::Admin::Organization::ExternalKey::Purpose::TaggedSymbol,
268
+ role_arn: String,
269
+ tenant_id: String,
270
+ vault_uri: String,
271
+ workload_identity_pool_id: String,
272
+ workload_identity_project_number: String,
273
+ workload_identity_provider_id: String
274
+ }
275
+ )
276
+ end
277
+ def to_hash
278
+ end
279
+
280
+ module Purpose
281
+ extend OpenAI::Internal::Type::Enum
282
+
283
+ TaggedSymbol = T.type_alias { T.all(Symbol, OpenAI::Admin::Organization::ExternalKey::Purpose) }
284
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
285
+
286
+ EKM = T.let(:ekm, OpenAI::Admin::Organization::ExternalKey::Purpose::TaggedSymbol)
287
+ PSP_DECRYPTION = T.let(:psp_decryption, OpenAI::Admin::Organization::ExternalKey::Purpose::TaggedSymbol)
288
+
289
+ sig { override.returns(T::Array[OpenAI::Admin::Organization::ExternalKey::Purpose::TaggedSymbol]) }
290
+ def self.values
291
+ end
292
+ end
293
+
294
+ end
295
+
296
+ end
297
+
298
+ end
299
+
300
+ end
301
+ end