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
@@ -0,0 +1,88 @@
1
+ module OpenAI
2
+ module Internal
3
+ module Logging
4
+ LOG_LEVELS: ::Hash[Symbol, Integer]
5
+ REDACTED_HEADERS: ::Array[String]
6
+ MAX_BODY_BYTES: Integer
7
+ MAX_ARRAY_ITEMS: Integer
8
+ OPAQUE_STRING_BYTES: Integer
9
+ SENSITIVE_BODY_KEY: Regexp
10
+ SENSITIVE_QUERY_KEY: Regexp
11
+ URL_HEADER_KEY: Regexp
12
+
13
+ class Context
14
+ def initialize: (
15
+ logger: OpenAI::_Logger?,
16
+ log_level: Symbol,
17
+ on_retry: (^(OpenAI::RetryEvent) -> void)?,
18
+ method: Symbol,
19
+ url: URI::Generic
20
+ ) -> void
21
+ def request_started: (
22
+ OpenAI::HTTPClient::Request request,
23
+ redirect_count: Integer
24
+ ) -> void
25
+ def response_received: (
26
+ OpenAI::HTTPClient::Response response
27
+ ) -> OpenAI::HTTPClient::Response
28
+ def attempt_failed: (OpenAI::Errors::APIConnectionError error) -> void
29
+ def retry_scheduled: (
30
+ Integer | OpenAI::Errors::APIConnectionError cause,
31
+ delay: Float,
32
+ response: OpenAI::ResponseMetadata?,
33
+ retry_count: Integer,
34
+ max_retries: Integer
35
+ ) -> void
36
+ def completed: (OpenAI::HTTPClient::Response response) -> void
37
+ def observe_stream: [Elem] (
38
+ OpenAI::Internal::Type::BaseStream[top, Elem] stream,
39
+ response: OpenAI::HTTPClient::Response
40
+ ) -> OpenAI::Internal::Type::BaseStream[top, Elem]
41
+ def request_failed: (StandardError error) -> void
42
+ def response_body: (
43
+ String body,
44
+ headers: ::Hash[String, String],
45
+ complete: bool,
46
+ total_bytes: Integer,
47
+ attempt: Integer
48
+ ) -> void
49
+ end
50
+
51
+ class ObservedBody
52
+ include Enumerable[String]
53
+
54
+ def initialize: (
55
+ body: Enumerable[String],
56
+ headers: ::Hash[String, String],
57
+ context: OpenAI::Internal::Logging::Context,
58
+ attempt: Integer
59
+ ) -> void
60
+
61
+ def each: { (String) -> void } -> void
62
+ def close: -> void
63
+ end
64
+
65
+ def self.normalize_level: (Symbol | String value) -> Symbol
66
+ def self.validate_logger!: (OpenAI::_Logger? logger) -> void
67
+ def self.default_logger: -> OpenAI::_Logger
68
+ def self.enabled?: (Symbol configured_level, Symbol event_level) -> bool
69
+ def self.safe_path: (URI::Generic url) -> String
70
+ def self.safe_url: (URI::Generic url) -> String
71
+ def self.safe_field: (top? value) -> String
72
+ def self.sensitive_header?: (String | Symbol name) -> bool
73
+ def self.credential_header?: (String | Symbol name) -> bool
74
+ def self.format_headers: (::Hash[String, String] headers) -> String
75
+ def self.format_body: (
76
+ top body,
77
+ headers: ::Hash[String, String]
78
+ ) -> String
79
+ def self.capture_response_body?: (::Hash[String, String] headers) -> bool
80
+ def self.format_observed_body: (
81
+ String body,
82
+ headers: ::Hash[String, String],
83
+ complete: bool,
84
+ total_bytes: Integer
85
+ ) -> String
86
+ end
87
+ end
88
+ end
@@ -7,13 +7,15 @@ module OpenAI
7
7
  attr_accessor prepare_request: (^(
8
8
  OpenAI::Internal::Transport::BaseClient::request_input
9
9
  ) -> OpenAI::Internal::Transport::BaseClient::request_input)?
10
+ attr_accessor authentication_headers: Array[String]
10
11
 
11
12
  def initialize: (
12
13
  name: String,
13
14
  base_url: String,
14
15
  prepare_request: (^(
15
16
  OpenAI::Internal::Transport::BaseClient::request_input
16
- ) -> OpenAI::Internal::Transport::BaseClient::request_input)?
17
+ ) -> OpenAI::Internal::Transport::BaseClient::request_input)?,
18
+ authentication_headers: Array[String]
17
19
  ) -> void
18
20
  end
19
21
 
@@ -6,7 +6,9 @@ module OpenAI
6
6
 
7
7
  def close: -> void
8
8
 
9
- private def read_enum: (Integer? max_len) -> String
9
+ private def read_enum: (Integer? max_len) -> String?
10
+
11
+ private def read_buffer: (Integer max_len) -> String
10
12
 
11
13
  def read: (?Integer? max_len, ?String? out_string) -> String?
12
14
 
@@ -30,7 +30,7 @@ module OpenAI
30
30
  headers: ::Hash[String, String],
31
31
  body: top,
32
32
  max_retries: Integer,
33
- timeout: Float,
33
+ timeout: Float?,
34
34
  :follow_redirects? => bool,
35
35
  :provider_auth? => Symbol
36
36
  }
@@ -63,7 +63,7 @@ module OpenAI
63
63
 
64
64
  attr_reader base_url: URI::Generic
65
65
 
66
- attr_reader timeout: Float
66
+ attr_reader timeout: Float?
67
67
 
68
68
  attr_reader max_retries: Integer
69
69
 
@@ -75,12 +75,18 @@ module OpenAI
75
75
 
76
76
  attr_reader idempotency_header: String?
77
77
 
78
+ attr_reader logger: OpenAI::_Logger?
79
+
80
+ attr_reader log_level: Symbol
81
+
82
+ attr_reader on_retry: (^(OpenAI::RetryEvent) -> void)?
83
+
78
84
  # @api private
79
85
  attr_reader requester: OpenAI::_HTTPClient
80
86
 
81
87
  def initialize: (
82
88
  base_url: String,
83
- ?timeout: Float,
89
+ ?timeout: Float?,
84
90
  ?max_retries: Integer,
85
91
  ?initial_retry_delay: Float,
86
92
  ?max_retry_delay: Float,
@@ -88,7 +94,10 @@ module OpenAI
88
94
  | Integer
89
95
  | ::Array[(String | Integer)?])?],
90
96
  ?idempotency_header: String?,
91
- ?http_client: OpenAI::_HTTPClient?
97
+ ?http_client: OpenAI::_HTTPClient?,
98
+ ?logger: OpenAI::_Logger?,
99
+ ?log_level: (Symbol | String)?,
100
+ ?on_retry: (^(OpenAI::RetryEvent) -> void)?
92
101
  ) -> void
93
102
 
94
103
  private def auth_headers: -> ::Hash[String, String]
@@ -130,7 +139,9 @@ module OpenAI
130
139
  redirect_count: Integer,
131
140
  retry_count: Integer,
132
141
  send_retry_header: bool
133
- ) -> OpenAI::HTTPClient::Response
142
+ ) {
143
+ -> OpenAI::Internal::Logging::Context
144
+ } -> OpenAI::HTTPClient::Response
134
145
 
135
146
  def request: (
136
147
  Symbol method,
@@ -151,6 +162,23 @@ module OpenAI
151
162
  ?options: OpenAI::request_opts?
152
163
  ) -> top
153
164
 
165
+ private def perform_request: (
166
+ OpenAI::Internal::Transport::BaseClient::request_components req
167
+ ) -> [URI::Generic, OpenAI::HTTPClient::Response, OpenAI::Internal::Logging::Context]
168
+
169
+ private def finish_request: (
170
+ OpenAI::Internal::Logging::Context log_context,
171
+ OpenAI::HTTPClient::Response response
172
+ ) {
173
+ -> top
174
+ } -> top
175
+
176
+ private def parse_response: (
177
+ OpenAI::Internal::Transport::BaseClient::request_components req,
178
+ url: URI::Generic,
179
+ response: OpenAI::HTTPClient::Response
180
+ ) -> top
181
+
154
182
  def inspect: -> String
155
183
  end
156
184
  end
@@ -58,6 +58,17 @@ module OpenAI
58
58
 
59
59
  def hash: -> Integer
60
60
 
61
+ # The ID of the API request, returned via the `x-request-id` response
62
+ # header. This is only populated on top-level response objects returned
63
+ # by the client.
64
+ def _request_id: -> String?
65
+
66
+ # Metadata from the HTTP response that produced this model. This is
67
+ # only populated on top-level response objects returned by the client.
68
+ def last_response: -> OpenAI::ResponseMetadata?
69
+
70
+ def _set_last_response: (OpenAI::ResponseMetadata response) -> self
71
+
61
72
  def self.coerce: (
62
73
  OpenAI::Internal::Type::BaseModel | ::Hash[top, top] | top value,
63
74
  state: OpenAI::Internal::Type::Converter::coerce_state
@@ -89,6 +100,8 @@ module OpenAI
89
100
 
90
101
  def to_yaml: (*top a) -> String
91
102
 
103
+ def encode_with: (top coder) -> void
104
+
92
105
  def initialize: (?::Hash[Symbol, top] | instance data) -> void
93
106
 
94
107
  def self.inspect: (?depth: Integer) -> String
@@ -2,6 +2,13 @@ module OpenAI
2
2
  module Internal
3
3
  module Type
4
4
  module BasePage[Elem]
5
+ # The ID of the API request, returned via the `x-request-id` response
6
+ # header. This is only populated on top-level response objects returned
7
+ # by the client.
8
+ def _request_id: -> String?
9
+
10
+ def last_response: -> OpenAI::ResponseMetadata
11
+
5
12
  def next_page?: -> bool
6
13
 
7
14
  def next_page: -> instance
@@ -15,7 +22,7 @@ module OpenAI
15
22
  def initialize: (
16
23
  client: OpenAI::Internal::Transport::BaseClient,
17
24
  req: OpenAI::Internal::Transport::BaseClient::request_components,
18
- headers: ::Hash[String, String],
25
+ response_metadata: OpenAI::ResponseMetadata,
19
26
  page_data: top
20
27
  ) -> void
21
28
  end
@@ -8,8 +8,15 @@ module OpenAI
8
8
 
9
9
  attr_reader headers: ::Hash[String, String]
10
10
 
11
+ attr_reader last_response: OpenAI::ResponseMetadata
12
+
11
13
  def close: -> void
12
14
 
15
+ def observe: (
16
+ context: OpenAI::Internal::Logging::Context,
17
+ response: OpenAI::HTTPClient::Response
18
+ ) -> self
19
+
13
20
  private def iterator: -> Enumerable[Elem]
14
21
 
15
22
  def each: { (Elem arg0) -> void } -> void
@@ -21,8 +28,7 @@ module OpenAI
21
28
  def initialize: (
22
29
  model: Class | OpenAI::Internal::Type::Converter,
23
30
  url: URI::Generic,
24
- status: Integer,
25
- headers: ::Hash[String, String],
31
+ response_metadata: OpenAI::ResponseMetadata,
26
32
  response: OpenAI::HTTPClient::Response,
27
33
  unwrap: Symbol
28
34
  | Integer
@@ -111,6 +111,10 @@ module OpenAI
111
111
  ?content_type: String?
112
112
  ) -> void
113
113
 
114
+ def self?.escape_multipart_header_param: (
115
+ Pathname | String | Symbol value
116
+ ) -> String
117
+
114
118
  def self?.write_multipart_chunk: (
115
119
  Enumerator::Yielder y,
116
120
  boundary: String,
@@ -119,6 +123,14 @@ module OpenAI
119
123
  closing: ::Array[^-> void]
120
124
  ) -> void
121
125
 
126
+ def self?.write_multipart_value: (
127
+ Enumerator::Yielder y,
128
+ boundary: String,
129
+ key: Symbol | String,
130
+ val: top,
131
+ closing: ::Array[^-> void]
132
+ ) -> void
133
+
122
134
  def self?.encode_multipart_streaming: (
123
135
  top body
124
136
  ) -> [String, Enumerable[String]]
@@ -199,6 +199,7 @@ module OpenAI
199
199
  | :"tenant.workload_identity.mapping.archived"
200
200
  | :"tenant.workload_identity.binding.created"
201
201
  | :"tenant.workload_identity.principal.provisioned"
202
+ | :"tenant.workload_identity.access_token.issued"
202
203
  | :"tenant.admin_api_key.created"
203
204
  | :"tenant.admin_api_key.updated"
204
205
  | :"tenant.admin_api_key.deleted"
@@ -346,6 +347,7 @@ module OpenAI
346
347
  TENANT_WORKLOAD_IDENTITY_MAPPING_ARCHIVED: :"tenant.workload_identity.mapping.archived"
347
348
  TENANT_WORKLOAD_IDENTITY_BINDING_CREATED: :"tenant.workload_identity.binding.created"
348
349
  TENANT_WORKLOAD_IDENTITY_PRINCIPAL_PROVISIONED: :"tenant.workload_identity.principal.provisioned"
350
+ TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED: :"tenant.workload_identity.access_token.issued"
349
351
  TENANT_ADMIN_API_KEY_CREATED: :"tenant.admin_api_key.created"
350
352
  TENANT_ADMIN_API_KEY_UPDATED: :"tenant.admin_api_key.updated"
351
353
  TENANT_ADMIN_API_KEY_DELETED: :"tenant.admin_api_key.deleted"
@@ -604,6 +604,7 @@ module OpenAI
604
604
  | :"tenant.workload_identity.mapping.archived"
605
605
  | :"tenant.workload_identity.binding.created"
606
606
  | :"tenant.workload_identity.principal.provisioned"
607
+ | :"tenant.workload_identity.access_token.issued"
607
608
  | :"tenant.admin_api_key.created"
608
609
  | :"tenant.admin_api_key.updated"
609
610
  | :"tenant.admin_api_key.deleted"
@@ -751,6 +752,7 @@ module OpenAI
751
752
  TENANT_WORKLOAD_IDENTITY_MAPPING_ARCHIVED: :"tenant.workload_identity.mapping.archived"
752
753
  TENANT_WORKLOAD_IDENTITY_BINDING_CREATED: :"tenant.workload_identity.binding.created"
753
754
  TENANT_WORKLOAD_IDENTITY_PRINCIPAL_PROVISIONED: :"tenant.workload_identity.principal.provisioned"
755
+ TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED: :"tenant.workload_identity.access_token.issued"
754
756
  TENANT_ADMIN_API_KEY_CREATED: :"tenant.admin_api_key.created"
755
757
  TENANT_ADMIN_API_KEY_UPDATED: :"tenant.admin_api_key.updated"
756
758
  TENANT_ADMIN_API_KEY_DELETED: :"tenant.admin_api_key.deleted"
@@ -19,10 +19,15 @@ module OpenAI
19
19
  | :"o4-mini-deep-research-2025-06-26"
20
20
  | :"computer-use-preview"
21
21
  | :"computer-use-preview-2025-03-11"
22
+ | :"gpt-5.5-pro"
23
+ | :"gpt-5.5-pro-2026-04-23"
22
24
  | :"gpt-5-codex"
23
25
  | :"gpt-5-pro"
24
26
  | :"gpt-5-pro-2025-10-06"
25
27
  | :"gpt-5.1-codex-max"
28
+ | :"gpt-daybreak-blue-latest"
29
+ | :"gpt-daybreak-red-latest"
30
+ | :"gpt-5.6-cyber"
26
31
 
27
32
  module ResponsesOnlyModel
28
33
  extend OpenAI::Internal::Type::Enum
@@ -37,10 +42,15 @@ module OpenAI
37
42
  O4_MINI_DEEP_RESEARCH_2025_06_26: :"o4-mini-deep-research-2025-06-26"
38
43
  COMPUTER_USE_PREVIEW: :"computer-use-preview"
39
44
  COMPUTER_USE_PREVIEW_2025_03_11: :"computer-use-preview-2025-03-11"
45
+ GPT_5_5_PRO: :"gpt-5.5-pro"
46
+ GPT_5_5_PRO_2026_04_23: :"gpt-5.5-pro-2026-04-23"
40
47
  GPT_5_CODEX: :"gpt-5-codex"
41
48
  GPT_5_PRO: :"gpt-5-pro"
42
49
  GPT_5_PRO_2025_10_06: :"gpt-5-pro-2025-10-06"
43
50
  GPT_5_1_CODEX_MAX: :"gpt-5.1-codex-max"
51
+ GPT_DAYBREAK_BLUE_LATEST: :"gpt-daybreak-blue-latest"
52
+ GPT_DAYBREAK_RED_LATEST: :"gpt-daybreak-red-latest"
53
+ GPT_5_6_CYBER: :"gpt-5.6-cyber"
44
54
 
45
55
  def self?.values: -> ::Array[OpenAI::Models::AllModels::responses_only_model]
46
56
  end
@@ -0,0 +1,75 @@
1
+ module OpenAI
2
+ module Models
3
+ module BetaMcpToolCallError = Beta::BetaMcpToolCallError
4
+
5
+ module Beta
6
+ type beta_mcp_tool_call_error =
7
+ OpenAI::Beta::BetaMcpToolCallError::McpProtocolError
8
+ | OpenAI::Beta::BetaMcpToolCallError::McpToolExecutionError
9
+ | OpenAI::Beta::BetaMcpToolCallError::HTTPError
10
+
11
+ module BetaMcpToolCallError
12
+ extend OpenAI::Internal::Type::Union
13
+
14
+ type mcp_protocol_error =
15
+ { code: Integer, message: String, type: :mcp_protocol_error }
16
+
17
+ class McpProtocolError < OpenAI::Internal::Type::BaseModel
18
+ attr_accessor code: Integer
19
+
20
+ attr_accessor message: String
21
+
22
+ attr_accessor type: :mcp_protocol_error
23
+
24
+ def initialize: (
25
+ code: Integer,
26
+ message: String,
27
+ ?type: :mcp_protocol_error
28
+ ) -> void
29
+
30
+ def to_hash: -> {
31
+ code: Integer,
32
+ message: String,
33
+ type: :mcp_protocol_error
34
+ }
35
+ end
36
+
37
+ type mcp_tool_execution_error =
38
+ { content: top, type: :mcp_tool_execution_error }
39
+
40
+ class McpToolExecutionError < OpenAI::Internal::Type::BaseModel
41
+ attr_accessor content: top
42
+
43
+ attr_accessor type: :mcp_tool_execution_error
44
+
45
+ def initialize: (
46
+ content: top,
47
+ ?type: :mcp_tool_execution_error
48
+ ) -> void
49
+
50
+ def to_hash: -> { content: top, type: :mcp_tool_execution_error }
51
+ end
52
+
53
+ type http_error = { code: Integer, message: String, type: :http_error }
54
+
55
+ class HTTPError < OpenAI::Internal::Type::BaseModel
56
+ attr_accessor code: Integer
57
+
58
+ attr_accessor message: String
59
+
60
+ attr_accessor type: :http_error
61
+
62
+ def initialize: (
63
+ code: Integer,
64
+ message: String,
65
+ ?type: :http_error
66
+ ) -> void
67
+
68
+ def to_hash: -> { code: Integer, message: String, type: :http_error }
69
+ end
70
+
71
+ def self?.variants: -> ::Array[OpenAI::Models::Beta::beta_mcp_tool_call_error]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -250,6 +250,7 @@ module OpenAI
250
250
  | :"gpt-5.6-terra"
251
251
  | :"gpt-5.6-luna"
252
252
  | :"gpt-5.5"
253
+ | :"gpt-5.5-2026-04-23"
253
254
  | :"gpt-5.4"
254
255
  | :"gpt-5.4-mini"
255
256
  | :"gpt-5.4-nano"
@@ -338,10 +339,15 @@ module OpenAI
338
339
  | :"o4-mini-deep-research-2025-06-26"
339
340
  | :"computer-use-preview"
340
341
  | :"computer-use-preview-2025-03-11"
342
+ | :"gpt-5.5-pro"
343
+ | :"gpt-5.5-pro-2026-04-23"
341
344
  | :"gpt-5-codex"
342
345
  | :"gpt-5-pro"
343
346
  | :"gpt-5-pro-2025-10-06"
344
347
  | :"gpt-5.1-codex-max"
348
+ | :"gpt-daybreak-blue-latest"
349
+ | :"gpt-daybreak-red-latest"
350
+ | :"gpt-5.6-cyber"
345
351
  | String
346
352
 
347
353
  module Model
@@ -353,6 +359,7 @@ module OpenAI
353
359
  GPT_5_6_TERRA: :"gpt-5.6-terra"
354
360
  GPT_5_6_LUNA: :"gpt-5.6-luna"
355
361
  GPT_5_5: :"gpt-5.5"
362
+ GPT_5_5_2026_04_23: :"gpt-5.5-2026-04-23"
356
363
  GPT_5_4: :"gpt-5.4"
357
364
  GPT_5_4_MINI: :"gpt-5.4-mini"
358
365
  GPT_5_4_NANO: :"gpt-5.4-nano"
@@ -441,10 +448,15 @@ module OpenAI
441
448
  O4_MINI_DEEP_RESEARCH_2025_06_26: :"o4-mini-deep-research-2025-06-26"
442
449
  COMPUTER_USE_PREVIEW: :"computer-use-preview"
443
450
  COMPUTER_USE_PREVIEW_2025_03_11: :"computer-use-preview-2025-03-11"
451
+ GPT_5_5_PRO: :"gpt-5.5-pro"
452
+ GPT_5_5_PRO_2026_04_23: :"gpt-5.5-pro-2026-04-23"
444
453
  GPT_5_CODEX: :"gpt-5-codex"
445
454
  GPT_5_PRO: :"gpt-5-pro"
446
455
  GPT_5_PRO_2025_10_06: :"gpt-5-pro-2025-10-06"
447
456
  GPT_5_1_CODEX_MAX: :"gpt-5.1-codex-max"
457
+ GPT_DAYBREAK_BLUE_LATEST: :"gpt-daybreak-blue-latest"
458
+ GPT_DAYBREAK_RED_LATEST: :"gpt-daybreak-red-latest"
459
+ GPT_5_6_CYBER: :"gpt-5.6-cyber"
448
460
  end
449
461
 
450
462
  type tool_choice =
@@ -829,7 +841,7 @@ module OpenAI
829
841
  end
830
842
 
831
843
  type service_tier =
832
- :auto | :default | :flex | :scale | :priority | :fast
844
+ :auto | :default | :flex | :scale | :priority | :fast | :ultrafast
833
845
 
834
846
  module ServiceTier
835
847
  extend OpenAI::Internal::Type::Enum
@@ -840,6 +852,7 @@ module OpenAI
840
852
  SCALE: :scale
841
853
  PRIORITY: :priority
842
854
  FAST: :fast
855
+ ULTRAFAST: :ultrafast
843
856
 
844
857
  def self?.values: -> ::Array[OpenAI::Models::Beta::BetaResponse::service_tier]
845
858
  end
@@ -1785,7 +1785,7 @@ module OpenAI
1785
1785
  type: :mcp_call,
1786
1786
  agent: OpenAI::Beta::BetaResponseInputItem::McpCall::Agent?,
1787
1787
  approval_request_id: String?,
1788
- error: String?,
1788
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1789
1789
  output: String?,
1790
1790
  status: OpenAI::Models::Beta::BetaResponseInputItem::McpCall::status
1791
1791
  }
@@ -1805,7 +1805,7 @@ module OpenAI
1805
1805
 
1806
1806
  attr_accessor approval_request_id: String?
1807
1807
 
1808
- attr_accessor error: String?
1808
+ attr_accessor error: OpenAI::Models::Beta::beta_mcp_tool_call_error?
1809
1809
 
1810
1810
  attr_accessor output: String?
1811
1811
 
@@ -1822,7 +1822,7 @@ module OpenAI
1822
1822
  server_label: String,
1823
1823
  ?agent: OpenAI::Beta::BetaResponseInputItem::McpCall::Agent?,
1824
1824
  ?approval_request_id: String?,
1825
- ?error: String?,
1825
+ ?error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1826
1826
  ?output: String?,
1827
1827
  ?status: OpenAI::Models::Beta::BetaResponseInputItem::McpCall::status,
1828
1828
  ?type: :mcp_call
@@ -1836,7 +1836,7 @@ module OpenAI
1836
1836
  type: :mcp_call,
1837
1837
  agent: OpenAI::Beta::BetaResponseInputItem::McpCall::Agent?,
1838
1838
  approval_request_id: String?,
1839
- error: String?,
1839
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1840
1840
  output: String?,
1841
1841
  status: OpenAI::Models::Beta::BetaResponseInputItem::McpCall::status
1842
1842
  }
@@ -1008,7 +1008,7 @@ module OpenAI
1008
1008
  type: :mcp_call,
1009
1009
  agent: OpenAI::Beta::BetaResponseItem::McpCall::Agent?,
1010
1010
  approval_request_id: String?,
1011
- error: String?,
1011
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1012
1012
  output: String?,
1013
1013
  status: OpenAI::Models::Beta::BetaResponseItem::McpCall::status
1014
1014
  }
@@ -1028,7 +1028,7 @@ module OpenAI
1028
1028
 
1029
1029
  attr_accessor approval_request_id: String?
1030
1030
 
1031
- attr_accessor error: String?
1031
+ attr_accessor error: OpenAI::Models::Beta::beta_mcp_tool_call_error?
1032
1032
 
1033
1033
  attr_accessor output: String?
1034
1034
 
@@ -1045,7 +1045,7 @@ module OpenAI
1045
1045
  server_label: String,
1046
1046
  ?agent: OpenAI::Beta::BetaResponseItem::McpCall::Agent?,
1047
1047
  ?approval_request_id: String?,
1048
- ?error: String?,
1048
+ ?error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1049
1049
  ?output: String?,
1050
1050
  ?status: OpenAI::Models::Beta::BetaResponseItem::McpCall::status,
1051
1051
  ?type: :mcp_call
@@ -1059,7 +1059,7 @@ module OpenAI
1059
1059
  type: :mcp_call,
1060
1060
  agent: OpenAI::Beta::BetaResponseItem::McpCall::Agent?,
1061
1061
  approval_request_id: String?,
1062
- error: String?,
1062
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
1063
1063
  output: String?,
1064
1064
  status: OpenAI::Models::Beta::BetaResponseItem::McpCall::status
1065
1065
  }
@@ -819,7 +819,7 @@ module OpenAI
819
819
  type: :mcp_call,
820
820
  agent: OpenAI::Beta::BetaResponseOutputItem::McpCall::Agent?,
821
821
  approval_request_id: String?,
822
- error: String?,
822
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
823
823
  output: String?,
824
824
  status: OpenAI::Models::Beta::BetaResponseOutputItem::McpCall::status
825
825
  }
@@ -839,7 +839,7 @@ module OpenAI
839
839
 
840
840
  attr_accessor approval_request_id: String?
841
841
 
842
- attr_accessor error: String?
842
+ attr_accessor error: OpenAI::Models::Beta::beta_mcp_tool_call_error?
843
843
 
844
844
  attr_accessor output: String?
845
845
 
@@ -856,7 +856,7 @@ module OpenAI
856
856
  server_label: String,
857
857
  ?agent: OpenAI::Beta::BetaResponseOutputItem::McpCall::Agent?,
858
858
  ?approval_request_id: String?,
859
- ?error: String?,
859
+ ?error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
860
860
  ?output: String?,
861
861
  ?status: OpenAI::Models::Beta::BetaResponseOutputItem::McpCall::status,
862
862
  ?type: :mcp_call
@@ -870,7 +870,7 @@ module OpenAI
870
870
  type: :mcp_call,
871
871
  agent: OpenAI::Beta::BetaResponseOutputItem::McpCall::Agent?,
872
872
  approval_request_id: String?,
873
- error: String?,
873
+ error: OpenAI::Models::Beta::beta_mcp_tool_call_error?,
874
874
  output: String?,
875
875
  status: OpenAI::Models::Beta::BetaResponseOutputItem::McpCall::status
876
876
  }