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
@@ -2,12 +2,20 @@
2
2
 
3
3
  module OpenAI
4
4
  module Resources
5
+ # @deprecated The Sora API is scheduled to permanently shut down on September
6
+ # 24, 2026.
5
7
  class Videos
8
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
9
+ #
6
10
  # Some parameter documentations has been truncated, see
7
11
  # {OpenAI::Models::VideoCreateParams} for more details.
8
12
  #
9
13
  # Create a new video generation job from a prompt and optional reference assets.
10
14
  #
15
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
16
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
17
+ # content type.
18
+ #
11
19
  # @overload create(prompt:, input_reference: nil, model: nil, seconds: nil, size: nil, request_options: {})
12
20
  #
13
21
  # @param prompt [String] Text prompt that describes the video to generate.
@@ -38,6 +46,8 @@ module OpenAI
38
46
  )
39
47
  end
40
48
 
49
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
50
+ #
41
51
  # Fetch the latest metadata for a generated video.
42
52
  #
43
53
  # @overload retrieve(video_id, request_options: {})
@@ -59,6 +69,8 @@ module OpenAI
59
69
  )
60
70
  end
61
71
 
72
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
73
+ #
62
74
  # Some parameter documentations has been truncated, see
63
75
  # {OpenAI::Models::VideoListParams} for more details.
64
76
  #
@@ -91,6 +103,8 @@ module OpenAI
91
103
  )
92
104
  end
93
105
 
106
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
107
+ #
94
108
  # Permanently delete a completed or failed video and its stored assets.
95
109
  #
96
110
  # @overload delete(video_id, request_options: {})
@@ -112,8 +126,14 @@ module OpenAI
112
126
  )
113
127
  end
114
128
 
129
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
130
+ #
115
131
  # Create a character from an uploaded video.
116
132
  #
133
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
134
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
135
+ # content type.
136
+ #
117
137
  # @overload create_character(name:, video:, request_options: {})
118
138
  #
119
139
  # @param name [String] Display name for this API character.
@@ -138,6 +158,8 @@ module OpenAI
138
158
  )
139
159
  end
140
160
 
161
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
162
+ #
141
163
  # Download the generated video bytes or a derived preview asset.
142
164
  #
143
165
  # Streams the rendered video content for the specified video job.
@@ -167,9 +189,15 @@ module OpenAI
167
189
  )
168
190
  end
169
191
 
192
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
193
+ #
170
194
  # Create a new video generation job by editing a source video or existing
171
195
  # generated video.
172
196
  #
197
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
198
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
199
+ # content type.
200
+ #
173
201
  # @overload edit(prompt:, video:, request_options: {})
174
202
  #
175
203
  # @param prompt [String] Text prompt that describes how to edit the source video.
@@ -194,11 +222,17 @@ module OpenAI
194
222
  )
195
223
  end
196
224
 
225
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
226
+ #
197
227
  # Some parameter documentations has been truncated, see
198
228
  # {OpenAI::Models::VideoExtendParams} for more details.
199
229
  #
200
230
  # Create an extension of a completed video.
201
231
  #
232
+ # `String`, `StringIO`, and pathless `IO` inputs are sent with generic upload
233
+ # metadata. Use `OpenAI::FilePart` when you need to override the filename or
234
+ # content type.
235
+ #
202
236
  # @overload extend_(prompt:, seconds:, video:, request_options: {})
203
237
  #
204
238
  # @param prompt [String] Updated text prompt that directs the extension generation.
@@ -225,6 +259,8 @@ module OpenAI
225
259
  )
226
260
  end
227
261
 
262
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
263
+ #
228
264
  # Fetch a character.
229
265
  #
230
266
  # @overload get_character(character_id, request_options: {})
@@ -246,6 +282,8 @@ module OpenAI
246
282
  )
247
283
  end
248
284
 
285
+ # @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026.
286
+ #
249
287
  # Create a remix of a completed video using a refreshed prompt.
250
288
  #
251
289
  # @overload remix(video_id, prompt:, request_options: {})
@@ -37,16 +37,26 @@ module OpenAI
37
37
  webhook_secret = @client.webhook_secret || ENV["OPENAI_WEBHOOK_SECRET"],
38
38
  tolerance = 300
39
39
  )
40
- if webhook_secret.nil?
40
+ if webhook_secret.nil? || webhook_secret.strip.empty?
41
41
  raise ArgumentError,
42
42
  "The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, " \
43
43
  "or passed to this function"
44
44
  end
45
45
 
46
- # Extract required headers
47
- signature_header = headers["webhook-signature"] || headers[:webhook_signature]
48
- timestamp_header = headers["webhook-timestamp"] || headers[:webhook_timestamp]
49
- webhook_id = headers["webhook-id"] || headers[:webhook_id]
46
+ header_names = %w[webhook-signature webhook-timestamp webhook-id]
47
+ normalized_headers = {}
48
+ headers.each do |name, value|
49
+ name = name.to_s.downcase.delete_prefix("http_").tr("_", "-")
50
+ next unless header_names.include?(name)
51
+
52
+ if normalized_headers.key?(name) && normalized_headers[name] != value
53
+ raise ArgumentError, "Conflicting values for #{name} header"
54
+ end
55
+
56
+ normalized_headers[name] = value
57
+ end
58
+
59
+ signature_header, timestamp_header, webhook_id = normalized_headers.values_at(*header_names)
50
60
 
51
61
  if signature_header.nil?
52
62
  raise ArgumentError, "Missing required webhook-signature header"
@@ -90,11 +100,13 @@ module OpenAI
90
100
 
91
101
  # Decode the secret if it starts with whsec_
92
102
  decoded_secret = if webhook_secret.start_with?("whsec_")
93
- Base64.decode64(webhook_secret[6..])
103
+ Base64.strict_decode64(webhook_secret[6..])
94
104
  else
95
105
  webhook_secret
96
106
  end
97
107
 
108
+ raise ArgumentError, "The webhook secret must not be empty" if decoded_secret.empty?
109
+
98
110
  # Create the signed payload: {webhook_id}.{timestamp}.{payload}
99
111
  signed_payload = "#{webhook_id}.#{timestamp_header}.#{payload}"
100
112
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.78.0"
4
+ VERSION = "0.80.0"
5
5
  end
data/lib/openai.rb CHANGED
@@ -18,9 +18,12 @@ require "time"
18
18
  require "uri"
19
19
  # We already ship the preferred sorbet manifests in the package itself.
20
20
  # `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
21
+ # Thor removes the selected subcommand from `ARGV` before loading an application,
22
+ # so the DSL loader is the reliable fallback for detecting `tapioca dsl`.
23
+ tapioca_dsl = ARGV.any?(/dsl/) || caller.any?(%r{tapioca[\\/]loaders[\\/]dsl})
21
24
  if Object.const_defined?(:Tapioca) &&
22
25
  caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
23
- ARGV.none?(/dsl/)
26
+ !tapioca_dsl
24
27
  return
25
28
  end
26
29
 
@@ -57,6 +60,7 @@ require_relative "openai/http_client"
57
60
  require_relative "openai/net_http_client"
58
61
  require_relative "openai/provider"
59
62
  require_relative "openai/internal/provider"
63
+ require_relative "openai/providers/azure"
60
64
  require_relative "openai/providers/bedrock"
61
65
  require_relative "openai/internal/transport/base_client"
62
66
  require_relative "openai/client"
@@ -78,6 +82,58 @@ require_relative "openai/structured_output"
78
82
  require_relative "openai/models/beta/beta_response_custom_tool_call"
79
83
  require_relative "openai/models/beta/beta_response_custom_tool_call_output"
80
84
  require_relative "openai/models/beta/beta_response_function_tool_call"
85
+ require_relative "openai/models/beta/beta_response_custom_tool_call_input_done_event"
86
+ require_relative "openai/models/beta/beta_response_custom_tool_call_input_delta_event"
87
+ require_relative "openai/models/beta/beta_response_queued_event"
88
+ require_relative "openai/models/beta/beta_response_output_text_annotation_added_event"
89
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_in_progress_event"
90
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_failed_event"
91
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_completed_event"
92
+ require_relative "openai/models/beta/beta_response_mcp_call_in_progress_event"
93
+ require_relative "openai/models/beta/beta_response_mcp_call_failed_event"
94
+ require_relative "openai/models/beta/beta_response_mcp_call_completed_event"
95
+ require_relative "openai/models/beta/beta_response_mcp_call_arguments_done_event"
96
+ require_relative "openai/models/beta/beta_response_mcp_call_arguments_delta_event"
97
+ require_relative "openai/models/beta/beta_response_image_gen_call_partial_image_event"
98
+ require_relative "openai/models/beta/beta_response_image_gen_call_in_progress_event"
99
+ require_relative "openai/models/beta/beta_response_image_gen_call_generating_event"
100
+ require_relative "openai/models/beta/beta_response_image_gen_call_completed_event"
101
+ require_relative "openai/models/beta/beta_response_web_search_call_searching_event"
102
+ require_relative "openai/models/beta/beta_response_web_search_call_in_progress_event"
103
+ require_relative "openai/models/beta/beta_response_web_search_call_completed_event"
104
+ require_relative "openai/models/beta/beta_response_text_done_event"
105
+ require_relative "openai/models/beta/beta_response_text_delta_event"
106
+ require_relative "openai/models/beta/beta_response_refusal_done_event"
107
+ require_relative "openai/models/beta/beta_response_refusal_delta_event"
108
+ require_relative "openai/models/beta/beta_response_reasoning_text_done_event"
109
+ require_relative "openai/models/beta/beta_response_reasoning_text_delta_event"
110
+ require_relative "openai/models/beta/beta_response_reasoning_summary_text_done_event"
111
+ require_relative "openai/models/beta/beta_response_reasoning_summary_text_delta_event"
112
+ require_relative "openai/models/beta/beta_response_reasoning_summary_part_done_event"
113
+ require_relative "openai/models/beta/beta_response_reasoning_summary_part_added_event"
114
+ require_relative "openai/models/beta/beta_response_output_item_done_event"
115
+ require_relative "openai/models/beta/beta_response_output_item_added_event"
116
+ require_relative "openai/models/beta/beta_response_incomplete_event"
117
+ require_relative "openai/models/beta/beta_response_failed_event"
118
+ require_relative "openai/models/beta/beta_response_in_progress_event"
119
+ require_relative "openai/models/beta/beta_response_function_call_arguments_done_event"
120
+ require_relative "openai/models/beta/beta_response_function_call_arguments_delta_event"
121
+ require_relative "openai/models/beta/beta_response_file_search_call_searching_event"
122
+ require_relative "openai/models/beta/beta_response_file_search_call_in_progress_event"
123
+ require_relative "openai/models/beta/beta_response_file_search_call_completed_event"
124
+ require_relative "openai/models/beta/beta_response_created_event"
125
+ require_relative "openai/models/beta/beta_response_content_part_done_event"
126
+ require_relative "openai/models/beta/beta_response_content_part_added_event"
127
+ require_relative "openai/models/beta/beta_response_completed_event"
128
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_interpreting_event"
129
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_in_progress_event"
130
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_completed_event"
131
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_code_done_event"
132
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_code_delta_event"
133
+ require_relative "openai/models/beta/beta_response_audio_transcript_done_event"
134
+ require_relative "openai/models/beta/beta_response_audio_transcript_delta_event"
135
+ require_relative "openai/models/beta/beta_response_audio_done_event"
136
+ require_relative "openai/models/beta/beta_response_audio_delta_event"
81
137
  require_relative "openai/models/reasoning_effort"
82
138
  require_relative "openai/models/chat/chat_completion_message"
83
139
  require_relative "openai/models/responses/response_input_file"
@@ -93,6 +149,58 @@ require_relative "openai/models/realtime/realtime_session_create_request"
93
149
  require_relative "openai/models/responses/response_custom_tool_call"
94
150
  require_relative "openai/models/responses/response_custom_tool_call_output"
95
151
  require_relative "openai/models/responses/response_function_tool_call"
152
+ require_relative "openai/models/responses/response_custom_tool_call_input_done_event"
153
+ require_relative "openai/models/responses/response_custom_tool_call_input_delta_event"
154
+ require_relative "openai/models/responses/response_queued_event"
155
+ require_relative "openai/models/responses/response_output_text_annotation_added_event"
156
+ require_relative "openai/models/responses/response_mcp_list_tools_in_progress_event"
157
+ require_relative "openai/models/responses/response_mcp_list_tools_failed_event"
158
+ require_relative "openai/models/responses/response_mcp_list_tools_completed_event"
159
+ require_relative "openai/models/responses/response_mcp_call_in_progress_event"
160
+ require_relative "openai/models/responses/response_mcp_call_failed_event"
161
+ require_relative "openai/models/responses/response_mcp_call_completed_event"
162
+ require_relative "openai/models/responses/response_mcp_call_arguments_done_event"
163
+ require_relative "openai/models/responses/response_mcp_call_arguments_delta_event"
164
+ require_relative "openai/models/responses/response_image_gen_call_partial_image_event"
165
+ require_relative "openai/models/responses/response_image_gen_call_in_progress_event"
166
+ require_relative "openai/models/responses/response_image_gen_call_generating_event"
167
+ require_relative "openai/models/responses/response_image_gen_call_completed_event"
168
+ require_relative "openai/models/responses/response_web_search_call_searching_event"
169
+ require_relative "openai/models/responses/response_web_search_call_in_progress_event"
170
+ require_relative "openai/models/responses/response_web_search_call_completed_event"
171
+ require_relative "openai/models/responses/response_text_done_event"
172
+ require_relative "openai/models/responses/response_text_delta_event"
173
+ require_relative "openai/models/responses/response_refusal_done_event"
174
+ require_relative "openai/models/responses/response_refusal_delta_event"
175
+ require_relative "openai/models/responses/response_reasoning_text_done_event"
176
+ require_relative "openai/models/responses/response_reasoning_text_delta_event"
177
+ require_relative "openai/models/responses/response_reasoning_summary_text_done_event"
178
+ require_relative "openai/models/responses/response_reasoning_summary_text_delta_event"
179
+ require_relative "openai/models/responses/response_reasoning_summary_part_done_event"
180
+ require_relative "openai/models/responses/response_reasoning_summary_part_added_event"
181
+ require_relative "openai/models/responses/response_output_item_done_event"
182
+ require_relative "openai/models/responses/response_output_item_added_event"
183
+ require_relative "openai/models/responses/response_incomplete_event"
184
+ require_relative "openai/models/responses/response_failed_event"
185
+ require_relative "openai/models/responses/response_in_progress_event"
186
+ require_relative "openai/models/responses/response_function_call_arguments_done_event"
187
+ require_relative "openai/models/responses/response_function_call_arguments_delta_event"
188
+ require_relative "openai/models/responses/response_file_search_call_searching_event"
189
+ require_relative "openai/models/responses/response_file_search_call_in_progress_event"
190
+ require_relative "openai/models/responses/response_file_search_call_completed_event"
191
+ require_relative "openai/models/responses/response_created_event"
192
+ require_relative "openai/models/responses/response_content_part_done_event"
193
+ require_relative "openai/models/responses/response_content_part_added_event"
194
+ require_relative "openai/models/responses/response_completed_event"
195
+ require_relative "openai/models/responses/response_code_interpreter_call_interpreting_event"
196
+ require_relative "openai/models/responses/response_code_interpreter_call_in_progress_event"
197
+ require_relative "openai/models/responses/response_code_interpreter_call_completed_event"
198
+ require_relative "openai/models/responses/response_code_interpreter_call_code_done_event"
199
+ require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event"
200
+ require_relative "openai/models/responses/response_audio_transcript_done_event"
201
+ require_relative "openai/models/responses/response_audio_transcript_delta_event"
202
+ require_relative "openai/models/responses/response_audio_done_event"
203
+ require_relative "openai/models/responses/response_audio_delta_event"
96
204
  require_relative "openai/models/admin/organization/admin_api_key_create_params"
97
205
  require_relative "openai/models/admin/organization/admin_api_key_create_response"
98
206
  require_relative "openai/models/admin/organization/admin_api_key_delete_params"
@@ -354,47 +462,27 @@ require_relative "openai/models/beta/beta_inline_skill"
354
462
  require_relative "openai/models/beta/beta_inline_skill_source"
355
463
  require_relative "openai/models/beta/beta_local_environment"
356
464
  require_relative "openai/models/beta/beta_local_skill"
465
+ require_relative "openai/models/beta/beta_mcp_tool_call_error"
357
466
  require_relative "openai/models/beta/beta_namespace_tool"
358
467
  require_relative "openai/models/beta/beta_response"
359
468
  require_relative "openai/models/beta/beta_response_apply_patch_tool_call"
360
469
  require_relative "openai/models/beta/beta_response_apply_patch_tool_call_output"
361
- require_relative "openai/models/beta/beta_response_audio_delta_event"
362
- require_relative "openai/models/beta/beta_response_audio_done_event"
363
- require_relative "openai/models/beta/beta_response_audio_transcript_delta_event"
364
- require_relative "openai/models/beta/beta_response_audio_transcript_done_event"
365
- require_relative "openai/models/beta/beta_response_code_interpreter_call_code_delta_event"
366
- require_relative "openai/models/beta/beta_response_code_interpreter_call_code_done_event"
367
- require_relative "openai/models/beta/beta_response_code_interpreter_call_completed_event"
368
- require_relative "openai/models/beta/beta_response_code_interpreter_call_in_progress_event"
369
- require_relative "openai/models/beta/beta_response_code_interpreter_call_interpreting_event"
370
470
  require_relative "openai/models/beta/beta_response_code_interpreter_tool_call"
371
471
  require_relative "openai/models/beta/beta_response_compaction_item"
372
472
  require_relative "openai/models/beta/beta_response_compaction_item_param"
373
- require_relative "openai/models/beta/beta_response_completed_event"
374
473
  require_relative "openai/models/beta/beta_response_computer_tool_call"
375
474
  require_relative "openai/models/beta/beta_response_computer_tool_call_output_item"
376
475
  require_relative "openai/models/beta/beta_response_computer_tool_call_output_screenshot"
377
476
  require_relative "openai/models/beta/beta_response_container_reference"
378
477
  require_relative "openai/models/beta/beta_response_content"
379
- require_relative "openai/models/beta/beta_response_content_part_added_event"
380
- require_relative "openai/models/beta/beta_response_content_part_done_event"
381
478
  require_relative "openai/models/beta/beta_response_conversation_param"
382
- require_relative "openai/models/beta/beta_response_created_event"
383
- require_relative "openai/models/beta/beta_response_custom_tool_call_input_delta_event"
384
- require_relative "openai/models/beta/beta_response_custom_tool_call_input_done_event"
385
479
  require_relative "openai/models/beta/beta_response_custom_tool_call_item"
386
480
  require_relative "openai/models/beta/beta_response_custom_tool_call_output_item"
387
481
  require_relative "openai/models/beta/beta_response_error"
388
482
  require_relative "openai/models/beta/beta_response_error_event"
389
- require_relative "openai/models/beta/beta_response_failed_event"
390
- require_relative "openai/models/beta/beta_response_file_search_call_completed_event"
391
- require_relative "openai/models/beta/beta_response_file_search_call_in_progress_event"
392
- require_relative "openai/models/beta/beta_response_file_search_call_searching_event"
393
483
  require_relative "openai/models/beta/beta_response_file_search_tool_call"
394
484
  require_relative "openai/models/beta/beta_response_format_text_config"
395
485
  require_relative "openai/models/beta/beta_response_format_text_json_schema_config"
396
- require_relative "openai/models/beta/beta_response_function_call_arguments_delta_event"
397
- require_relative "openai/models/beta/beta_response_function_call_arguments_done_event"
398
486
  require_relative "openai/models/beta/beta_response_function_call_output_item"
399
487
  require_relative "openai/models/beta/beta_response_function_call_output_item_list"
400
488
  require_relative "openai/models/beta/beta_response_function_shell_call_output_content"
@@ -403,16 +491,10 @@ require_relative "openai/models/beta/beta_response_function_shell_tool_call_outp
403
491
  require_relative "openai/models/beta/beta_response_function_tool_call_item"
404
492
  require_relative "openai/models/beta/beta_response_function_tool_call_output_item"
405
493
  require_relative "openai/models/beta/beta_response_function_web_search"
406
- require_relative "openai/models/beta/beta_response_image_gen_call_completed_event"
407
- require_relative "openai/models/beta/beta_response_image_gen_call_generating_event"
408
- require_relative "openai/models/beta/beta_response_image_gen_call_in_progress_event"
409
- require_relative "openai/models/beta/beta_response_image_gen_call_partial_image_event"
410
494
  require_relative "openai/models/beta/beta_response_includable"
411
- require_relative "openai/models/beta/beta_response_incomplete_event"
412
495
  require_relative "openai/models/beta/beta_response_inject_created_event"
413
496
  require_relative "openai/models/beta/beta_response_inject_event"
414
497
  require_relative "openai/models/beta/beta_response_inject_failed_event"
415
- require_relative "openai/models/beta/beta_response_in_progress_event"
416
498
  require_relative "openai/models/beta/beta_response_input"
417
499
  require_relative "openai/models/beta/beta_response_input_audio"
418
500
  require_relative "openai/models/beta/beta_response_input_content"
@@ -427,47 +509,22 @@ require_relative "openai/models/beta/beta_response_input_text"
427
509
  require_relative "openai/models/beta/beta_response_input_text_content"
428
510
  require_relative "openai/models/beta/beta_response_item"
429
511
  require_relative "openai/models/beta/beta_response_local_environment"
430
- require_relative "openai/models/beta/beta_response_mcp_call_arguments_delta_event"
431
- require_relative "openai/models/beta/beta_response_mcp_call_arguments_done_event"
432
- require_relative "openai/models/beta/beta_response_mcp_call_completed_event"
433
- require_relative "openai/models/beta/beta_response_mcp_call_failed_event"
434
- require_relative "openai/models/beta/beta_response_mcp_call_in_progress_event"
435
- require_relative "openai/models/beta/beta_response_mcp_list_tools_completed_event"
436
- require_relative "openai/models/beta/beta_response_mcp_list_tools_failed_event"
437
- require_relative "openai/models/beta/beta_response_mcp_list_tools_in_progress_event"
438
512
  require_relative "openai/models/beta/beta_response_output_audio"
439
513
  require_relative "openai/models/beta/beta_response_output_item"
440
- require_relative "openai/models/beta/beta_response_output_item_added_event"
441
- require_relative "openai/models/beta/beta_response_output_item_done_event"
442
514
  require_relative "openai/models/beta/beta_response_output_message"
443
515
  require_relative "openai/models/beta/beta_response_output_refusal"
444
516
  require_relative "openai/models/beta/beta_response_output_text"
445
- require_relative "openai/models/beta/beta_response_output_text_annotation_added_event"
446
517
  require_relative "openai/models/beta/beta_response_prompt"
447
- require_relative "openai/models/beta/beta_response_queued_event"
448
518
  require_relative "openai/models/beta/beta_response_reasoning_item"
449
- require_relative "openai/models/beta/beta_response_reasoning_summary_part_added_event"
450
- require_relative "openai/models/beta/beta_response_reasoning_summary_part_done_event"
451
- require_relative "openai/models/beta/beta_response_reasoning_summary_text_delta_event"
452
- require_relative "openai/models/beta/beta_response_reasoning_summary_text_done_event"
453
- require_relative "openai/models/beta/beta_response_reasoning_text_delta_event"
454
- require_relative "openai/models/beta/beta_response_reasoning_text_done_event"
455
- require_relative "openai/models/beta/beta_response_refusal_delta_event"
456
- require_relative "openai/models/beta/beta_response_refusal_done_event"
457
519
  require_relative "openai/models/beta/beta_responses_client_event"
458
520
  require_relative "openai/models/beta/beta_responses_server_event"
459
521
  require_relative "openai/models/beta/beta_response_status"
460
522
  require_relative "openai/models/beta/beta_response_stream_event"
461
523
  require_relative "openai/models/beta/beta_response_text_config"
462
- require_relative "openai/models/beta/beta_response_text_delta_event"
463
- require_relative "openai/models/beta/beta_response_text_done_event"
464
524
  require_relative "openai/models/beta/beta_response_tool_search_call"
465
525
  require_relative "openai/models/beta/beta_response_tool_search_output_item"
466
526
  require_relative "openai/models/beta/beta_response_tool_search_output_item_param"
467
527
  require_relative "openai/models/beta/beta_response_usage"
468
- require_relative "openai/models/beta/beta_response_web_search_call_completed_event"
469
- require_relative "openai/models/beta/beta_response_web_search_call_in_progress_event"
470
- require_relative "openai/models/beta/beta_response_web_search_call_searching_event"
471
528
  require_relative "openai/models/beta/beta_skill_reference"
472
529
  require_relative "openai/models/beta/beta_tool"
473
530
  require_relative "openai/models/beta/beta_tool_choice_allowed"
@@ -950,51 +1007,31 @@ require_relative "openai/models/responses/input_token_count_params"
950
1007
  require_relative "openai/models/responses/input_token_count_response"
951
1008
  require_relative "openai/models/responses/local_environment"
952
1009
  require_relative "openai/models/responses/local_skill"
1010
+ require_relative "openai/models/responses/mcp_tool_call_error"
953
1011
  require_relative "openai/models/responses/namespace_tool"
954
1012
  require_relative "openai/models/responses/response"
955
1013
  require_relative "openai/models/responses/response_apply_patch_tool_call"
956
1014
  require_relative "openai/models/responses/response_apply_patch_tool_call_output"
957
- require_relative "openai/models/responses/response_audio_delta_event"
958
- require_relative "openai/models/responses/response_audio_done_event"
959
- require_relative "openai/models/responses/response_audio_transcript_delta_event"
960
- require_relative "openai/models/responses/response_audio_transcript_done_event"
961
1015
  require_relative "openai/models/responses/response_cancel_params"
962
- require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event"
963
- require_relative "openai/models/responses/response_code_interpreter_call_code_done_event"
964
- require_relative "openai/models/responses/response_code_interpreter_call_completed_event"
965
- require_relative "openai/models/responses/response_code_interpreter_call_in_progress_event"
966
- require_relative "openai/models/responses/response_code_interpreter_call_interpreting_event"
967
1016
  require_relative "openai/models/responses/response_code_interpreter_tool_call"
968
1017
  require_relative "openai/models/responses/response_compaction_item"
969
1018
  require_relative "openai/models/responses/response_compaction_item_param"
970
1019
  require_relative "openai/models/responses/response_compact_params"
971
- require_relative "openai/models/responses/response_completed_event"
972
1020
  require_relative "openai/models/responses/response_computer_tool_call"
973
1021
  require_relative "openai/models/responses/response_computer_tool_call_output_item"
974
1022
  require_relative "openai/models/responses/response_computer_tool_call_output_screenshot"
975
1023
  require_relative "openai/models/responses/response_container_reference"
976
1024
  require_relative "openai/models/responses/response_content"
977
- require_relative "openai/models/responses/response_content_part_added_event"
978
- require_relative "openai/models/responses/response_content_part_done_event"
979
1025
  require_relative "openai/models/responses/response_conversation_param"
980
- require_relative "openai/models/responses/response_created_event"
981
1026
  require_relative "openai/models/responses/response_create_params"
982
- require_relative "openai/models/responses/response_custom_tool_call_input_delta_event"
983
- require_relative "openai/models/responses/response_custom_tool_call_input_done_event"
984
1027
  require_relative "openai/models/responses/response_custom_tool_call_item"
985
1028
  require_relative "openai/models/responses/response_custom_tool_call_output_item"
986
1029
  require_relative "openai/models/responses/response_delete_params"
987
1030
  require_relative "openai/models/responses/response_error"
988
1031
  require_relative "openai/models/responses/response_error_event"
989
- require_relative "openai/models/responses/response_failed_event"
990
- require_relative "openai/models/responses/response_file_search_call_completed_event"
991
- require_relative "openai/models/responses/response_file_search_call_in_progress_event"
992
- require_relative "openai/models/responses/response_file_search_call_searching_event"
993
1032
  require_relative "openai/models/responses/response_file_search_tool_call"
994
1033
  require_relative "openai/models/responses/response_format_text_config"
995
1034
  require_relative "openai/models/responses/response_format_text_json_schema_config"
996
- require_relative "openai/models/responses/response_function_call_arguments_delta_event"
997
- require_relative "openai/models/responses/response_function_call_arguments_done_event"
998
1035
  require_relative "openai/models/responses/response_function_call_output_item"
999
1036
  require_relative "openai/models/responses/response_function_call_output_item_list"
1000
1037
  require_relative "openai/models/responses/response_function_shell_call_output_content"
@@ -1003,13 +1040,7 @@ require_relative "openai/models/responses/response_function_shell_tool_call_outp
1003
1040
  require_relative "openai/models/responses/response_function_tool_call_item"
1004
1041
  require_relative "openai/models/responses/response_function_tool_call_output_item"
1005
1042
  require_relative "openai/models/responses/response_function_web_search"
1006
- require_relative "openai/models/responses/response_image_gen_call_completed_event"
1007
- require_relative "openai/models/responses/response_image_gen_call_generating_event"
1008
- require_relative "openai/models/responses/response_image_gen_call_in_progress_event"
1009
- require_relative "openai/models/responses/response_image_gen_call_partial_image_event"
1010
1043
  require_relative "openai/models/responses/response_includable"
1011
- require_relative "openai/models/responses/response_incomplete_event"
1012
- require_relative "openai/models/responses/response_in_progress_event"
1013
1044
  require_relative "openai/models/responses/response_input"
1014
1045
  require_relative "openai/models/responses/response_input_audio"
1015
1046
  require_relative "openai/models/responses/response_input_content"
@@ -1022,46 +1053,21 @@ require_relative "openai/models/responses/response_input_text_content"
1022
1053
  require_relative "openai/models/responses/response_item"
1023
1054
  require_relative "openai/models/responses/response_item_list"
1024
1055
  require_relative "openai/models/responses/response_local_environment"
1025
- require_relative "openai/models/responses/response_mcp_call_arguments_delta_event"
1026
- require_relative "openai/models/responses/response_mcp_call_arguments_done_event"
1027
- require_relative "openai/models/responses/response_mcp_call_completed_event"
1028
- require_relative "openai/models/responses/response_mcp_call_failed_event"
1029
- require_relative "openai/models/responses/response_mcp_call_in_progress_event"
1030
- require_relative "openai/models/responses/response_mcp_list_tools_completed_event"
1031
- require_relative "openai/models/responses/response_mcp_list_tools_failed_event"
1032
- require_relative "openai/models/responses/response_mcp_list_tools_in_progress_event"
1033
1056
  require_relative "openai/models/responses/response_output_audio"
1034
1057
  require_relative "openai/models/responses/response_output_item"
1035
- require_relative "openai/models/responses/response_output_item_added_event"
1036
- require_relative "openai/models/responses/response_output_item_done_event"
1037
1058
  require_relative "openai/models/responses/response_output_message"
1038
- require_relative "openai/models/responses/response_output_text_annotation_added_event"
1039
1059
  require_relative "openai/models/responses/response_prompt"
1040
- require_relative "openai/models/responses/response_queued_event"
1041
1060
  require_relative "openai/models/responses/response_reasoning_item"
1042
- require_relative "openai/models/responses/response_reasoning_summary_part_added_event"
1043
- require_relative "openai/models/responses/response_reasoning_summary_part_done_event"
1044
- require_relative "openai/models/responses/response_reasoning_summary_text_delta_event"
1045
- require_relative "openai/models/responses/response_reasoning_summary_text_done_event"
1046
- require_relative "openai/models/responses/response_reasoning_text_delta_event"
1047
- require_relative "openai/models/responses/response_reasoning_text_done_event"
1048
- require_relative "openai/models/responses/response_refusal_delta_event"
1049
- require_relative "openai/models/responses/response_refusal_done_event"
1050
1061
  require_relative "openai/models/responses/response_retrieve_params"
1051
1062
  require_relative "openai/models/responses/responses_client_event"
1052
1063
  require_relative "openai/models/responses/responses_server_event"
1053
1064
  require_relative "openai/models/responses/response_status"
1054
1065
  require_relative "openai/models/responses/response_stream_event"
1055
1066
  require_relative "openai/models/responses/response_text_config"
1056
- require_relative "openai/models/responses/response_text_delta_event"
1057
- require_relative "openai/models/responses/response_text_done_event"
1058
1067
  require_relative "openai/models/responses/response_tool_search_call"
1059
1068
  require_relative "openai/models/responses/response_tool_search_output_item"
1060
1069
  require_relative "openai/models/responses/response_tool_search_output_item_param"
1061
1070
  require_relative "openai/models/responses/response_usage"
1062
- require_relative "openai/models/responses/response_web_search_call_completed_event"
1063
- require_relative "openai/models/responses/response_web_search_call_in_progress_event"
1064
- require_relative "openai/models/responses/response_web_search_call_searching_event"
1065
1071
  require_relative "openai/models/responses/skill_reference"
1066
1072
  require_relative "openai/models/responses/tool"
1067
1073
  require_relative "openai/models/responses/tool_choice_allowed"
data/rbi/openai/auth.rbi CHANGED
@@ -35,17 +35,17 @@ module OpenAI
35
35
 
36
36
  sig do
37
37
  params(
38
- identity_provider_id: T.any(String, Symbol),
39
- service_account_id: T.any(String, Symbol),
40
38
  provider: SubjectTokenProvider,
39
+ identity_provider_id: T.nilable(T.any(String, Symbol)),
40
+ service_account_id: T.nilable(T.any(String, Symbol)),
41
41
  client_id: T.nilable(T.any(String, Symbol)),
42
42
  refresh_buffer_seconds: Integer
43
43
  ).void
44
44
  end
45
45
  def initialize(
46
- identity_provider_id:,
47
- service_account_id:,
48
46
  provider:,
47
+ identity_provider_id: ENV["IDENTITY_PROVIDER_ID"],
48
+ service_account_id: ENV["SERVICE_ACCOUNT_ID"],
49
49
  client_id: nil,
50
50
  refresh_buffer_seconds: 1200
51
51
  )
@@ -159,11 +159,15 @@ module OpenAI
159
159
  webhook_secret: T.nilable(String),
160
160
  provider: T.nilable(OpenAI::Provider),
161
161
  base_url: T.nilable(String),
162
+ default_headers: T.nilable(T::Hash[String, T.nilable(String)]),
162
163
  max_retries: Integer,
163
- timeout: Float,
164
+ timeout: T.nilable(Float),
164
165
  initial_retry_delay: Float,
165
166
  max_retry_delay: Float,
166
- http_client: T.untyped
167
+ http_client: T.untyped,
168
+ logger: T.untyped,
169
+ log_level: T.nilable(T.any(Symbol, String)),
170
+ on_retry: T.nilable(T.proc.params(event: OpenAI::RetryEvent).void)
167
171
  ).returns(T.attached_class)
168
172
  end
169
173
  def self.new(
@@ -182,12 +186,18 @@ module OpenAI
182
186
  # Override the default base URL for the API, e.g.,
183
187
  # `"https://api.example.com/v2/"`. Defaults to `ENV["OPENAI_BASE_URL"]`
184
188
  base_url: ENV["OPENAI_BASE_URL"],
189
+ # Extra headers to send with every request. Explicit values override
190
+ # `ENV["OPENAI_CUSTOM_HEADERS"]`.
191
+ default_headers: nil,
185
192
  # Max number of retries to attempt after a failed retryable request.
186
193
  max_retries: OpenAI::Client::DEFAULT_MAX_RETRIES,
187
194
  timeout: OpenAI::Client::DEFAULT_TIMEOUT_IN_SECONDS,
188
195
  initial_retry_delay: OpenAI::Client::DEFAULT_INITIAL_RETRY_DELAY,
189
196
  max_retry_delay: OpenAI::Client::DEFAULT_MAX_RETRY_DELAY,
190
- http_client: nil
197
+ http_client: nil,
198
+ logger: nil,
199
+ log_level: nil,
200
+ on_retry: nil
191
201
  )
192
202
  end
193
203
  end
@@ -48,6 +48,13 @@ module OpenAI
48
48
  sig { returns(T.nilable(String)) }
49
49
  attr_accessor :type
50
50
 
51
+ # The ID of the API request, returned via the `x-request-id` response
52
+ # header. This is nil when no HTTP response was received or the response
53
+ # did not include the header.
54
+ sig { returns(T.nilable(String)) }
55
+ def request_id
56
+ end
57
+
51
58
  # @api private
52
59
  sig do
53
60
  params(
@@ -142,6 +142,18 @@ module OpenAI
142
142
  end
143
143
 
144
144
  class ChatCompletionStream
145
+ sig { returns(Integer) }
146
+ def status
147
+ end
148
+
149
+ sig { returns(T::Hash[String, String]) }
150
+ def headers
151
+ end
152
+
153
+ sig { returns(OpenAI::ResponseMetadata) }
154
+ def last_response
155
+ end
156
+
145
157
  sig { returns(T.untyped) }
146
158
  def each
147
159
  end