openai 0.114.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 (226) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -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/helpers/chat/tool_runner.rb +1 -1
  7. data/lib/openai/helpers/live/websocket.rb +31 -0
  8. data/lib/openai/helpers/realtime/connection.rb +33 -0
  9. data/lib/openai/helpers/realtime/connection_manager.rb +1 -0
  10. data/lib/openai/helpers/realtime/conversation_item_variant_resolver.rb +5 -0
  11. data/lib/openai/helpers/realtime/recovery.rb +5 -1
  12. data/lib/openai/helpers/realtime/translation.rb +5 -0
  13. data/lib/openai/helpers/realtime/transports/async_websocket.rb +19 -0
  14. data/lib/openai/helpers/responses_websocket/connection.rb +53 -15
  15. data/lib/openai/helpers/responses_websocket/connection_manager.rb +1 -0
  16. data/lib/openai/helpers/responses_websocket/connection_resources.rb +1 -1
  17. data/lib/openai/helpers/structured_output/response_parser.rb +1 -0
  18. data/lib/openai/helpers/structured_output.rb +58 -0
  19. data/lib/openai/helpers/websocket/connection_manager.rb +11 -0
  20. data/lib/openai/helpers/websocket/resource.rb +1 -0
  21. data/lib/openai/helpers/websocket/typed_connection.rb +1 -0
  22. data/lib/openai/internal/type/array_of.rb +1 -1
  23. data/lib/openai/internal/type/hash_of.rb +1 -1
  24. data/lib/openai/internal/type/request_parameters.rb +2 -1
  25. data/lib/openai/internal/type/union.rb +18 -6
  26. data/lib/openai/models/admin/organization/external_key.rb +169 -0
  27. data/lib/openai/models/admin/organization/external_key_create_params.rb +311 -0
  28. data/lib/openai/models/admin/organization/external_key_delete_params.rb +24 -0
  29. data/lib/openai/models/admin/organization/external_key_list_params.rb +69 -0
  30. data/lib/openai/models/admin/organization/external_key_retrieve_params.rb +24 -0
  31. data/lib/openai/models/admin/organization/external_key_validate_params.rb +24 -0
  32. data/lib/openai/models/admin/organization/external_key_validate_response.rb +20 -0
  33. data/lib/openai/models/audio/speech_model.rb +12 -0
  34. data/lib/openai/models/audio_model.rb +15 -0
  35. data/lib/openai/models/beta/agent.rb +49 -1
  36. data/lib/openai/models/beta/agent_create_params.rb +51 -1
  37. data/lib/openai/models/beta/agent_session.rb +75 -2
  38. data/lib/openai/models/beta/agent_update_params.rb +62 -1
  39. data/lib/openai/models/beta/agents/session_create_params.rb +94 -2
  40. data/lib/openai/models/beta/agents/session_list_params.rb +16 -1
  41. data/lib/openai/models/beta/agents/session_update_params.rb +50 -5
  42. data/lib/openai/models/beta/assistant_update_params.rb +18 -0
  43. data/lib/openai/models/beta/beta_response.rb +224 -1
  44. data/lib/openai/models/beta/beta_response_configuration_update_item.rb +64 -3
  45. data/lib/openai/models/beta/beta_response_configuration_update_item_param.rb +64 -4
  46. data/lib/openai/models/beta/beta_response_input_item.rb +2 -3
  47. data/lib/openai/models/beta/beta_response_item.rb +2 -2
  48. data/lib/openai/models/beta/beta_response_tool_search_output_item_param.rb +6 -6
  49. data/lib/openai/models/beta/beta_responses_client_event.rb +20 -1
  50. data/lib/openai/models/beta/beta_tool.rb +6 -6
  51. data/lib/openai/models/beta/response_compact_params.rb +6 -0
  52. data/lib/openai/models/beta/response_create_params.rb +6 -0
  53. data/lib/openai/models/chat_model.rb +6 -0
  54. data/lib/openai/models/conversations/conversation_item.rb +2 -2
  55. data/lib/openai/models/image_edit_params.rb +46 -25
  56. data/lib/openai/models/live/fork_server_event.rb +43 -3
  57. data/lib/openai/models/live/server_event.rb +43 -3
  58. data/lib/openai/models/live/sideband_client_event.rb +40 -1
  59. data/lib/openai/models/live/sideband_server_event.rb +43 -3
  60. data/lib/openai/models/realtime/audio_transcription.rb +15 -0
  61. data/lib/openai/models/realtime/conversation_item_added.rb +2 -2
  62. data/lib/openai/models/realtime/conversation_item_create_event.rb +2 -2
  63. data/lib/openai/models/realtime/conversation_item_created_event.rb +2 -2
  64. data/lib/openai/models/realtime/conversation_item_done.rb +2 -2
  65. data/lib/openai/models/realtime/realtime_response.rb +2 -2
  66. data/lib/openai/models/realtime/realtime_response_create_params.rb +2 -2
  67. data/lib/openai/models/realtime/realtime_server_event.rb +2 -2
  68. data/lib/openai/models/realtime/realtime_session.rb +18 -0
  69. data/lib/openai/models/realtime/realtime_session_create_request.rb +18 -0
  70. data/lib/openai/models/realtime/realtime_session_create_response.rb +18 -0
  71. data/lib/openai/models/realtime/response_output_item_added_event.rb +2 -2
  72. data/lib/openai/models/realtime/response_output_item_done_event.rb +2 -2
  73. data/lib/openai/models/responses/response.rb +221 -1
  74. data/lib/openai/models/responses/response_compact_params.rb +6 -0
  75. data/lib/openai/models/responses/response_configuration_update_item.rb +50 -3
  76. data/lib/openai/models/responses/response_configuration_update_item_param.rb +50 -4
  77. data/lib/openai/models/responses/response_input_item.rb +2 -3
  78. data/lib/openai/models/responses/response_item.rb +2 -2
  79. data/lib/openai/models/responses/response_tool_search_output_item_param.rb +6 -6
  80. data/lib/openai/models/responses/responses_client_event.rb +14 -1
  81. data/lib/openai/models/responses/tool.rb +6 -6
  82. data/lib/openai/net_http_client.rb +6 -0
  83. data/lib/openai/providers/vertex.rb +0 -10
  84. data/lib/openai/resources/admin/organization/external_keys.rb +132 -0
  85. data/lib/openai/resources/admin/organization.rb +4 -0
  86. data/lib/openai/resources/audio/speech.rb +8 -0
  87. data/lib/openai/resources/audio/translations.rb +8 -0
  88. data/lib/openai/resources/beta/agents/sessions.rb +22 -6
  89. data/lib/openai/resources/beta/agents.rb +17 -2
  90. data/lib/openai/resources/images.rb +36 -18
  91. data/lib/openai/version.rb +1 -1
  92. data/lib/openai.rb +8 -0
  93. data/rbi/openai/helpers/live/websocket.rbi +1 -12
  94. data/rbi/openai/helpers/realtime/connection.rbi +5 -0
  95. data/rbi/openai/helpers/realtime/transports/async_websocket.rbi +5 -0
  96. data/rbi/openai/helpers/responses_websocket/connection.rbi +7 -2
  97. data/rbi/openai/helpers/structured_output.rbi +10 -0
  98. data/rbi/openai/internal/type/array_of.rbi +1 -1
  99. data/rbi/openai/internal/type/hash_of.rbi +1 -1
  100. data/rbi/openai/internal/type/union.rbi +5 -0
  101. data/rbi/openai/models/admin/organization/external_key.rbi +301 -0
  102. data/rbi/openai/models/admin/organization/external_key_create_params.rbi +532 -0
  103. data/rbi/openai/models/admin/organization/external_key_delete_params.rbi +57 -0
  104. data/rbi/openai/models/admin/organization/external_key_list_params.rbi +129 -0
  105. data/rbi/openai/models/admin/organization/external_key_retrieve_params.rbi +57 -0
  106. data/rbi/openai/models/admin/organization/external_key_validate_params.rbi +57 -0
  107. data/rbi/openai/models/admin/organization/external_key_validate_response.rbi +50 -0
  108. data/rbi/openai/models/beta/agent.rbi +103 -1
  109. data/rbi/openai/models/beta/agent_create_params.rbi +109 -0
  110. data/rbi/openai/models/beta/agent_session.rbi +136 -3
  111. data/rbi/openai/models/beta/agent_update_params.rbi +120 -0
  112. data/rbi/openai/models/beta/agents/session_create_params.rbi +153 -0
  113. data/rbi/openai/models/beta/agents/session_list_params.rbi +19 -0
  114. data/rbi/openai/models/beta/agents/session_update_params.rbi +94 -6
  115. data/rbi/openai/models/beta/beta_response.rbi +394 -0
  116. data/rbi/openai/models/beta/beta_response_configuration_update_item.rbi +113 -3
  117. data/rbi/openai/models/beta/beta_response_configuration_update_item_param.rbi +125 -4
  118. data/rbi/openai/models/beta/beta_response_tool_search_output_item_param.rbi +6 -6
  119. data/rbi/openai/models/beta/beta_responses_client_event.rbi +17 -0
  120. data/rbi/openai/models/beta/beta_tool.rbi +6 -6
  121. data/rbi/openai/models/decision_create_params.rbi +4 -1
  122. data/rbi/openai/models/image_edit_params.rbi +49 -24
  123. data/rbi/openai/models/live/fork_server_event.rbi +65 -1
  124. data/rbi/openai/models/live/server_event.rbi +65 -1
  125. data/rbi/openai/models/live/sideband_client_event.rbi +60 -0
  126. data/rbi/openai/models/live/sideband_server_event.rbi +65 -1
  127. data/rbi/openai/models/realtime/conversation_item_added.rbi +6 -3
  128. data/rbi/openai/models/realtime/conversation_item_create_event.rbi +6 -3
  129. data/rbi/openai/models/realtime/conversation_item_created_event.rbi +6 -3
  130. data/rbi/openai/models/realtime/conversation_item_done.rbi +6 -3
  131. data/rbi/openai/models/realtime/realtime_response.rbi +8 -4
  132. data/rbi/openai/models/realtime/realtime_response_create_params.rbi +8 -4
  133. data/rbi/openai/models/realtime/realtime_server_event.rbi +6 -3
  134. data/rbi/openai/models/realtime/response_output_item_added_event.rbi +6 -3
  135. data/rbi/openai/models/realtime/response_output_item_done_event.rbi +6 -3
  136. data/rbi/openai/models/responses/response.rbi +394 -0
  137. data/rbi/openai/models/responses/response_configuration_update_item.rbi +76 -3
  138. data/rbi/openai/models/responses/response_configuration_update_item_param.rbi +74 -4
  139. data/rbi/openai/models/responses/response_tool_search_output_item_param.rbi +6 -6
  140. data/rbi/openai/models/responses/responses_client_event.rbi +17 -0
  141. data/rbi/openai/models/responses/tool.rbi +6 -6
  142. data/rbi/openai/net_http_client.rbi +5 -0
  143. data/rbi/openai/resources/admin/organization/external_keys.rbi +86 -0
  144. data/rbi/openai/resources/admin/organization.rbi +3 -0
  145. data/rbi/openai/resources/audio/speech.rbi +8 -0
  146. data/rbi/openai/resources/audio/translations.rbi +6 -0
  147. data/rbi/openai/resources/beta/agents/sessions.rbi +18 -2
  148. data/rbi/openai/resources/beta/agents.rbi +15 -0
  149. data/rbi/openai/resources/images.rbi +34 -16
  150. data/rbi/openai/resources/responses.rbi +2 -0
  151. data/realtime.md +6 -0
  152. data/responses-websocket.md +53 -0
  153. data/sig/openai/helpers/live/websocket.rbs +1 -9
  154. data/sig/openai/helpers/realtime/connection.rbs +3 -0
  155. data/sig/openai/helpers/realtime/transports/async_websocket.rbs +3 -0
  156. data/sig/openai/helpers/responses_websocket/connection.rbs +7 -1
  157. data/sig/openai/helpers/structured_output.rbs +9 -0
  158. data/sig/openai/internal/type/union.rbs +4 -0
  159. data/sig/openai/models/admin/organization/external_key.rbs +186 -0
  160. data/sig/openai/models/admin/organization/external_key_create_params.rbs +423 -0
  161. data/sig/openai/models/admin/organization/external_key_delete_params.rbs +27 -0
  162. data/sig/openai/models/admin/organization/external_key_list_params.rbs +81 -0
  163. data/sig/openai/models/admin/organization/external_key_retrieve_params.rbs +27 -0
  164. data/sig/openai/models/admin/organization/external_key_validate_params.rbs +27 -0
  165. data/sig/openai/models/admin/organization/external_key_validate_response.rbs +17 -0
  166. data/sig/openai/models/admin/organization/external_storage_create_params.rbs +72 -2
  167. data/sig/openai/models/audio/speech_create_params.rbs +15 -2
  168. data/sig/openai/models/audio/transcription_create_params.rbs +30 -2
  169. data/sig/openai/models/audio/voice_create_params.rbs +47 -2
  170. data/sig/openai/models/beta/agent.rbs +54 -2
  171. data/sig/openai/models/beta/agent_create_params.rbs +54 -0
  172. data/sig/openai/models/beta/agent_session.rbs +82 -3
  173. data/sig/openai/models/beta/agent_update_params.rbs +64 -0
  174. data/sig/openai/models/beta/agents/session_create_params.rbs +91 -0
  175. data/sig/openai/models/beta/agents/session_list_params.rbs +20 -0
  176. data/sig/openai/models/beta/agents/session_update_params.rbs +48 -6
  177. data/sig/openai/models/beta/assistant_create_params.rbs +5 -2
  178. data/sig/openai/models/beta/beta_response.rbs +223 -0
  179. data/sig/openai/models/beta/beta_response_configuration_update_item.rbs +58 -2
  180. data/sig/openai/models/beta/beta_response_configuration_update_item_param.rbs +58 -2
  181. data/sig/openai/models/beta/beta_response_tool_search_output_item_param.rbs +4 -4
  182. data/sig/openai/models/beta/beta_responses_client_event.rbs +17 -0
  183. data/sig/openai/models/beta/beta_tool.rbs +4 -4
  184. data/sig/openai/models/beta/response_create_params.rbs +5 -2
  185. data/sig/openai/models/beta/responses/input_token_count_params.rbs +10 -2
  186. data/sig/openai/models/beta/thread_create_and_run_params.rbs +11 -5
  187. data/sig/openai/models/beta/thread_create_params.rbs +11 -5
  188. data/sig/openai/models/beta/threads/message_create_params.rbs +6 -3
  189. data/sig/openai/models/beta/threads/run_create_params.rbs +6 -3
  190. data/sig/openai/models/decision_create_params.rbs +27 -2
  191. data/sig/openai/models/eval_create_params.rbs +25 -4
  192. data/sig/openai/models/evals/run_create_params.rbs +52 -8
  193. data/sig/openai/models/image_edit_params.rbs +47 -16
  194. data/sig/openai/models/live/fork_server_event.rbs +39 -0
  195. data/sig/openai/models/live/server_event.rbs +39 -0
  196. data/sig/openai/models/live/session_accept_params.rbs +39 -2
  197. data/sig/openai/models/live/sideband_client_event.rbs +32 -0
  198. data/sig/openai/models/live/sideband_server_event.rbs +39 -0
  199. data/sig/openai/models/realtime/conversation_item.rbs +1 -0
  200. data/sig/openai/models/responses/input_token_count_params.rbs +10 -2
  201. data/sig/openai/models/responses/response.rbs +223 -0
  202. data/sig/openai/models/responses/response_configuration_update_item.rbs +45 -2
  203. data/sig/openai/models/responses/response_configuration_update_item_param.rbs +45 -2
  204. data/sig/openai/models/responses/response_create_params.rbs +5 -2
  205. data/sig/openai/models/responses/response_tool_search_output_item_param.rbs +4 -4
  206. data/sig/openai/models/responses/responses_client_event.rbs +17 -0
  207. data/sig/openai/models/responses/tool.rbs +4 -4
  208. data/sig/openai/models/video_edit_params.rbs +11 -2
  209. data/sig/openai/models/video_extend_params.rbs +11 -2
  210. data/sig/openai/net_http_client.rbs +3 -0
  211. data/sig/openai/resources/admin/organization/external_keys.rbs +70 -0
  212. data/sig/openai/resources/admin/organization/external_storage.rbs +23 -1
  213. data/sig/openai/resources/admin/organization.rbs +2 -0
  214. data/sig/openai/resources/audio/speech.rbs +2 -1
  215. data/sig/openai/resources/audio/transcriptions.rbs +14 -2
  216. data/sig/openai/resources/audio/voices.rbs +14 -1
  217. data/sig/openai/resources/beta/agents/sessions.rbs +4 -0
  218. data/sig/openai/resources/beta/agents.rbs +4 -0
  219. data/sig/openai/resources/beta/responses/input_tokens.rbs +2 -1
  220. data/sig/openai/resources/beta/responses.rbs +4 -2
  221. data/sig/openai/resources/decisions.rbs +7 -1
  222. data/sig/openai/resources/images.rbs +2 -0
  223. data/sig/openai/resources/responses/input_tokens.rbs +2 -1
  224. data/sig/openai/resources/responses.rbs +5 -2
  225. data/sig/openai/resources/videos.rbs +2 -2
  226. metadata +25 -1
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Resources
5
+ class Admin
6
+ class Organization
7
+ class ExternalKeys
8
+ # Add an external key config for an organization
9
+ #
10
+ # @overload create(body:, request_options: {})
11
+ #
12
+ # @param body [OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure]
13
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
14
+ #
15
+ # @return [OpenAI::Models::Admin::Organization::ExternalKey]
16
+ #
17
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyCreateParams
18
+ def create(params)
19
+ parsed, options = OpenAI::Admin::Organization::ExternalKeyCreateParams.dump_request(params)
20
+ @client.request(
21
+ method: :post,
22
+ path: "organization/external_keys",
23
+ body: parsed[:body],
24
+ model: OpenAI::Admin::Organization::ExternalKey,
25
+ security: {admin_api_key_auth: true},
26
+ options: options
27
+ )
28
+ end
29
+
30
+ # Retrieve a stored external key registration for the user's organization.
31
+ #
32
+ # @overload retrieve(external_key_id, request_options: {})
33
+ #
34
+ # @param external_key_id [String]
35
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
36
+ #
37
+ # @return [OpenAI::Models::Admin::Organization::ExternalKey]
38
+ #
39
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyRetrieveParams
40
+ def retrieve(external_key_id, params = {})
41
+ @client.request(
42
+ method: :get,
43
+ path: ["organization/external_keys/%1$s", external_key_id],
44
+ model: OpenAI::Admin::Organization::ExternalKey,
45
+ security: {admin_api_key_auth: true},
46
+ options: params[:request_options]
47
+ )
48
+ end
49
+
50
+ # List the external key configs registered on the user's organization
51
+ #
52
+ # @overload list(after: nil, limit: nil, order: nil, purpose: nil, request_options: {})
53
+ #
54
+ # @param after [String, nil]
55
+ #
56
+ # @param limit [Integer]
57
+ #
58
+ # @param order [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyListParams::Order]
59
+ #
60
+ # @param purpose [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyListParams::Purpose]
61
+ # Filter by key purpose. When omitted, returns keys of all purposes.
62
+ #
63
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
64
+ #
65
+ # @return [OpenAI::Internal::CursorPage<OpenAI::Models::Admin::Organization::ExternalKey>]
66
+ #
67
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyListParams
68
+ def list(params = {})
69
+ parsed, options = OpenAI::Admin::Organization::ExternalKeyListParams.dump_request(params)
70
+ query = OpenAI::Internal::Util.encode_query_params(parsed)
71
+ @client.request(
72
+ method: :get,
73
+ path: "organization/external_keys",
74
+ query: query,
75
+ page: OpenAI::Internal::CursorPage,
76
+ model: OpenAI::Admin::Organization::ExternalKey,
77
+ security: {admin_api_key_auth: true},
78
+ options: options
79
+ )
80
+ end
81
+
82
+ # Delete an external key config for the user's organization
83
+ #
84
+ # @overload delete(external_key_id, request_options: {})
85
+ #
86
+ # @param external_key_id [String]
87
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
88
+ #
89
+ # @return [OpenAI::Models::Admin::Organization::ExternalKey]
90
+ #
91
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyDeleteParams
92
+ def delete(external_key_id, params = {})
93
+ @client.request(
94
+ method: :delete,
95
+ path: ["organization/external_keys/%1$s", external_key_id],
96
+ model: OpenAI::Admin::Organization::ExternalKey,
97
+ security: {admin_api_key_auth: true},
98
+ options: params[:request_options]
99
+ )
100
+ end
101
+
102
+ # Validate an external key config for the user's organization
103
+ #
104
+ # @overload validate(external_key_id, request_options: {})
105
+ #
106
+ # @param external_key_id [String]
107
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil]
108
+ #
109
+ # @return [OpenAI::Models::Admin::Organization::ExternalKeyValidateResponse]
110
+ #
111
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyValidateParams
112
+ def validate(external_key_id, params = {})
113
+ @client.request(
114
+ method: :post,
115
+ path: ["organization/external_keys/%1$s/validate", external_key_id],
116
+ model: OpenAI::Models::Admin::Organization::ExternalKeyValidateResponse,
117
+ security: {admin_api_key_auth: true},
118
+ options: params[:request_options]
119
+ )
120
+ end
121
+
122
+ # @api private
123
+ #
124
+ # @param client [OpenAI::Client]
125
+ def initialize(client:)
126
+ @client = client
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -29,6 +29,9 @@ module OpenAI
29
29
  # @return [OpenAI::Resources::Admin::Organization::DataRetention]
30
30
  attr_reader :data_retention
31
31
 
32
+ # @return [OpenAI::Resources::Admin::Organization::ExternalKeys]
33
+ attr_reader :external_keys
34
+
32
35
  # @return [OpenAI::Resources::Admin::Organization::ExternalStorage]
33
36
  attr_reader :external_storage
34
37
 
@@ -57,6 +60,7 @@ module OpenAI
57
60
  @groups = OpenAI::Resources::Admin::Organization::Groups.new(client: client)
58
61
  @roles = OpenAI::Resources::Admin::Organization::Roles.new(client: client)
59
62
  @data_retention = OpenAI::Resources::Admin::Organization::DataRetention.new(client: client)
63
+ @external_keys = OpenAI::Resources::Admin::Organization::ExternalKeys.new(client: client)
60
64
  @external_storage = OpenAI::Resources::Admin::Organization::ExternalStorage.new(client: client)
61
65
  @spend_limit = OpenAI::Resources::Admin::Organization::SpendLimit.new(client: client)
62
66
  @spend_alerts = OpenAI::Resources::Admin::Organization::SpendAlerts.new(client: client)
@@ -9,6 +9,14 @@ module OpenAI
9
9
  #
10
10
  # Returns the audio file content, or a stream of audio events.
11
11
  #
12
+ # The `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts`, `gpt-4o-mini-tts-2025-03-20`, and
13
+ # `gpt-4o-mini-tts-2025-12-15` models are deprecated and scheduled to shut down on
14
+ # January 6, 2027. These examples use the existing Speech API; for new
15
+ # integrations, migrate to `gpt-realtime-2.1-mini` through the
16
+ # [Realtime API](https://developers.openai.com/api/docs/guides/realtime). See the
17
+ # [deprecation schedule](https://developers.openai.com/api/docs/deprecations) for
18
+ # migration details.
19
+ #
12
20
  # @overload create(input:, model:, voice:, instructions: nil, response_format: nil, speed: nil, stream_format: nil, request_options: {})
13
21
  #
14
22
  # @param input [String]
@@ -5,8 +5,16 @@ module OpenAI
5
5
  class Audio
6
6
  # Turn audio into text or text into audio.
7
7
  class Translations
8
+ # @deprecated
9
+ #
8
10
  # Translates audio into English.
9
11
  #
12
+ # This endpoint supports only `whisper-1`. The endpoint and model are deprecated
13
+ # and scheduled to shut down on February 26, 2027. Migrate to
14
+ # `/v1/realtime/translations`, which requires a separate integration. See the
15
+ # [deprecation schedule](https://developers.openai.com/api/docs/deprecations) for
16
+ # details.
17
+ #
10
18
  # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
11
19
  # metadata. Use `OpenAI::FilePart` when you need to override the filename or
12
20
  # content type.
@@ -32,7 +32,7 @@ module OpenAI
32
32
  # the session or streams its events when stream is true. See
33
33
  # [running sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions).
34
34
  #
35
- # @overload create(environment:, agent: nil, agent_id: nil, input: nil, metadata: nil, spend_control: nil, vault_ids: nil, request_options: {})
35
+ # @overload create(environment:, agent: nil, agent_id: nil, input: nil, metadata: nil, review: nil, spend_control: nil, vault_ids: nil, request_options: {})
36
36
  #
37
37
  # @param environment [OpenAI::Models::Beta::EnvironmentParam::None, OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted, OpenAI::Models::Beta::EnvironmentParam::SelfHosted]
38
38
  # An inline execution environment or a reference to an environment template.
@@ -55,6 +55,9 @@ module OpenAI
55
55
  # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
56
56
  # characters. Omission or null defaults to an empty map.
57
57
  #
58
+ # @param review [Symbol, OpenAI::Models::Beta::Agents::SessionCreateParams::Review]
59
+ # Action review mode. Omit to use none.
60
+ #
58
61
  # @param spend_control [OpenAI::Models::Beta::Agents::SessionCreateParams::SpendControl, nil]
59
62
  # Optional spending limit in USD cents. Omission or null creates an unlimited
60
63
  # session.
@@ -92,7 +95,7 @@ module OpenAI
92
95
  # the session or streams its events when stream is true. See
93
96
  # [running sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions).
94
97
  #
95
- # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, output_type: nil, tool_handlers: {}, metadata: nil, spend_control: nil, vault_ids: nil, request_options: {})
98
+ # @overload create_streaming(environment:, agent: nil, agent_id: nil, input: nil, output_type: nil, tool_handlers: {}, metadata: nil, review: nil, spend_control: nil, vault_ids: nil, request_options: {})
96
99
  #
97
100
  # @param environment [OpenAI::Models::Beta::EnvironmentParam::None, OpenAI::Models::Beta::EnvironmentParam::OpenAIHosted, OpenAI::Models::Beta::EnvironmentParam::SelfHosted]
98
101
  # An inline execution environment or a reference to an environment template.
@@ -115,6 +118,9 @@ module OpenAI
115
118
  # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
116
119
  # characters. Omission or null defaults to an empty map.
117
120
  #
121
+ # @param review [Symbol, OpenAI::Models::Beta::Agents::SessionCreateParams::Review]
122
+ # Action review mode. Omit to use none.
123
+ #
118
124
  # @param spend_control [OpenAI::Models::Beta::Agents::SessionCreateParams::SpendControl, nil]
119
125
  # Optional spending limit in USD cents. Omission or null creates an unlimited
120
126
  # session.
@@ -188,23 +194,27 @@ module OpenAI
188
194
  )
189
195
  end
190
196
 
191
- # Updates session metadata, model, reasoning effort, or service tier. Model
197
+ # Updates session tools, metadata, model, reasoning effort, or service tier. Model
192
198
  # settings apply to subsequent turns. Omitted fields are unchanged. See
193
199
  # [managing sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions/manage).
194
200
  #
195
- # @overload update(session_id, agent: nil, metadata: nil, spend_control: nil, request_options: {})
201
+ # @overload update(session_id, agent: nil, metadata: nil, review: nil, spend_control: nil, request_options: {})
196
202
  #
197
203
  # @param session_id [String]
198
204
  # The ID of the session.
199
205
  #
200
206
  # @param agent [OpenAI::Models::Beta::Agents::SessionUpdateParams::Agent]
201
- # Model settings for subsequent turns. Omitted fields stay unchanged.
207
+ # Agent settings to update on this session. Omitted fields stay unchanged.
202
208
  #
203
209
  # @param metadata [Hash{Symbol=>String}, nil]
204
210
  # Replaces all metadata. Omit to leave unchanged, or pass null or {} to clear it.
205
211
  # Up to 16 string key-value pairs, with keys up to 64 and values up to 512
206
212
  # characters.
207
213
  #
214
+ # @param review [Symbol, OpenAI::Models::Beta::Agents::SessionUpdateParams::Review]
215
+ # Default action review for new root turns. Existing turns and their subagents
216
+ # keep their review mode.
217
+ #
208
218
  # @param spend_control [OpenAI::Models::Beta::Agents::SessionUpdateParams::SpendControl, nil]
209
219
  # Omit to retain the limit; null or a null limit removes it without resetting
210
220
  # spend.
@@ -231,7 +241,7 @@ module OpenAI
231
241
  # order. See
232
242
  # [managing sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions/manage).
233
243
  #
234
- # @overload list(after: nil, agent_id: nil, limit: nil, order: nil, request_options: {})
244
+ # @overload list(after: nil, agent_id: nil, limit: nil, metadata: nil, order: nil, request_options: {})
235
245
  #
236
246
  # @param after [String]
237
247
  # Return resources after this resource ID in the selected order.
@@ -243,6 +253,12 @@ module OpenAI
243
253
  # @param limit [Integer]
244
254
  # The maximum number of resources to return, between 1 and 100. Defaults to 20.
245
255
  #
256
+ # @param metadata [Hash{Symbol=>String}]
257
+ # Exact string matches supplied as `metadata[key]=value`. All supplied pairs must
258
+ # match. Up to 16 pairs, with keys from 1 to 64 characters and values up to 512
259
+ # characters. New sessions and metadata updates may take time to appear in
260
+ # filtered results.
261
+ #
246
262
  # @param order [Symbol, OpenAI::Models::Beta::Agents::SessionListParams::Order]
247
263
  # The order in which resources are returned. Defaults to `desc`.
248
264
  #
@@ -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.114.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