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
@@ -15,8 +15,14 @@ module OpenAI
15
15
  )
16
16
  end
17
17
 
18
- # The annotation object being added. (See annotation schema for details.)
19
- sig { returns(T.anything) }
18
+ # An annotation that applies to a span of output text.
19
+ sig do
20
+ returns(
21
+ T.nilable(
22
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::Variants
23
+ )
24
+ )
25
+ end
20
26
  attr_accessor :annotation
21
27
 
22
28
  # The index of the annotation within the content part.
@@ -66,7 +72,15 @@ module OpenAI
66
72
  # Emitted when an annotation is added to output text content.
67
73
  sig do
68
74
  params(
69
- annotation: T.anything,
75
+ annotation:
76
+ T.nilable(
77
+ T.any(
78
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FileCitation::OrHash,
79
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::URLCitation::OrHash,
80
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::ContainerFileCitation::OrHash,
81
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FilePath::OrHash
82
+ )
83
+ ),
70
84
  annotation_index: Integer,
71
85
  content_index: Integer,
72
86
  item_id: String,
@@ -80,7 +94,7 @@ module OpenAI
80
94
  ).returns(T.attached_class)
81
95
  end
82
96
  def self.new(
83
- # The annotation object being added. (See annotation schema for details.)
97
+ # An annotation that applies to a span of output text.
84
98
  annotation:,
85
99
  # The index of the annotation within the content part.
86
100
  annotation_index:,
@@ -102,7 +116,10 @@ module OpenAI
102
116
  sig do
103
117
  override.returns(
104
118
  {
105
- annotation: T.anything,
119
+ annotation:
120
+ T.nilable(
121
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::Variants
122
+ ),
106
123
  annotation_index: Integer,
107
124
  content_index: Integer,
108
125
  item_id: String,
@@ -119,6 +136,281 @@ module OpenAI
119
136
  def to_hash
120
137
  end
121
138
 
139
+ # An annotation that applies to a span of output text.
140
+ module Annotation
141
+ extend OpenAI::Internal::Type::Union
142
+
143
+ Variants =
144
+ T.type_alias do
145
+ T.any(
146
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FileCitation,
147
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::URLCitation,
148
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::ContainerFileCitation,
149
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FilePath
150
+ )
151
+ end
152
+
153
+ class FileCitation < OpenAI::Internal::Type::BaseModel
154
+ OrHash =
155
+ T.type_alias do
156
+ T.any(
157
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FileCitation,
158
+ OpenAI::Internal::AnyHash
159
+ )
160
+ end
161
+
162
+ # The ID of the file.
163
+ sig { returns(String) }
164
+ attr_accessor :file_id
165
+
166
+ # The filename of the file cited.
167
+ sig { returns(String) }
168
+ attr_accessor :filename
169
+
170
+ # The index of the file in the list of files.
171
+ sig { returns(Integer) }
172
+ attr_accessor :index
173
+
174
+ # The type of the file citation. Always `file_citation`.
175
+ sig { returns(Symbol) }
176
+ attr_accessor :type
177
+
178
+ # A citation to a file.
179
+ sig do
180
+ params(
181
+ file_id: String,
182
+ filename: String,
183
+ index: Integer,
184
+ type: Symbol
185
+ ).returns(T.attached_class)
186
+ end
187
+ def self.new(
188
+ # The ID of the file.
189
+ file_id:,
190
+ # The filename of the file cited.
191
+ filename:,
192
+ # The index of the file in the list of files.
193
+ index:,
194
+ # The type of the file citation. Always `file_citation`.
195
+ type: :file_citation
196
+ )
197
+ end
198
+
199
+ sig do
200
+ override.returns(
201
+ {
202
+ file_id: String,
203
+ filename: String,
204
+ index: Integer,
205
+ type: Symbol
206
+ }
207
+ )
208
+ end
209
+ def to_hash
210
+ end
211
+ end
212
+
213
+ class URLCitation < OpenAI::Internal::Type::BaseModel
214
+ OrHash =
215
+ T.type_alias do
216
+ T.any(
217
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::URLCitation,
218
+ OpenAI::Internal::AnyHash
219
+ )
220
+ end
221
+
222
+ # The index of the last character of the URL citation in the message.
223
+ sig { returns(Integer) }
224
+ attr_accessor :end_index
225
+
226
+ # The index of the first character of the URL citation in the message.
227
+ sig { returns(Integer) }
228
+ attr_accessor :start_index
229
+
230
+ # The title of the web resource.
231
+ sig { returns(String) }
232
+ attr_accessor :title
233
+
234
+ # The type of the URL citation. Always `url_citation`.
235
+ sig { returns(Symbol) }
236
+ attr_accessor :type
237
+
238
+ # The URL of the web resource.
239
+ sig { returns(String) }
240
+ attr_accessor :url
241
+
242
+ # A citation for a web resource used to generate a model response.
243
+ sig do
244
+ params(
245
+ end_index: Integer,
246
+ start_index: Integer,
247
+ title: String,
248
+ url: String,
249
+ type: Symbol
250
+ ).returns(T.attached_class)
251
+ end
252
+ def self.new(
253
+ # The index of the last character of the URL citation in the message.
254
+ end_index:,
255
+ # The index of the first character of the URL citation in the message.
256
+ start_index:,
257
+ # The title of the web resource.
258
+ title:,
259
+ # The URL of the web resource.
260
+ url:,
261
+ # The type of the URL citation. Always `url_citation`.
262
+ type: :url_citation
263
+ )
264
+ end
265
+
266
+ sig do
267
+ override.returns(
268
+ {
269
+ end_index: Integer,
270
+ start_index: Integer,
271
+ title: String,
272
+ type: Symbol,
273
+ url: String
274
+ }
275
+ )
276
+ end
277
+ def to_hash
278
+ end
279
+ end
280
+
281
+ class ContainerFileCitation < OpenAI::Internal::Type::BaseModel
282
+ OrHash =
283
+ T.type_alias do
284
+ T.any(
285
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::ContainerFileCitation,
286
+ OpenAI::Internal::AnyHash
287
+ )
288
+ end
289
+
290
+ # The ID of the container file.
291
+ sig { returns(String) }
292
+ attr_accessor :container_id
293
+
294
+ # The index of the last character of the container file citation in the message.
295
+ sig { returns(Integer) }
296
+ attr_accessor :end_index
297
+
298
+ # The ID of the file.
299
+ sig { returns(String) }
300
+ attr_accessor :file_id
301
+
302
+ # The filename of the container file cited.
303
+ sig { returns(String) }
304
+ attr_accessor :filename
305
+
306
+ # The index of the first character of the container file citation in the message.
307
+ sig { returns(Integer) }
308
+ attr_accessor :start_index
309
+
310
+ # The type of the container file citation. Always `container_file_citation`.
311
+ sig { returns(Symbol) }
312
+ attr_accessor :type
313
+
314
+ # A citation for a container file used to generate a model response.
315
+ sig do
316
+ params(
317
+ container_id: String,
318
+ end_index: Integer,
319
+ file_id: String,
320
+ filename: String,
321
+ start_index: Integer,
322
+ type: Symbol
323
+ ).returns(T.attached_class)
324
+ end
325
+ def self.new(
326
+ # The ID of the container file.
327
+ container_id:,
328
+ # The index of the last character of the container file citation in the message.
329
+ end_index:,
330
+ # The ID of the file.
331
+ file_id:,
332
+ # The filename of the container file cited.
333
+ filename:,
334
+ # The index of the first character of the container file citation in the message.
335
+ start_index:,
336
+ # The type of the container file citation. Always `container_file_citation`.
337
+ type: :container_file_citation
338
+ )
339
+ end
340
+
341
+ sig do
342
+ override.returns(
343
+ {
344
+ container_id: String,
345
+ end_index: Integer,
346
+ file_id: String,
347
+ filename: String,
348
+ start_index: Integer,
349
+ type: Symbol
350
+ }
351
+ )
352
+ end
353
+ def to_hash
354
+ end
355
+ end
356
+
357
+ class FilePath < OpenAI::Internal::Type::BaseModel
358
+ OrHash =
359
+ T.type_alias do
360
+ T.any(
361
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::FilePath,
362
+ OpenAI::Internal::AnyHash
363
+ )
364
+ end
365
+
366
+ # The ID of the file.
367
+ sig { returns(String) }
368
+ attr_accessor :file_id
369
+
370
+ # The index of the file in the list of files.
371
+ sig { returns(Integer) }
372
+ attr_accessor :index
373
+
374
+ # The type of the file path. Always `file_path`.
375
+ sig { returns(Symbol) }
376
+ attr_accessor :type
377
+
378
+ # A path to a file.
379
+ sig do
380
+ params(file_id: String, index: Integer, type: Symbol).returns(
381
+ T.attached_class
382
+ )
383
+ end
384
+ def self.new(
385
+ # The ID of the file.
386
+ file_id:,
387
+ # The index of the file in the list of files.
388
+ index:,
389
+ # The type of the file path. Always `file_path`.
390
+ type: :file_path
391
+ )
392
+ end
393
+
394
+ sig do
395
+ override.returns(
396
+ { file_id: String, index: Integer, type: Symbol }
397
+ )
398
+ end
399
+ def to_hash
400
+ end
401
+ end
402
+
403
+ sig do
404
+ override.returns(
405
+ T::Array[
406
+ OpenAI::Beta::BetaResponseOutputTextAnnotationAddedEvent::Annotation::Variants
407
+ ]
408
+ )
409
+ end
410
+ def self.variants
411
+ end
412
+ end
413
+
122
414
  class Agent < OpenAI::Internal::Type::BaseModel
123
415
  OrHash =
124
416
  T.type_alias do
@@ -63,6 +63,11 @@ module OpenAI
63
63
  # The encrypted content of the reasoning item. This is populated by default for
64
64
  # reasoning items returned by `POST /v1/responses` and WebSocket `response.create`
65
65
  # requests.
66
+ #
67
+ # When streaming, use the completed reasoning item and its `encrypted_content`
68
+ # from the `response.output_item.done` event in subsequent requests. The
69
+ # `encrypted_content` in `response.output_item.added` may be incomplete. This is
70
+ # especially important when `store` is `false` or when using Zero Data Retention.
66
71
  sig { returns(T.nilable(String)) }
67
72
  attr_accessor :encrypted_content
68
73
 
@@ -116,6 +121,11 @@ module OpenAI
116
121
  # The encrypted content of the reasoning item. This is populated by default for
117
122
  # reasoning items returned by `POST /v1/responses` and WebSocket `response.create`
118
123
  # requests.
124
+ #
125
+ # When streaming, use the completed reasoning item and its `encrypted_content`
126
+ # from the `response.output_item.done` event in subsequent requests. The
127
+ # `encrypted_content` in `response.output_item.added` may be incomplete. This is
128
+ # especially important when `store` is `false` or when using Zero Data Retention.
119
129
  encrypted_content: nil,
120
130
  # The status of the item. One of `in_progress`, `completed`, or `incomplete`.
121
131
  # Populated when items are returned via API.
@@ -5,7 +5,7 @@ module OpenAI
5
5
  BetaResponseStreamEvent = Beta::BetaResponseStreamEvent
6
6
 
7
7
  module Beta
8
- # Emitted when there is a partial audio response.
8
+ # Event emitted while a response is streamed.
9
9
  module BetaResponseStreamEvent
10
10
  extend OpenAI::Internal::Type::Union
11
11
 
@@ -338,6 +338,10 @@ module OpenAI
338
338
  # Responses or Chat Completions. The response will show `service_tier=priority`
339
339
  # regardless of if you specify `service_tier=fast` or `priority` in your
340
340
  # request.
341
+ # - If set to 'ultrafast', then the request will be processed with the
342
+ # access-controlled Ultrafast Processing service tier. This tier is currently
343
+ # available for `gpt-5.6-sol`; a response served through it will show
344
+ # `service_tier=ultrafast`.
341
345
  # - When not set, the default behavior is 'auto'.
342
346
  #
343
347
  # When the `service_tier` parameter is set, the response body will include the
@@ -366,6 +370,17 @@ module OpenAI
366
370
  sig { returns(T.nilable(T::Boolean)) }
367
371
  attr_accessor :stream
368
372
 
373
+ # The WebSocket lane for this response. Requests with the same `stream_id` are
374
+ # processed FIFO, and events for the response echo the same `stream_id`.
375
+ #
376
+ # `stream_id` controls routing; `previous_response_id` controls conversation
377
+ # lineage, so a new lane can fork from a response created on another lane.
378
+ sig { returns(T.nilable(String)) }
379
+ attr_reader :stream_id
380
+
381
+ sig { params(stream_id: String).void }
382
+ attr_writer :stream_id
383
+
369
384
  # Options for streaming responses. Only set this when you set `stream: true`.
370
385
  sig do
371
386
  returns(
@@ -562,12 +577,14 @@ module OpenAI
562
577
  attr_writer :user
563
578
 
564
579
  # Client event for creating a response over a persistent WebSocket connection.
565
- # This payload uses the same top-level fields as `POST /v1/responses`.
580
+ # This payload uses the same top-level fields as `POST /v1/responses`, plus
581
+ # WebSocket-only envelope metadata.
566
582
  #
567
583
  # Notes:
568
584
  #
569
585
  # - `stream` is implicit over WebSocket and should not be sent.
570
586
  # - `background` is not supported over WebSocket.
587
+ # - `stream_id` is WebSocket-only and is not part of `POST /v1/responses`.
571
588
  sig do
572
589
  params(
573
590
  background: T.nilable(T::Boolean),
@@ -628,6 +645,7 @@ module OpenAI
628
645
  ),
629
646
  store: T.nilable(T::Boolean),
630
647
  stream: T.nilable(T::Boolean),
648
+ stream_id: String,
631
649
  stream_options:
632
650
  T.nilable(
633
651
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::StreamOptions::OrHash
@@ -817,6 +835,10 @@ module OpenAI
817
835
  # Responses or Chat Completions. The response will show `service_tier=priority`
818
836
  # regardless of if you specify `service_tier=fast` or `priority` in your
819
837
  # request.
838
+ # - If set to 'ultrafast', then the request will be processed with the
839
+ # access-controlled Ultrafast Processing service tier. This tier is currently
840
+ # available for `gpt-5.6-sol`; a response served through it will show
841
+ # `service_tier=ultrafast`.
820
842
  # - When not set, the default behavior is 'auto'.
821
843
  #
822
844
  # When the `service_tier` parameter is set, the response body will include the
@@ -833,6 +855,12 @@ module OpenAI
833
855
  # [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)
834
856
  # for more information.
835
857
  stream: nil,
858
+ # The WebSocket lane for this response. Requests with the same `stream_id` are
859
+ # processed FIFO, and events for the response echo the same `stream_id`.
860
+ #
861
+ # `stream_id` controls routing; `previous_response_id` controls conversation
862
+ # lineage, so a new lane can fork from a response created on another lane.
863
+ stream_id: nil,
836
864
  # Options for streaming responses. Only set this when you set `stream: true`.
837
865
  stream_options: nil,
838
866
  # What sampling temperature to use, between 0 and 2. Higher values like 0.8 will
@@ -958,6 +986,7 @@ module OpenAI
958
986
  ),
959
987
  store: T.nilable(T::Boolean),
960
988
  stream: T.nilable(T::Boolean),
989
+ stream_id: String,
961
990
  stream_options:
962
991
  T.nilable(
963
992
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::StreamOptions
@@ -1159,6 +1188,11 @@ module OpenAI
1159
1188
  :"gpt-5.5",
1160
1189
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1161
1190
  )
1191
+ GPT_5_5_2026_04_23 =
1192
+ T.let(
1193
+ :"gpt-5.5-2026-04-23",
1194
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1195
+ )
1162
1196
  GPT_5_4 =
1163
1197
  T.let(
1164
1198
  :"gpt-5.4",
@@ -1599,6 +1633,16 @@ module OpenAI
1599
1633
  :"computer-use-preview-2025-03-11",
1600
1634
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1601
1635
  )
1636
+ GPT_5_5_PRO =
1637
+ T.let(
1638
+ :"gpt-5.5-pro",
1639
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1640
+ )
1641
+ GPT_5_5_PRO_2026_04_23 =
1642
+ T.let(
1643
+ :"gpt-5.5-pro-2026-04-23",
1644
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1645
+ )
1602
1646
  GPT_5_CODEX =
1603
1647
  T.let(
1604
1648
  :"gpt-5-codex",
@@ -1619,6 +1663,21 @@ module OpenAI
1619
1663
  :"gpt-5.1-codex-max",
1620
1664
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1621
1665
  )
1666
+ GPT_DAYBREAK_BLUE_LATEST =
1667
+ T.let(
1668
+ :"gpt-daybreak-blue-latest",
1669
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1670
+ )
1671
+ GPT_DAYBREAK_RED_LATEST =
1672
+ T.let(
1673
+ :"gpt-daybreak-red-latest",
1674
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1675
+ )
1676
+ GPT_5_6_CYBER =
1677
+ T.let(
1678
+ :"gpt-5.6-cyber",
1679
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::Model::TaggedSymbol
1680
+ )
1622
1681
  end
1623
1682
 
1624
1683
  class Moderation < OpenAI::Internal::Type::BaseModel
@@ -2643,6 +2702,10 @@ module OpenAI
2643
2702
  # Responses or Chat Completions. The response will show `service_tier=priority`
2644
2703
  # regardless of if you specify `service_tier=fast` or `priority` in your
2645
2704
  # request.
2705
+ # - If set to 'ultrafast', then the request will be processed with the
2706
+ # access-controlled Ultrafast Processing service tier. This tier is currently
2707
+ # available for `gpt-5.6-sol`; a response served through it will show
2708
+ # `service_tier=ultrafast`.
2646
2709
  # - When not set, the default behavior is 'auto'.
2647
2710
  #
2648
2711
  # When the `service_tier` parameter is set, the response body will include the
@@ -2691,6 +2754,11 @@ module OpenAI
2691
2754
  :fast,
2692
2755
  OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::ServiceTier::TaggedSymbol
2693
2756
  )
2757
+ ULTRAFAST =
2758
+ T.let(
2759
+ :ultrafast,
2760
+ OpenAI::Beta::BetaResponsesClientEvent::ResponseCreate::ServiceTier::TaggedSymbol
2761
+ )
2694
2762
 
2695
2763
  sig do
2696
2764
  override.returns(