openai 0.78.0 → 0.80.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 (239) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -0
  3. data/README.md +241 -8
  4. data/SECURITY.md +6 -22
  5. data/azure.md +110 -0
  6. data/bedrock.md +197 -0
  7. data/examples/mtls_custom_http_client.rb +61 -0
  8. data/lib/openai/auth/workload_identity.rb +13 -2
  9. data/lib/openai/auth/workload_identity_auth.rb +2 -1
  10. data/lib/openai/client.rb +29 -6
  11. data/lib/openai/errors.rb +11 -1
  12. data/lib/openai/helpers/streaming/chat_completion_stream.rb +3 -3
  13. data/lib/openai/helpers/streaming/response_stream.rb +5 -6
  14. data/lib/openai/helpers/structured_output/base_model.rb +20 -19
  15. data/lib/openai/helpers/structured_output/json_schema_converter.rb +12 -5
  16. data/lib/openai/http_client.rb +99 -7
  17. data/lib/openai/internal/conversation_cursor_page.rb +5 -6
  18. data/lib/openai/internal/cursor_page.rb +3 -3
  19. data/lib/openai/internal/logging.rb +419 -0
  20. data/lib/openai/internal/next_cursor_page.rb +5 -6
  21. data/lib/openai/internal/page.rb +2 -2
  22. data/lib/openai/internal/provider.rb +7 -1
  23. data/lib/openai/internal/read_io_adapter.rb +42 -18
  24. data/lib/openai/internal/stream.rb +2 -2
  25. data/lib/openai/internal/transport/base_client.rb +137 -37
  26. data/lib/openai/internal/type/array_of.rb +6 -4
  27. data/lib/openai/internal/type/base_model.rb +39 -1
  28. data/lib/openai/internal/type/base_page.rb +19 -2
  29. data/lib/openai/internal/type/base_stream.rb +39 -7
  30. data/lib/openai/internal/type/hash_of.rb +3 -3
  31. data/lib/openai/internal/util.rb +52 -27
  32. data/lib/openai/models/admin/organization/audit_log_list_params.rb +3 -1
  33. data/lib/openai/models/admin/organization/audit_log_list_response.rb +33 -11
  34. data/lib/openai/models/admin/organization/groups/role_list_response.rb +5 -1
  35. data/lib/openai/models/admin/organization/groups/role_retrieve_response.rb +5 -1
  36. data/lib/openai/models/admin/organization/projects/groups/role_list_response.rb +6 -1
  37. data/lib/openai/models/admin/organization/projects/groups/role_retrieve_response.rb +6 -1
  38. data/lib/openai/models/admin/organization/projects/service_account_create_response.rb +3 -1
  39. data/lib/openai/models/admin/organization/projects/users/role_list_response.rb +6 -1
  40. data/lib/openai/models/admin/organization/projects/users/role_retrieve_response.rb +6 -1
  41. data/lib/openai/models/admin/organization/users/role_list_response.rb +5 -1
  42. data/lib/openai/models/admin/organization/users/role_retrieve_response.rb +5 -1
  43. data/lib/openai/models/all_models.rb +5 -0
  44. data/lib/openai/models/audio/transcription_create_params.rb +7 -1
  45. data/lib/openai/models/audio/translation_create_params.rb +7 -1
  46. data/lib/openai/models/beta/beta_mcp_tool_call_error.rb +84 -0
  47. data/lib/openai/models/beta/beta_response.rb +27 -0
  48. data/lib/openai/models/beta/beta_response_input_item.rb +3 -3
  49. data/lib/openai/models/beta/beta_response_item.rb +3 -3
  50. data/lib/openai/models/beta/beta_response_output_item.rb +3 -3
  51. data/lib/openai/models/beta/beta_response_output_item_added_event.rb +5 -2
  52. data/lib/openai/models/beta/beta_response_output_text_annotation_added_event.rb +201 -4
  53. data/lib/openai/models/beta/beta_response_reasoning_item.rb +5 -0
  54. data/lib/openai/models/beta/beta_response_stream_event.rb +1 -1
  55. data/lib/openai/models/beta/beta_responses_client_event.rb +46 -3
  56. data/lib/openai/models/beta/beta_responses_server_event.rb +1143 -63
  57. data/lib/openai/models/beta/beta_web_search_tool.rb +11 -1
  58. data/lib/openai/models/beta/response_compact_params.rb +18 -0
  59. data/lib/openai/models/beta/response_create_params.rb +27 -0
  60. data/lib/openai/models/chat_model.rb +1 -0
  61. data/lib/openai/models/completion_usage.rb +26 -2
  62. data/lib/openai/models/containers/file_create_params.rb +4 -0
  63. data/lib/openai/models/content_provenance_check_create_params.rb +4 -0
  64. data/lib/openai/models/conversations/conversation_item.rb +3 -3
  65. data/lib/openai/models/file_create_params.rb +4 -0
  66. data/lib/openai/models/image_create_variation_params.rb +4 -0
  67. data/lib/openai/models/image_edit_params.rb +8 -0
  68. data/lib/openai/models/model.rb +9 -1
  69. data/lib/openai/models/responses/mcp_tool_call_error.rb +82 -0
  70. data/lib/openai/models/responses/response.rb +9 -0
  71. data/lib/openai/models/responses/response_compact_params.rb +18 -0
  72. data/lib/openai/models/responses/response_create_params.rb +9 -0
  73. data/lib/openai/models/responses/response_input_item.rb +3 -3
  74. data/lib/openai/models/responses/response_item.rb +3 -3
  75. data/lib/openai/models/responses/response_output_item.rb +3 -3
  76. data/lib/openai/models/responses/response_output_item_added_event.rb +5 -2
  77. data/lib/openai/models/responses/response_output_text_annotation_added_event.rb +201 -4
  78. data/lib/openai/models/responses/response_reasoning_item.rb +5 -0
  79. data/lib/openai/models/responses/response_stream_event.rb +1 -1
  80. data/lib/openai/models/responses/responses_client_event.rb +22 -1
  81. data/lib/openai/models/responses/responses_server_event.rb +1107 -56
  82. data/lib/openai/models/responses/web_search_tool.rb +11 -1
  83. data/lib/openai/models/responses_model.rb +5 -0
  84. data/lib/openai/models/skill_create_params.rb +4 -0
  85. data/lib/openai/models/skills/version_create_params.rb +4 -0
  86. data/lib/openai/models/uploads/part_create_params.rb +4 -0
  87. data/lib/openai/models/vector_store_search_response.rb +3 -1
  88. data/lib/openai/models/video_create_character_params.rb +4 -0
  89. data/lib/openai/models/video_create_params.rb +4 -0
  90. data/lib/openai/models/video_edit_params.rb +4 -0
  91. data/lib/openai/models/video_extend_params.rb +4 -0
  92. data/lib/openai/models.rb +9 -1
  93. data/lib/openai/net_http_client.rb +20 -6
  94. data/lib/openai/providers/azure.rb +216 -0
  95. data/lib/openai/providers/bedrock.rb +130 -17
  96. data/lib/openai/resources/admin/organization/projects/groups/roles.rb +1 -1
  97. data/lib/openai/resources/admin/organization/projects/groups.rb +1 -1
  98. data/lib/openai/resources/admin/organization/projects/users/roles.rb +1 -1
  99. data/lib/openai/resources/admin/organization/projects.rb +4 -2
  100. data/lib/openai/resources/audio/transcriptions.rb +8 -0
  101. data/lib/openai/resources/audio/translations.rb +4 -0
  102. data/lib/openai/resources/beta/responses.rb +1 -1
  103. data/lib/openai/resources/beta/threads/runs/steps.rb +2 -2
  104. data/lib/openai/resources/containers/files.rb +4 -0
  105. data/lib/openai/resources/content_provenance_checks.rb +4 -0
  106. data/lib/openai/resources/conversations/items.rb +1 -1
  107. data/lib/openai/resources/evals/runs/output_items.rb +1 -1
  108. data/lib/openai/resources/files.rb +5 -1
  109. data/lib/openai/resources/images.rb +12 -0
  110. data/lib/openai/resources/responses.rb +3 -2
  111. data/lib/openai/resources/skills/versions.rb +4 -0
  112. data/lib/openai/resources/skills.rb +4 -0
  113. data/lib/openai/resources/uploads/parts.rb +4 -0
  114. data/lib/openai/resources/vector_stores/file_batches.rb +1 -1
  115. data/lib/openai/resources/videos.rb +38 -0
  116. data/lib/openai/resources/webhooks.rb +18 -6
  117. data/lib/openai/version.rb +1 -1
  118. data/lib/openai.rb +111 -105
  119. data/rbi/openai/auth.rbi +4 -4
  120. data/rbi/openai/client.rbi +13 -3
  121. data/rbi/openai/errors.rbi +7 -0
  122. data/rbi/openai/helpers/streaming/events.rbi +12 -0
  123. data/rbi/openai/http_client.rbi +62 -2
  124. data/rbi/openai/internal/logging.rbi +192 -0
  125. data/rbi/openai/internal/provider.rbi +3 -0
  126. data/rbi/openai/internal/read_io_adapter.rbi +6 -1
  127. data/rbi/openai/internal/transport/base_client.rbi +61 -7
  128. data/rbi/openai/internal/type/base_model.rbi +24 -1
  129. data/rbi/openai/internal/type/base_page.rbi +13 -2
  130. data/rbi/openai/internal/type/base_stream.rbi +15 -4
  131. data/rbi/openai/internal/util.rbi +26 -2
  132. data/rbi/openai/models/admin/organization/audit_log_list_params.rbi +5 -0
  133. data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +5 -0
  134. data/rbi/openai/models/all_models.rbi +25 -0
  135. data/rbi/openai/models/audio/transcription_create_params.rbi +14 -2
  136. data/rbi/openai/models/audio/translation_create_params.rbi +14 -2
  137. data/rbi/openai/models/beta/beta_mcp_tool_call_error.rbi +122 -0
  138. data/rbi/openai/models/beta/beta_response.rbi +47 -0
  139. data/rbi/openai/models/beta/beta_response_input_item.rbi +27 -3
  140. data/rbi/openai/models/beta/beta_response_item.rbi +27 -3
  141. data/rbi/openai/models/beta/beta_response_output_item.rbi +27 -3
  142. data/rbi/openai/models/beta/beta_response_output_item_added_event.rbi +8 -2
  143. data/rbi/openai/models/beta/beta_response_output_text_annotation_added_event.rbi +297 -5
  144. data/rbi/openai/models/beta/beta_response_reasoning_item.rbi +10 -0
  145. data/rbi/openai/models/beta/beta_response_stream_event.rbi +1 -1
  146. data/rbi/openai/models/beta/beta_responses_client_event.rbi +69 -1
  147. data/rbi/openai/models/beta/beta_responses_server_event.rbi +3945 -54
  148. data/rbi/openai/models/beta/beta_web_search_tool.rbi +15 -0
  149. data/rbi/openai/models/beta/response_compact_params.rbi +30 -0
  150. data/rbi/openai/models/beta/response_create_params.rbi +47 -0
  151. data/rbi/openai/models/chat_model.rbi +2 -0
  152. data/rbi/openai/models/completion_usage.rbi +39 -6
  153. data/rbi/openai/models/containers/file_create_params.rbi +8 -0
  154. data/rbi/openai/models/content_provenance_check_create_params.rbi +8 -0
  155. data/rbi/openai/models/conversations/conversation_item.rbi +12 -3
  156. data/rbi/openai/models/file_create_params.rbi +8 -0
  157. data/rbi/openai/models/image_create_variation_params.rbi +8 -0
  158. data/rbi/openai/models/image_edit_params.rbi +16 -0
  159. data/rbi/openai/models/model.rbi +14 -1
  160. data/rbi/openai/models/responses/mcp_tool_call_error.rbi +120 -0
  161. data/rbi/openai/models/responses/response.rbi +17 -0
  162. data/rbi/openai/models/responses/response_compact_params.rbi +30 -0
  163. data/rbi/openai/models/responses/response_create_params.rbi +17 -0
  164. data/rbi/openai/models/responses/response_input_item.rbi +27 -3
  165. data/rbi/openai/models/responses/response_item.rbi +27 -3
  166. data/rbi/openai/models/responses/response_output_item.rbi +27 -3
  167. data/rbi/openai/models/responses/response_output_item_added_event.rbi +8 -2
  168. data/rbi/openai/models/responses/response_output_text_annotation_added_event.rbi +297 -5
  169. data/rbi/openai/models/responses/response_reasoning_item.rbi +10 -0
  170. data/rbi/openai/models/responses/response_stream_event.rbi +1 -1
  171. data/rbi/openai/models/responses/responses_client_event.rbi +36 -0
  172. data/rbi/openai/models/responses/responses_server_event.rbi +3385 -53
  173. data/rbi/openai/models/responses/web_search_tool.rbi +15 -0
  174. data/rbi/openai/models/responses_model.rbi +25 -0
  175. data/rbi/openai/models/skill_create_params.rbi +8 -0
  176. data/rbi/openai/models/skills/version_create_params.rbi +8 -0
  177. data/rbi/openai/models/uploads/part_create_params.rbi +8 -0
  178. data/rbi/openai/models/video_create_character_params.rbi +8 -0
  179. data/rbi/openai/models/video_create_params.rbi +8 -0
  180. data/rbi/openai/models/video_edit_params.rbi +8 -0
  181. data/rbi/openai/models/video_extend_params.rbi +8 -0
  182. data/rbi/openai/net_http_client.rbi +2 -2
  183. data/rbi/openai/providers.rbi +11 -0
  184. data/rbi/openai/resources/audio/transcriptions.rbi +14 -2
  185. data/rbi/openai/resources/audio/translations.rbi +7 -1
  186. data/rbi/openai/resources/beta/responses.rbi +8 -0
  187. data/rbi/openai/resources/containers/files.rbi +4 -0
  188. data/rbi/openai/resources/content_provenance_checks.rbi +4 -0
  189. data/rbi/openai/resources/files.rbi +5 -1
  190. data/rbi/openai/resources/images.rbi +20 -0
  191. data/rbi/openai/resources/responses.rbi +8 -0
  192. data/rbi/openai/resources/skills/versions.rbi +4 -0
  193. data/rbi/openai/resources/skills.rbi +4 -0
  194. data/rbi/openai/resources/uploads/parts.rbi +4 -0
  195. data/rbi/openai/resources/videos.rbi +16 -0
  196. data/sig/openai/client.rbs +6 -2
  197. data/sig/openai/errors.rbs +5 -0
  198. data/sig/openai/http_client.rbs +37 -2
  199. data/sig/openai/internal/logging.rbs +88 -0
  200. data/sig/openai/internal/provider.rbs +3 -1
  201. data/sig/openai/internal/read_io_adapter.rbs +3 -1
  202. data/sig/openai/internal/transport/base_client.rbs +33 -5
  203. data/sig/openai/internal/type/base_model.rbs +13 -0
  204. data/sig/openai/internal/type/base_page.rbs +8 -1
  205. data/sig/openai/internal/type/base_stream.rbs +8 -2
  206. data/sig/openai/internal/util.rbs +12 -0
  207. data/sig/openai/models/admin/organization/audit_log_list_params.rbs +2 -0
  208. data/sig/openai/models/admin/organization/audit_log_list_response.rbs +2 -0
  209. data/sig/openai/models/all_models.rbs +10 -0
  210. data/sig/openai/models/beta/beta_mcp_tool_call_error.rbs +75 -0
  211. data/sig/openai/models/beta/beta_response.rbs +14 -1
  212. data/sig/openai/models/beta/beta_response_input_item.rbs +4 -4
  213. data/sig/openai/models/beta/beta_response_item.rbs +4 -4
  214. data/sig/openai/models/beta/beta_response_output_item.rbs +4 -4
  215. data/sig/openai/models/beta/beta_response_output_text_annotation_added_event.rbs +149 -4
  216. data/sig/openai/models/beta/beta_responses_client_event.rbs +21 -1
  217. data/sig/openai/models/beta/beta_responses_server_event.rbs +2005 -53
  218. data/sig/openai/models/beta/beta_web_search_tool.rbs +7 -0
  219. data/sig/openai/models/beta/response_compact_params.rbs +12 -0
  220. data/sig/openai/models/beta/response_create_params.rbs +14 -1
  221. data/sig/openai/models/chat_model.rbs +2 -0
  222. data/sig/openai/models/completion_usage.rbs +27 -6
  223. data/sig/openai/models/conversations/conversation_item.rbs +4 -4
  224. data/sig/openai/models/model.rbs +12 -2
  225. data/sig/openai/models/responses/mcp_tool_call_error.rbs +73 -0
  226. data/sig/openai/models/responses/response.rbs +2 -1
  227. data/sig/openai/models/responses/response_compact_params.rbs +12 -0
  228. data/sig/openai/models/responses/response_create_params.rbs +2 -1
  229. data/sig/openai/models/responses/response_input_item.rbs +4 -4
  230. data/sig/openai/models/responses/response_item.rbs +4 -4
  231. data/sig/openai/models/responses/response_output_item.rbs +4 -4
  232. data/sig/openai/models/responses/response_output_text_annotation_added_event.rbs +149 -4
  233. data/sig/openai/models/responses/responses_client_event.rbs +9 -1
  234. data/sig/openai/models/responses/responses_server_event.rbs +1834 -53
  235. data/sig/openai/models/responses/web_search_tool.rbs +7 -0
  236. data/sig/openai/models/responses_model.rbs +10 -0
  237. data/sig/openai/net_http_client.rbs +2 -2
  238. data/sig/openai/providers.rbs +7 -0
  239. metadata +30 -1
@@ -261,9 +261,13 @@ module OpenAI
261
261
  #
262
262
  # @param path [String, Integer]
263
263
  #
264
+ # @raise [ArgumentError]
264
265
  # @return [String]
265
266
  def encode_path(path)
266
- path.to_s.gsub(OpenAI::Internal::Util::RFC_3986_NOT_PCHARS) { ERB::Util.url_encode(_1) }
267
+ path = path.to_s
268
+ raise ArgumentError, "path segment cannot be '.' or '..'" if path == "." || path == ".."
269
+
270
+ path.gsub(OpenAI::Internal::Util::RFC_3986_NOT_PCHARS) { ERB::Util.url_encode(_1) }
267
271
  end
268
272
 
269
273
  # @api private
@@ -389,7 +393,7 @@ module OpenAI
389
393
  #
390
394
  # @return [Hash{String=>String}]
391
395
  def normalized_headers(*headers)
392
- {}.merge(*headers.compact).to_h do |key, val|
396
+ headers.compact.flat_map(&:to_a).to_h do |key, val|
393
397
  value =
394
398
  case val
395
399
  in Array
@@ -397,7 +401,7 @@ module OpenAI
397
401
  else
398
402
  val&.to_s&.strip
399
403
  end
400
- [key.downcase, value]
404
+ [key.to_s.downcase, value]
401
405
  end
402
406
  end
403
407
  end
@@ -420,9 +424,9 @@ module OpenAI
420
424
  end
421
425
 
422
426
  # @type [Regexp]
423
- JSON_CONTENT = %r{^application/(?:[a-zA-Z0-9.-]+\+)?json(?!l)}
427
+ JSON_CONTENT = %r{\Aapplication/(?:[a-z0-9.-]+\+)?json[ \t]*(?:;|\z)}i
424
428
  # @type [Regexp]
425
- JSONL_CONTENT = %r{^application/(:?x-(?:n|l)djson)|(:?(?:x-)?jsonl)}
429
+ JSONL_CONTENT = %r{\Aapplication/(?:x-[nl]djson|(?:x-)?jsonl)[ \t]*(?:;|\z)}i
426
430
 
427
431
  class << self
428
432
  # @api private
@@ -496,14 +500,14 @@ module OpenAI
496
500
 
497
501
  # @api private
498
502
  #
499
- # Multipart filenames are quoted-strings, not URI path segments. Escape header
500
- # delimiters and remove CR/LF without encoding ordinary filename characters.
503
+ # Multipart disposition parameters are quoted-strings, not URI path segments.
504
+ # Escape header delimiters and remove CR/LF without encoding ordinary characters.
501
505
  #
502
- # @param filename [Pathname, String]
506
+ # @param value [Pathname, String, Symbol]
503
507
  #
504
508
  # @return [String]
505
- private def escape_multipart_filename(filename)
506
- filename.to_s.gsub(/["\\]/) { "\\#{_1}" }.delete("\r\n").b
509
+ private def escape_multipart_header_param(value)
510
+ value.to_s.gsub(/["\\]/) { "\\#{_1}" }.delete("\r\n").b
507
511
  end
508
512
 
509
513
  # @api private
@@ -518,15 +522,16 @@ module OpenAI
518
522
  y << "Content-Disposition: form-data"
519
523
 
520
524
  unless key.nil?
521
- y << "; name=\"#{key}\""
525
+ name = escape_multipart_header_param(key)
526
+ y << "; name=\"#{name}\""
522
527
  end
523
528
 
524
529
  case val
525
530
  in OpenAI::FilePart unless val.filename.nil?
526
- filename = escape_multipart_filename(val.filename)
531
+ filename = escape_multipart_header_param(val.filename)
527
532
  y << "; filename=\"#{filename}\""
528
533
  in Pathname | IO
529
- filename = escape_multipart_filename(::File.basename(val.to_path))
534
+ filename = escape_multipart_header_param(::File.basename(val.to_path))
530
535
  y << "; filename=\"#{filename}\""
531
536
  else
532
537
  end
@@ -535,6 +540,34 @@ module OpenAI
535
540
  write_multipart_content(y, val: val, closing: closing)
536
541
  end
537
542
 
543
+ # @api private
544
+ #
545
+ # @param y [Enumerator::Yielder]
546
+ # @param boundary [String]
547
+ # @param key [Symbol, String]
548
+ # @param val [Object]
549
+ # @param closing [Array<Proc>]
550
+ private def write_multipart_value(y, boundary:, key:, val:, closing:)
551
+ case val
552
+ in Hash
553
+ val.each do |name, value|
554
+ write_multipart_value(
555
+ y,
556
+ boundary: boundary,
557
+ key: "#{key}[#{name}]",
558
+ val: value,
559
+ closing: closing
560
+ )
561
+ end
562
+ in Array
563
+ val.each do |value|
564
+ write_multipart_value(y, boundary: boundary, key: "#{key}[]", val: value, closing: closing)
565
+ end
566
+ else
567
+ write_multipart_chunk(y, boundary: boundary, key: key, val: val, closing: closing)
568
+ end
569
+ end
570
+
538
571
  # @api private
539
572
  #
540
573
  # https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.1.md#special-considerations-for-multipart-content
@@ -543,7 +576,6 @@ module OpenAI
543
576
  #
544
577
  # @return [Array(String, Enumerable<String>)]
545
578
  private def encode_multipart_streaming(body)
546
- # rubocop:disable Style/CaseEquality
547
579
  # RFC 1521 Section 7.2.1 says we should have 70 char maximum for boundary length
548
580
  boundary = SecureRandom.urlsafe_base64(46)
549
581
 
@@ -552,14 +584,7 @@ module OpenAI
552
584
  case body
553
585
  in Hash
554
586
  body.each do |key, val|
555
- case val
556
- in Array if val.all? { primitive?(_1) || OpenAI::Internal::Type::FileInput === _1 }
557
- val.each do |v|
558
- write_multipart_chunk(y, boundary: boundary, key: key, val: v, closing: closing)
559
- end
560
- else
561
- write_multipart_chunk(y, boundary: boundary, key: key, val: val, closing: closing)
562
- end
587
+ write_multipart_value(y, boundary: boundary, key: key, val: val, closing: closing)
563
588
  end
564
589
  else
565
590
  write_multipart_chunk(y, boundary: boundary, key: nil, val: body, closing: closing)
@@ -569,7 +594,6 @@ module OpenAI
569
594
 
570
595
  fused_io = fused_enum(strio) { closing.each(&:call) }
571
596
  [boundary, fused_io]
572
- # rubocop:enable Style/CaseEquality
573
597
  end
574
598
 
575
599
  # @api private
@@ -580,12 +604,14 @@ module OpenAI
580
604
  # @return [Object]
581
605
  def encode_content(headers, body)
582
606
  # rubocop:disable Style/CaseEquality
583
- # rubocop:disable Layout/LineLength
584
607
  content_type = headers["content-type"]
585
608
  case [content_type, body]
586
609
  in [OpenAI::Internal::Util::JSON_CONTENT, Hash | Array | -> { primitive?(_1) }]
587
610
  [headers, JSON.generate(body)]
588
- in [OpenAI::Internal::Util::JSONL_CONTENT, Enumerable] unless OpenAI::Internal::Type::FileInput === body
611
+ in [
612
+ OpenAI::Internal::Util::JSONL_CONTENT,
613
+ Enumerable
614
+ ] unless OpenAI::Internal::Type::FileInput === body
589
615
  [headers, body.lazy.map { JSON.generate(_1) }]
590
616
  in [%r{^multipart/form-data}, Hash | OpenAI::Internal::Type::FileInput]
591
617
  boundary, strio = encode_multipart_streaming(body)
@@ -600,7 +626,6 @@ module OpenAI
600
626
  else
601
627
  [headers, body]
602
628
  end
603
- # rubocop:enable Layout/LineLength
604
629
  # rubocop:enable Style/CaseEquality
605
630
  end
606
631
 
@@ -653,7 +678,7 @@ module OpenAI
653
678
  y << JSON.parse(_1, symbolize_names: true)
654
679
  end
655
680
  end
656
- in %r{^text/event-stream}
681
+ in %r{\Atext/event-stream[ \t]*(?:;|\z)}i
657
682
  lines = decode_lines(stream)
658
683
  decode_sse(lines)
659
684
  else
@@ -229,6 +229,7 @@ module OpenAI
229
229
  TENANT_WORKLOAD_IDENTITY_MAPPING_ARCHIVED = :"tenant.workload_identity.mapping.archived"
230
230
  TENANT_WORKLOAD_IDENTITY_BINDING_CREATED = :"tenant.workload_identity.binding.created"
231
231
  TENANT_WORKLOAD_IDENTITY_PRINCIPAL_PROVISIONED = :"tenant.workload_identity.principal.provisioned"
232
+ TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED = :"tenant.workload_identity.access_token.issued"
232
233
  TENANT_ADMIN_API_KEY_CREATED = :"tenant.admin_api_key.created"
233
234
  TENANT_ADMIN_API_KEY_UPDATED = :"tenant.admin_api_key.updated"
234
235
  TENANT_ADMIN_API_KEY_DELETED = :"tenant.admin_api_key.deleted"
@@ -246,7 +247,8 @@ module OpenAI
246
247
  TENANT_POLICY_DELETED = :"tenant.policy.deleted"
247
248
  TENANT_POLICY_ATTACHED = :"tenant.policy.attached"
248
249
  TENANT_POLICY_DETACHED = :"tenant.policy.detached"
249
- TENANT_PRINCIPAL_AUTHENTICATION_POLICY_RESOLVED = :"tenant.principal_authentication_policy.resolved"
250
+ TENANT_PRINCIPAL_AUTHENTICATION_POLICY_RESOLVED =
251
+ :"tenant.principal_authentication_policy.resolved"
250
252
  TENANT_SCIM_SETUP_STARTED = :"tenant.scim.setup.started"
251
253
  TENANT_SCIM_DELETION_REQUESTED = :"tenant.scim.deletion.requested"
252
254
  TENANT_SCIM_DIRECTORY_CREATED = :"tenant.scim.directory.created"
@@ -100,7 +100,9 @@ module OpenAI
100
100
  #
101
101
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionCreated, nil]
102
102
  optional :checkpoint_permission_created,
103
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionCreated },
103
+ -> {
104
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionCreated
105
+ },
104
106
  api_name: :"checkpoint.permission.created"
105
107
 
106
108
  # @!attribute checkpoint_permission_deleted
@@ -108,7 +110,9 @@ module OpenAI
108
110
  #
109
111
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionDeleted, nil]
110
112
  optional :checkpoint_permission_deleted,
111
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionDeleted },
113
+ -> {
114
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::CheckpointPermissionDeleted
115
+ },
112
116
  api_name: :"checkpoint.permission.deleted"
113
117
 
114
118
  # @!attribute external_key_registered
@@ -180,7 +184,9 @@ module OpenAI
180
184
  #
181
185
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigActivated, nil]
182
186
  optional :ip_allowlist_config_activated,
183
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigActivated },
187
+ -> {
188
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigActivated
189
+ },
184
190
  api_name: :"ip_allowlist.config.activated"
185
191
 
186
192
  # @!attribute ip_allowlist_config_deactivated
@@ -188,7 +194,9 @@ module OpenAI
188
194
  #
189
195
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigDeactivated, nil]
190
196
  optional :ip_allowlist_config_deactivated,
191
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigDeactivated },
197
+ -> {
198
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::IPAllowlistConfigDeactivated
199
+ },
192
200
  api_name: :"ip_allowlist.config.deactivated"
193
201
 
194
202
  # @!attribute ip_allowlist_created
@@ -432,7 +440,9 @@ module OpenAI
432
440
  #
433
441
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingCreated, nil]
434
442
  optional :workload_identity_provider_mapping_created,
435
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingCreated },
443
+ -> {
444
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingCreated
445
+ },
436
446
  api_name: :"workload_identity_provider_mapping.created"
437
447
 
438
448
  # @!attribute workload_identity_provider_mapping_deleted
@@ -440,7 +450,9 @@ module OpenAI
440
450
  #
441
451
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingDeleted, nil]
442
452
  optional :workload_identity_provider_mapping_deleted,
443
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingDeleted },
453
+ -> {
454
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingDeleted
455
+ },
444
456
  api_name: :"workload_identity_provider_mapping.deleted"
445
457
 
446
458
  # @!attribute workload_identity_provider_mapping_updated
@@ -448,7 +460,9 @@ module OpenAI
448
460
  #
449
461
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingUpdated, nil]
450
462
  optional :workload_identity_provider_mapping_updated,
451
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingUpdated },
463
+ -> {
464
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderMappingUpdated
465
+ },
452
466
  api_name: :"workload_identity_provider_mapping.updated"
453
467
 
454
468
  # @!attribute workload_identity_provider_created
@@ -456,7 +470,9 @@ module OpenAI
456
470
  #
457
471
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderCreated, nil]
458
472
  optional :workload_identity_provider_created,
459
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderCreated },
473
+ -> {
474
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderCreated
475
+ },
460
476
  api_name: :"workload_identity_provider.created"
461
477
 
462
478
  # @!attribute workload_identity_provider_deleted
@@ -464,7 +480,9 @@ module OpenAI
464
480
  #
465
481
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderDeleted, nil]
466
482
  optional :workload_identity_provider_deleted,
467
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderDeleted },
483
+ -> {
484
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderDeleted
485
+ },
468
486
  api_name: :"workload_identity_provider.deleted"
469
487
 
470
488
  # @!attribute workload_identity_provider_updated
@@ -472,7 +490,9 @@ module OpenAI
472
490
  #
473
491
  # @return [OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderUpdated, nil]
474
492
  optional :workload_identity_provider_updated,
475
- -> { OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderUpdated },
493
+ -> {
494
+ OpenAI::Models::Admin::Organization::AuditLogListResponse::WorkloadIdentityProviderUpdated
495
+ },
476
496
  api_name: :"workload_identity_provider.updated"
477
497
 
478
498
  # @!method initialize(id:, effective_at:, type:, actor: nil, api_key_created: nil, api_key_deleted: nil, api_key_updated: nil, certificate_created: nil, certificate_deleted: nil, certificate_updated: nil, certificates_activated: nil, certificates_deactivated: nil, checkpoint_permission_created: nil, checkpoint_permission_deleted: nil, external_key_registered: nil, external_key_removed: nil, group_created: nil, group_deleted: nil, group_updated: nil, invite_accepted: nil, invite_deleted: nil, invite_sent: nil, ip_allowlist_config_activated: nil, ip_allowlist_config_deactivated: nil, ip_allowlist_created: nil, ip_allowlist_deleted: nil, ip_allowlist_updated: nil, login_failed: nil, login_succeeded: nil, logout_failed: nil, logout_succeeded: nil, organization_updated: nil, project: nil, project_archived: nil, project_created: nil, project_deleted: nil, project_updated: nil, rate_limit_deleted: nil, rate_limit_updated: nil, role_assignment_created: nil, role_assignment_deleted: nil, role_bound_to_resource: nil, role_created: nil, role_deleted: nil, role_unbound_from_resource: nil, role_updated: nil, scim_disabled: nil, scim_enabled: nil, service_account_created: nil, service_account_deleted: nil, service_account_updated: nil, user_added: nil, user_deleted: nil, user_updated: nil, workload_identity_provider_mapping_created: nil, workload_identity_provider_mapping_deleted: nil, workload_identity_provider_mapping_updated: nil, workload_identity_provider_created: nil, workload_identity_provider_deleted: nil, workload_identity_provider_updated: nil)
@@ -677,6 +697,7 @@ module OpenAI
677
697
  TENANT_WORKLOAD_IDENTITY_MAPPING_ARCHIVED = :"tenant.workload_identity.mapping.archived"
678
698
  TENANT_WORKLOAD_IDENTITY_BINDING_CREATED = :"tenant.workload_identity.binding.created"
679
699
  TENANT_WORKLOAD_IDENTITY_PRINCIPAL_PROVISIONED = :"tenant.workload_identity.principal.provisioned"
700
+ TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED = :"tenant.workload_identity.access_token.issued"
680
701
  TENANT_ADMIN_API_KEY_CREATED = :"tenant.admin_api_key.created"
681
702
  TENANT_ADMIN_API_KEY_UPDATED = :"tenant.admin_api_key.updated"
682
703
  TENANT_ADMIN_API_KEY_DELETED = :"tenant.admin_api_key.deleted"
@@ -694,7 +715,8 @@ module OpenAI
694
715
  TENANT_POLICY_DELETED = :"tenant.policy.deleted"
695
716
  TENANT_POLICY_ATTACHED = :"tenant.policy.attached"
696
717
  TENANT_POLICY_DETACHED = :"tenant.policy.detached"
697
- TENANT_PRINCIPAL_AUTHENTICATION_POLICY_RESOLVED = :"tenant.principal_authentication_policy.resolved"
718
+ TENANT_PRINCIPAL_AUTHENTICATION_POLICY_RESOLVED =
719
+ :"tenant.principal_authentication_policy.resolved"
698
720
  TENANT_SCIM_SETUP_STARTED = :"tenant.scim.setup.started"
699
721
  TENANT_SCIM_DELETION_REQUESTED = :"tenant.scim.deletion.requested"
700
722
  TENANT_SCIM_DIRECTORY_CREATED = :"tenant.scim.directory.created"
@@ -18,7 +18,11 @@ module OpenAI
18
18
  #
19
19
  # @return [Array<OpenAI::Models::Admin::Organization::Groups::RoleListResponse::AssignmentSource>, nil]
20
20
  required :assignment_sources,
21
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Groups::RoleListResponse::AssignmentSource] },
21
+ -> do
22
+ OpenAI::Internal::Type::ArrayOf[
23
+ OpenAI::Models::Admin::Organization::Groups::RoleListResponse::AssignmentSource
24
+ ]
25
+ end,
22
26
  nil?: true
23
27
 
24
28
  # @!attribute created_at
@@ -18,7 +18,11 @@ module OpenAI
18
18
  #
19
19
  # @return [Array<OpenAI::Models::Admin::Organization::Groups::RoleRetrieveResponse::AssignmentSource>, nil]
20
20
  required :assignment_sources,
21
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Groups::RoleRetrieveResponse::AssignmentSource] },
21
+ -> do
22
+ OpenAI::Internal::Type::ArrayOf[
23
+ OpenAI::Models::Admin::Organization::Groups::RoleRetrieveResponse::AssignmentSource
24
+ ]
25
+ end,
22
26
  nil?: true
23
27
 
24
28
  # @!attribute created_at
@@ -19,7 +19,12 @@ module OpenAI
19
19
  #
20
20
  # @return [Array<OpenAI::Models::Admin::Organization::Projects::Groups::RoleListResponse::AssignmentSource>, nil]
21
21
  required :assignment_sources,
22
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Projects::Groups::RoleListResponse::AssignmentSource] },
22
+ -> do
23
+ OpenAI::Internal::Type::ArrayOf[
24
+ OpenAI::Models::Admin::Organization::Projects::Groups::RoleListResponse::
25
+ AssignmentSource
26
+ ]
27
+ end,
23
28
  nil?: true
24
29
 
25
30
  # @!attribute created_at
@@ -19,7 +19,12 @@ module OpenAI
19
19
  #
20
20
  # @return [Array<OpenAI::Models::Admin::Organization::Projects::Groups::RoleRetrieveResponse::AssignmentSource>, nil]
21
21
  required :assignment_sources,
22
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Projects::Groups::RoleRetrieveResponse::AssignmentSource] },
22
+ -> do
23
+ OpenAI::Internal::Type::ArrayOf[
24
+ OpenAI::Models::Admin::Organization::Projects::Groups::RoleRetrieveResponse::
25
+ AssignmentSource
26
+ ]
27
+ end,
23
28
  nil?: true
24
29
 
25
30
  # @!attribute created_at
@@ -16,7 +16,9 @@ module OpenAI
16
16
  #
17
17
  # @return [OpenAI::Models::Admin::Organization::Projects::ServiceAccountCreateResponse::APIKey, nil]
18
18
  required :api_key,
19
- -> { OpenAI::Models::Admin::Organization::Projects::ServiceAccountCreateResponse::APIKey },
19
+ -> {
20
+ OpenAI::Models::Admin::Organization::Projects::ServiceAccountCreateResponse::APIKey
21
+ },
20
22
  nil?: true
21
23
 
22
24
  # @!attribute created_at
@@ -19,7 +19,12 @@ module OpenAI
19
19
  #
20
20
  # @return [Array<OpenAI::Models::Admin::Organization::Projects::Users::RoleListResponse::AssignmentSource>, nil]
21
21
  required :assignment_sources,
22
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Projects::Users::RoleListResponse::AssignmentSource] },
22
+ -> do
23
+ OpenAI::Internal::Type::ArrayOf[
24
+ OpenAI::Models::Admin::Organization::Projects::Users::RoleListResponse::
25
+ AssignmentSource
26
+ ]
27
+ end,
23
28
  nil?: true
24
29
 
25
30
  # @!attribute created_at
@@ -19,7 +19,12 @@ module OpenAI
19
19
  #
20
20
  # @return [Array<OpenAI::Models::Admin::Organization::Projects::Users::RoleRetrieveResponse::AssignmentSource>, nil]
21
21
  required :assignment_sources,
22
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Projects::Users::RoleRetrieveResponse::AssignmentSource] },
22
+ -> do
23
+ OpenAI::Internal::Type::ArrayOf[
24
+ OpenAI::Models::Admin::Organization::Projects::Users::RoleRetrieveResponse::
25
+ AssignmentSource
26
+ ]
27
+ end,
23
28
  nil?: true
24
29
 
25
30
  # @!attribute created_at
@@ -18,7 +18,11 @@ module OpenAI
18
18
  #
19
19
  # @return [Array<OpenAI::Models::Admin::Organization::Users::RoleListResponse::AssignmentSource>, nil]
20
20
  required :assignment_sources,
21
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Users::RoleListResponse::AssignmentSource] },
21
+ -> do
22
+ OpenAI::Internal::Type::ArrayOf[
23
+ OpenAI::Models::Admin::Organization::Users::RoleListResponse::AssignmentSource
24
+ ]
25
+ end,
22
26
  nil?: true
23
27
 
24
28
  # @!attribute created_at
@@ -18,7 +18,11 @@ module OpenAI
18
18
  #
19
19
  # @return [Array<OpenAI::Models::Admin::Organization::Users::RoleRetrieveResponse::AssignmentSource>, nil]
20
20
  required :assignment_sources,
21
- -> { OpenAI::Internal::Type::ArrayOf[OpenAI::Models::Admin::Organization::Users::RoleRetrieveResponse::AssignmentSource] },
21
+ -> do
22
+ OpenAI::Internal::Type::ArrayOf[
23
+ OpenAI::Models::Admin::Organization::Users::RoleRetrieveResponse::AssignmentSource
24
+ ]
25
+ end,
22
26
  nil?: true
23
27
 
24
28
  # @!attribute created_at
@@ -24,10 +24,15 @@ module OpenAI
24
24
  O4_MINI_DEEP_RESEARCH_2025_06_26 = :"o4-mini-deep-research-2025-06-26"
25
25
  COMPUTER_USE_PREVIEW = :"computer-use-preview"
26
26
  COMPUTER_USE_PREVIEW_2025_03_11 = :"computer-use-preview-2025-03-11"
27
+ GPT_5_5_PRO = :"gpt-5.5-pro"
28
+ GPT_5_5_PRO_2026_04_23 = :"gpt-5.5-pro-2026-04-23"
27
29
  GPT_5_CODEX = :"gpt-5-codex"
28
30
  GPT_5_PRO = :"gpt-5-pro"
29
31
  GPT_5_PRO_2025_10_06 = :"gpt-5-pro-2025-10-06"
30
32
  GPT_5_1_CODEX_MAX = :"gpt-5.1-codex-max"
33
+ GPT_DAYBREAK_BLUE_LATEST = :"gpt-daybreak-blue-latest"
34
+ GPT_DAYBREAK_RED_LATEST = :"gpt-daybreak-red-latest"
35
+ GPT_5_6_CYBER = :"gpt-5.6-cyber"
31
36
 
32
37
  # @!method self.values
33
38
  # @return [Array<Symbol>]
@@ -12,7 +12,13 @@ module OpenAI
12
12
 
13
13
  # @!attribute file
14
14
  # The audio file object (not file name) to transcribe, in one of these formats:
15
- # flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
15
+ # flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm. The request must include
16
+ # enough format metadata for the file to be identified. We recommend an
17
+ # extension-bearing filename and an appropriate content type.
18
+ #
19
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
20
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
21
+ # content type.
16
22
  #
17
23
  # @return [Pathname, StringIO, IO, String, OpenAI::FilePart]
18
24
  required :file, OpenAI::Internal::Type::FileInput
@@ -10,7 +10,13 @@ module OpenAI
10
10
 
11
11
  # @!attribute file
12
12
  # The audio file object (not file name) translate, in one of these formats: flac,
13
- # mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm.
13
+ # mp3, mp4, mpeg, mpga, m4a, ogg, wav, or webm. The request must include enough
14
+ # format metadata for the file to be identified. We recommend an extension-bearing
15
+ # filename and an appropriate content type.
16
+ #
17
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
18
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
19
+ # content type.
14
20
  #
15
21
  # @return [Pathname, StringIO, IO, String, OpenAI::FilePart]
16
22
  required :file, OpenAI::Internal::Type::FileInput
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenAI
4
+ module Models
5
+ module Beta
6
+ module BetaMcpToolCallError
7
+ extend OpenAI::Internal::Type::Union
8
+
9
+ discriminator :type
10
+
11
+ variant :mcp_protocol_error, -> { OpenAI::Beta::BetaMcpToolCallError::McpProtocolError }
12
+
13
+ variant :mcp_tool_execution_error, -> { OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError }
14
+
15
+ variant :http_error, -> { OpenAI::Beta::BetaMcpToolCallError::HTTPError }
16
+
17
+ class McpProtocolError < OpenAI::Internal::Type::BaseModel
18
+ # @!attribute code
19
+ #
20
+ # @return [Integer]
21
+ required :code, Integer
22
+
23
+ # @!attribute message
24
+ #
25
+ # @return [String]
26
+ required :message, String
27
+
28
+ # @!attribute type
29
+ #
30
+ # @return [Symbol, :mcp_protocol_error]
31
+ required :type, const: :mcp_protocol_error
32
+
33
+ # @!method initialize(code:, message:, type: :mcp_protocol_error)
34
+ # @param code [Integer]
35
+ # @param message [String]
36
+ # @param type [Symbol, :mcp_protocol_error]
37
+ end
38
+
39
+ class McpToolExecutionError < OpenAI::Internal::Type::BaseModel
40
+ # @!attribute content
41
+ #
42
+ # @return [Object]
43
+ required :content, OpenAI::Internal::Type::Unknown
44
+
45
+ # @!attribute type
46
+ #
47
+ # @return [Symbol, :mcp_tool_execution_error]
48
+ required :type, const: :mcp_tool_execution_error
49
+
50
+ # @!method initialize(content:, type: :mcp_tool_execution_error)
51
+ # @param content [Object]
52
+ # @param type [Symbol, :mcp_tool_execution_error]
53
+ end
54
+
55
+ class HTTPError < OpenAI::Internal::Type::BaseModel
56
+ # @!attribute code
57
+ #
58
+ # @return [Integer]
59
+ required :code, Integer
60
+
61
+ # @!attribute message
62
+ #
63
+ # @return [String]
64
+ required :message, String
65
+
66
+ # @!attribute type
67
+ #
68
+ # @return [Symbol, :http_error]
69
+ required :type, const: :http_error
70
+
71
+ # @!method initialize(code:, message:, type: :http_error)
72
+ # @param code [Integer]
73
+ # @param message [String]
74
+ # @param type [Symbol, :http_error]
75
+ end
76
+
77
+ # @!method self.variants
78
+ # @return [Array(OpenAI::Models::Beta::BetaMcpToolCallError::McpProtocolError, OpenAI::Models::Beta::BetaMcpToolCallError::McpToolExecutionError, OpenAI::Models::Beta::BetaMcpToolCallError::HTTPError)]
79
+ end
80
+ end
81
+
82
+ BetaMcpToolCallError = Beta::BetaMcpToolCallError
83
+ end
84
+ end