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
@@ -14,7 +14,7 @@ module OpenAI
14
14
  # @return [nil]
15
15
  def create(**params)
16
16
  event_params = params.reject { |key, _value| key == :type || key == "type" }
17
- @connection.send_event(**event_params, type: :"response.create")
17
+ @connection.send_response_create(**event_params, type: :"response.create")
18
18
  end
19
19
  end
20
20
  end
@@ -136,6 +136,7 @@ module OpenAI
136
136
  else
137
137
  end
138
138
 
139
+ model = parsed.text_model if parsed.is_a?(RequestWithFormatUpdate)
139
140
  [model, tool_models]
140
141
  end
141
142
 
@@ -11,6 +11,64 @@ 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
+ # Carries a visible format update's local parser without adding a wire field.
15
+ # A nil model means the update explicitly cleared typed parsing.
16
+ # @api private
17
+ module RequestWithFormatUpdate
18
+ attr_accessor :text_model
19
+ end
20
+
21
+ private_constant :RequestWithFormatUpdate
22
+
23
+ # Convert schemas in input items after the SDK has copied the request or event.
24
+ #
25
+ # @api private
26
+ def self.prepare_configuration_updates!(request)
27
+ input = request[:input] || request["input"]
28
+ items = request[:items] || request["items"]
29
+ if input.is_a?(Array)
30
+ input.each do |item|
31
+ prepare_configuration_update!(item) do |model|
32
+ request.extend(RequestWithFormatUpdate) unless request.is_a?(RequestWithFormatUpdate)
33
+ request.text_model = model
34
+ end
35
+ end
36
+ end
37
+
38
+ items.each { |item| prepare_configuration_update!(item) } if items.is_a?(Array)
39
+ prepare_configuration_update!(request[:item] || request["item"])
40
+ request
41
+ end
42
+
43
+ def self.prepare_configuration_update!(item)
44
+ return unless item.is_a?(Hash)
45
+ type = item[:type] || item["type"]
46
+ return unless type == :configuration_update || type == "configuration_update"
47
+
48
+ text = item[:text] || item["text"]
49
+ return unless text.is_a?(Hash)
50
+ unless text.key?(:format) || text.key?("format")
51
+ key = text.key?(:format_) ? :format_ : "format_"
52
+ text[:format] = text.delete(key) if text.key?(key)
53
+ end
54
+
55
+ format = text[:format] || text["format"]
56
+ return unless format.is_a?(Hash)
57
+ type = format[:type] || format["type"]
58
+ model = nil
59
+ if type == :json_schema || type == "json_schema"
60
+ key = format.key?(:schema) ? :schema : "schema"
61
+ schema = format[key]
62
+ if schema.is_a?(JsonSchemaConverter)
63
+ model = schema
64
+ format[key] = JsonSchemaConverter.to_json_schema(schema)
65
+ end
66
+ end
67
+
68
+ yield model if block_given?
69
+ end
70
+
71
+ private_class_method :prepare_configuration_update!
14
72
  end
15
73
  end
16
74
  end
@@ -20,6 +20,7 @@ module OpenAI
20
20
 
21
21
  # @api private
22
22
  def initialize(
23
+ client:,
23
24
  transport:,
24
25
  transport_options:,
25
26
  default_transport:,
@@ -32,6 +33,7 @@ module OpenAI
32
33
  reserved_options_error_message: nil,
33
34
  connection_options: {}
34
35
  )
36
+ @client = client
35
37
  @transport = transport
36
38
  @default_transport = default_transport
37
39
  @connection_class = connection_class
@@ -52,6 +54,15 @@ module OpenAI
52
54
  transport = @transport || @default_transport.call
53
55
  raise ArgumentError, @transport_error_message unless transport.respond_to?(:open)
54
56
 
57
+ requester = @client.requester
58
+ unless @transport || (requester.instance_of?(OpenAI::NetHTTPClient) && requester.default_configuration?)
59
+ raise(
60
+ ArgumentError,
61
+ "This HTTP transport's connection policy cannot be used by the default WebSocket " \
62
+ "transport. Pass a compatible WebSocket transport with its own connection settings."
63
+ )
64
+ end
65
+
55
66
  @request.call do |request, mark_handshake_completed|
56
67
  block_error = nil
57
68
  transport
@@ -21,6 +21,7 @@ module OpenAI
21
21
  error_factory = -> (url:, **options) { BindingConnectionError.new(url: url, **options) }
22
22
  ConnectionManager
23
23
  .new(
24
+ client: @client,
24
25
  transport: transport,
25
26
  transport_options: transport_options,
26
27
  default_transport: lambda do
@@ -38,6 +38,7 @@ module OpenAI
38
38
  raise ArgumentError, client_event_error_message
39
39
  end
40
40
 
41
+ OpenAI::Helpers::StructuredOutput.prepare_configuration_updates!(payload) if @client_event
41
42
  payload = coerce_client_event(payload) if @client_event
42
43
  payload = OpenAI::Internal::Type::Converter.dump(@client_event, payload) if @client_event
43
44
  validate_event_tree!(payload, json_only: true)
@@ -146,7 +146,7 @@ module OpenAI
146
146
  # @api private
147
147
  #
148
148
  # @return [generic<Elem>]
149
- protected def item_type = @item_type_fn.call
149
+ def item_type = @item_type_fn.call
150
150
 
151
151
  # @api private
152
152
  #
@@ -153,7 +153,7 @@ module OpenAI
153
153
  # @api private
154
154
  #
155
155
  # @return [generic<Elem>]
156
- protected def item_type = @item_type_fn.call
156
+ def item_type = @item_type_fn.call
157
157
 
158
158
  # @api private
159
159
  #
@@ -30,7 +30,8 @@ module OpenAI
30
30
  in Hash
31
31
  options = OpenAI::Internal::Util.coerce_hash!(dumped[:request_options]).to_h
32
32
  request_options = state.fetch(:can_retry) ? options : {**options, max_retries: 0}
33
- [dumped.except(:request_options), request_options]
33
+ body = OpenAI::Helpers::StructuredOutput.prepare_configuration_updates!(dumped.except(:request_options))
34
+ [body, request_options]
34
35
  else
35
36
  [dumped, nil]
36
37
  end
@@ -216,6 +216,23 @@ module OpenAI
216
216
  state[:strictness] = strictness
217
217
  end
218
218
 
219
+ # @api private
220
+ #
221
+ # @param value [Object]
222
+ #
223
+ # @return [OpenAI::Internal::Type::Converter, Class, nil]
224
+ def variant_for_dump(value)
225
+ target = resolve_variant(value)
226
+ return target if target
227
+
228
+ known_variants.each do
229
+ target = _2.call
230
+ return target if target === value
231
+ end
232
+
233
+ nil
234
+ end
235
+
219
236
  # @api private
220
237
  #
221
238
  # @param value [Object]
@@ -226,15 +243,10 @@ module OpenAI
226
243
  #
227
244
  # @return [Object]
228
245
  def dump(value, state:)
229
- if (target = resolve_variant(value))
246
+ if (target = variant_for_dump(value))
230
247
  return OpenAI::Internal::Type::Converter.dump(target, value, state: state)
231
248
  end
232
249
 
233
- known_variants.each do
234
- target = _2.call
235
- return OpenAI::Internal::Type::Converter.dump(target, value, state: state) if target === value
236
- end
237
-
238
250
  super
239
251
  end
240
252
 
@@ -0,0 +1,169 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Admin
6
+ module Organization
7
+ # @see OpenAI::Resources::Admin::Organization::ExternalKeys#create
8
+ class ExternalKey < OpenAI::Internal::Type::BaseModel
9
+ # @!attribute id
10
+ #
11
+ # @return [String]
12
+ required :id, String
13
+
14
+ # @!attribute api_project_ids
15
+ #
16
+ # @return [Array<String>]
17
+ required :api_project_ids, OpenAI::Internal::Type::ArrayOf[String]
18
+
19
+ # @!attribute created_at
20
+ #
21
+ # @return [Integer]
22
+ required :created_at, Integer
23
+
24
+ # @!attribute name
25
+ #
26
+ # @return [String]
27
+ required :name, String
28
+
29
+ # @!attribute object
30
+ #
31
+ # @return [String]
32
+ required :object, String
33
+
34
+ # @!attribute type
35
+ #
36
+ # @return [String]
37
+ required :type, String
38
+
39
+ # @!attribute workspace_id
40
+ #
41
+ # @return [String]
42
+ required :workspace_id, String
43
+
44
+ # @!attribute audience
45
+ #
46
+ # @return [String, nil]
47
+ optional :audience, String
48
+
49
+ # @!attribute external_id
50
+ #
51
+ # @return [String, nil]
52
+ optional :external_id, String
53
+
54
+ # @!attribute key_name
55
+ #
56
+ # @return [String, nil]
57
+ optional :key_name, String
58
+
59
+ # @!attribute key_version
60
+ #
61
+ # @return [String, nil]
62
+ optional :key_version, String
63
+
64
+ # @!attribute kms_arn
65
+ #
66
+ # @return [String, nil]
67
+ optional :kms_arn, String
68
+
69
+ # @!attribute kms_key_location
70
+ #
71
+ # @return [String, nil]
72
+ optional :kms_key_location, String
73
+
74
+ # @!attribute kms_key_name
75
+ #
76
+ # @return [String, nil]
77
+ optional :kms_key_name, String
78
+
79
+ # @!attribute kms_key_ring_name
80
+ #
81
+ # @return [String, nil]
82
+ optional :kms_key_ring_name, String
83
+
84
+ # @!attribute kms_key_version
85
+ #
86
+ # @return [String, nil]
87
+ optional :kms_key_version, String
88
+
89
+ # @!attribute kms_project_id
90
+ #
91
+ # @return [String, nil]
92
+ optional :kms_project_id, String
93
+
94
+ # @!attribute purpose
95
+ #
96
+ # @return [Symbol, OpenAI::Models::Admin::Organization::ExternalKey::Purpose, nil]
97
+ optional :purpose, enum: -> { OpenAI::Admin::Organization::ExternalKey::Purpose }
98
+
99
+ # @!attribute role_arn
100
+ #
101
+ # @return [String, nil]
102
+ optional :role_arn, String
103
+
104
+ # @!attribute tenant_id
105
+ #
106
+ # @return [String, nil]
107
+ optional :tenant_id, String
108
+
109
+ # @!attribute vault_uri
110
+ #
111
+ # @return [String, nil]
112
+ optional :vault_uri, String
113
+
114
+ # @!attribute workload_identity_pool_id
115
+ #
116
+ # @return [String, nil]
117
+ optional :workload_identity_pool_id, String
118
+
119
+ # @!attribute workload_identity_project_number
120
+ #
121
+ # @return [String, nil]
122
+ optional :workload_identity_project_number, String
123
+
124
+ # @!attribute workload_identity_provider_id
125
+ #
126
+ # @return [String, nil]
127
+ optional :workload_identity_provider_id, String
128
+
129
+ # @!method initialize(id:, api_project_ids:, created_at:, name:, object:, type:, workspace_id:, audience: nil, external_id: nil, key_name: nil, key_version: nil, kms_arn: nil, kms_key_location: nil, kms_key_name: nil, kms_key_ring_name: nil, kms_key_version: nil, kms_project_id: nil, purpose: nil, role_arn: nil, tenant_id: nil, vault_uri: nil, workload_identity_pool_id: nil, workload_identity_project_number: nil, workload_identity_provider_id: nil)
130
+ # @param id [String]
131
+ # @param api_project_ids [Array<String>]
132
+ # @param created_at [Integer]
133
+ # @param name [String]
134
+ # @param object [String]
135
+ # @param type [String]
136
+ # @param workspace_id [String]
137
+ # @param audience [String]
138
+ # @param external_id [String]
139
+ # @param key_name [String]
140
+ # @param key_version [String]
141
+ # @param kms_arn [String]
142
+ # @param kms_key_location [String]
143
+ # @param kms_key_name [String]
144
+ # @param kms_key_ring_name [String]
145
+ # @param kms_key_version [String]
146
+ # @param kms_project_id [String]
147
+ # @param purpose [Symbol, OpenAI::Models::Admin::Organization::ExternalKey::Purpose]
148
+ # @param role_arn [String]
149
+ # @param tenant_id [String]
150
+ # @param vault_uri [String]
151
+ # @param workload_identity_pool_id [String]
152
+ # @param workload_identity_project_number [String]
153
+ # @param workload_identity_provider_id [String]
154
+
155
+ # @see OpenAI::Models::Admin::Organization::ExternalKey#purpose
156
+ module Purpose
157
+ extend OpenAI::Internal::Type::Enum
158
+
159
+ EKM = :ekm
160
+ PSP_DECRYPTION = :psp_decryption
161
+
162
+ # @!method self.values
163
+ # @return [Array<Symbol>]
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,311 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Admin
6
+ module Organization
7
+ # @see OpenAI::Resources::Admin::Organization::ExternalKeys#create
8
+ class ExternalKeyCreateParams < OpenAI::Internal::Type::BaseModel
9
+ extend OpenAI::Internal::Type::RequestParameters::Converter
10
+ include OpenAI::Internal::Type::RequestParameters
11
+
12
+ # @!attribute body
13
+ #
14
+ # @return [OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure]
15
+ required :body, union: -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body }
16
+
17
+ # @!method initialize(body:, request_options: {})
18
+ # @param body [OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure]
19
+ # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
20
+
21
+ module Body
22
+ extend OpenAI::Internal::Type::Union
23
+
24
+ discriminator :type
25
+
26
+ variant :aws, -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Aws }
27
+
28
+ variant :gcp, -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Gcp }
29
+
30
+ variant :azure, -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Azure }
31
+
32
+ class Aws < OpenAI::Internal::Type::BaseModel
33
+ # @!attribute external_id
34
+ # The ExternalID that OpenAI will pass in the AssumeRole call for the customer's
35
+ # AWS account. This must be the OpenAI organization ID or an API project ID that
36
+ # belongs to the organization.
37
+ #
38
+ # @return [String]
39
+ required :external_id, String
40
+
41
+ # @!attribute kms_arn
42
+ # The Key Management System ARN for the master key you manage
43
+ #
44
+ # @return [String]
45
+ required :kms_arn, String
46
+
47
+ # @!attribute name
48
+ # A friendly name to identify this config
49
+ #
50
+ # @return [String]
51
+ required :name, String
52
+
53
+ # @!attribute role_arn
54
+ # The Role ARN that OpenAI will assume to call your KMS
55
+ #
56
+ # @return [String]
57
+ required :role_arn, String
58
+
59
+ # @!attribute type
60
+ #
61
+ # @return [Symbol, :aws]
62
+ required :type, const: :aws
63
+
64
+ # @!attribute purpose
65
+ #
66
+ # @return [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws::Purpose, nil]
67
+ optional :purpose, enum: -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Aws::Purpose }
68
+
69
+ # @!method initialize(external_id:, kms_arn:, name:, role_arn:, purpose: nil, type: :aws)
70
+ # @param external_id [String]
71
+ # The ExternalID that OpenAI will pass in the AssumeRole call for the customer's
72
+ # AWS account. This must be the OpenAI organization ID or an API project ID that
73
+ # belongs to the organization.
74
+ #
75
+ # @param kms_arn [String]
76
+ # The Key Management System ARN for the master key you manage
77
+ #
78
+ # @param name [String]
79
+ # A friendly name to identify this config
80
+ #
81
+ # @param role_arn [String]
82
+ # The Role ARN that OpenAI will assume to call your KMS
83
+ #
84
+ # @param purpose [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws::Purpose]
85
+ #
86
+ # @param type [Symbol, :aws]
87
+
88
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws#purpose
89
+ module Purpose
90
+ extend OpenAI::Internal::Type::Enum
91
+
92
+ EKM = :ekm
93
+ PSP_DECRYPTION = :psp_decryption
94
+
95
+ # @!method self.values
96
+ # @return [Array<Symbol>]
97
+ end
98
+ end
99
+
100
+ class Gcp < OpenAI::Internal::Type::BaseModel
101
+ # @!attribute audience
102
+ # The aud field in the identity token OpenAI will pass in the call to the
103
+ # customer's GCP STS. This must be the OpenAI organization ID or an API project ID
104
+ # that belongs to the organization.
105
+ #
106
+ # @return [String]
107
+ required :audience, String
108
+
109
+ # @!attribute kms_key_location
110
+ # The region where your Key Management System master key is located
111
+ #
112
+ # @return [String]
113
+ required :kms_key_location, String
114
+
115
+ # @!attribute kms_key_name
116
+ # The name of the Key Management System master key you manage
117
+ #
118
+ # @return [String]
119
+ required :kms_key_name, String
120
+
121
+ # @!attribute kms_key_ring_name
122
+ # The Key Management System key ring for the master key you manage
123
+ #
124
+ # @return [String]
125
+ required :kms_key_ring_name, String
126
+
127
+ # @!attribute kms_project_id
128
+ # The string GCP project name where your KMS resides
129
+ #
130
+ # @return [String]
131
+ required :kms_project_id, String
132
+
133
+ # @!attribute name
134
+ # A friendly name to identify this config
135
+ #
136
+ # @return [String]
137
+ required :name, String
138
+
139
+ # @!attribute type
140
+ #
141
+ # @return [Symbol, :gcp]
142
+ required :type, const: :gcp
143
+
144
+ # @!attribute workload_identity_pool_id
145
+ # The pool containing the Workload Identity provider that you registered for
146
+ # OpenAI
147
+ #
148
+ # @return [String]
149
+ required :workload_identity_pool_id, String
150
+
151
+ # @!attribute workload_identity_project_number
152
+ # The numeric GCP project number where you registered OpenAI's workload identity
153
+ #
154
+ # @return [String]
155
+ required :workload_identity_project_number, String
156
+
157
+ # @!attribute workload_identity_provider_id
158
+ # The Workload Identity provider that you registered for OpenAI
159
+ #
160
+ # @return [String]
161
+ required :workload_identity_provider_id, String
162
+
163
+ # @!attribute kms_key_version
164
+ # An exact CryptoKeyVersion number. Required for PSP decryption; not accepted for
165
+ # EKM.
166
+ #
167
+ # @return [String, nil]
168
+ optional :kms_key_version, String
169
+
170
+ # @!attribute purpose
171
+ #
172
+ # @return [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp::Purpose, nil]
173
+ optional :purpose, enum: -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Gcp::Purpose }
174
+
175
+ # @!method initialize(audience:, kms_key_location:, kms_key_name:, kms_key_ring_name:, kms_project_id:, name:, workload_identity_pool_id:, workload_identity_project_number:, workload_identity_provider_id:, kms_key_version: nil, purpose: nil, type: :gcp)
176
+ # @param audience [String]
177
+ # The aud field in the identity token OpenAI will pass in the call to the
178
+ # customer's GCP STS. This must be the OpenAI organization ID or an API project ID
179
+ # that belongs to the organization.
180
+ #
181
+ # @param kms_key_location [String]
182
+ # The region where your Key Management System master key is located
183
+ #
184
+ # @param kms_key_name [String]
185
+ # The name of the Key Management System master key you manage
186
+ #
187
+ # @param kms_key_ring_name [String]
188
+ # The Key Management System key ring for the master key you manage
189
+ #
190
+ # @param kms_project_id [String]
191
+ # The string GCP project name where your KMS resides
192
+ #
193
+ # @param name [String]
194
+ # A friendly name to identify this config
195
+ #
196
+ # @param workload_identity_pool_id [String]
197
+ # The pool containing the Workload Identity provider that you registered for
198
+ # OpenAI
199
+ #
200
+ # @param workload_identity_project_number [String]
201
+ # The numeric GCP project number where you registered OpenAI's workload identity
202
+ #
203
+ # @param workload_identity_provider_id [String]
204
+ # The Workload Identity provider that you registered for OpenAI
205
+ #
206
+ # @param kms_key_version [String]
207
+ # An exact CryptoKeyVersion number. Required for PSP decryption; not accepted for
208
+ # EKM.
209
+ #
210
+ # @param purpose [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp::Purpose]
211
+ #
212
+ # @param type [Symbol, :gcp]
213
+
214
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp#purpose
215
+ module Purpose
216
+ extend OpenAI::Internal::Type::Enum
217
+
218
+ EKM = :ekm
219
+ PSP_DECRYPTION = :psp_decryption
220
+
221
+ # @!method self.values
222
+ # @return [Array<Symbol>]
223
+ end
224
+ end
225
+
226
+ class Azure < OpenAI::Internal::Type::BaseModel
227
+ # @!attribute key_name
228
+ # The name of the Azure Key Vault master key that you manage
229
+ #
230
+ # @return [String]
231
+ required :key_name, String
232
+
233
+ # @!attribute name
234
+ # A friendly name to identify this config
235
+ #
236
+ # @return [String]
237
+ required :name, String
238
+
239
+ # @!attribute tenant_id
240
+ # Your Azure tenant UUID
241
+ #
242
+ # @return [String]
243
+ required :tenant_id, String
244
+
245
+ # @!attribute type
246
+ #
247
+ # @return [Symbol, :azure]
248
+ required :type, const: :azure
249
+
250
+ # @!attribute vault_uri
251
+ # The URI of the Azure vault containing the master key you manage
252
+ #
253
+ # @return [String]
254
+ required :vault_uri, String
255
+
256
+ # @!attribute key_version
257
+ # An exact Azure Key Vault key version. Required for PSP decryption; not accepted
258
+ # for EKM.
259
+ #
260
+ # @return [String, nil]
261
+ optional :key_version, String
262
+
263
+ # @!attribute purpose
264
+ #
265
+ # @return [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure::Purpose, nil]
266
+ optional(
267
+ :purpose,
268
+ enum: -> { OpenAI::Admin::Organization::ExternalKeyCreateParams::Body::Azure::Purpose }
269
+ )
270
+
271
+ # @!method initialize(key_name:, name:, tenant_id:, vault_uri:, key_version: nil, purpose: nil, type: :azure)
272
+ # @param key_name [String]
273
+ # The name of the Azure Key Vault master key that you manage
274
+ #
275
+ # @param name [String]
276
+ # A friendly name to identify this config
277
+ #
278
+ # @param tenant_id [String]
279
+ # Your Azure tenant UUID
280
+ #
281
+ # @param vault_uri [String]
282
+ # The URI of the Azure vault containing the master key you manage
283
+ #
284
+ # @param key_version [String]
285
+ # An exact Azure Key Vault key version. Required for PSP decryption; not accepted
286
+ # for EKM.
287
+ #
288
+ # @param purpose [Symbol, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure::Purpose]
289
+ #
290
+ # @param type [Symbol, :azure]
291
+
292
+ # @see OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure#purpose
293
+ module Purpose
294
+ extend OpenAI::Internal::Type::Enum
295
+
296
+ EKM = :ekm
297
+ PSP_DECRYPTION = :psp_decryption
298
+
299
+ # @!method self.values
300
+ # @return [Array<Symbol>]
301
+ end
302
+ end
303
+
304
+ # @!method self.variants
305
+ # @return [Array(OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Aws, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Gcp, OpenAI::Models::Admin::Organization::ExternalKeyCreateParams::Body::Azure)]
306
+ end
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end