openai 0.114.0 → 0.115.1

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 +43 -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 +43 -1
@@ -18,6 +18,7 @@ module OpenAI
18
18
  end
19
19
 
20
20
  super(
21
+ client: client,
21
22
  transport: transport,
22
23
  transport_options: transport_options,
23
24
  default_transport: -> { OpenAI::Responses::Transports::AsyncWebSocket.new },
@@ -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