openai 0.99.0 → 0.101.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 (195) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +1 -1
  4. data/bedrock.md +17 -1
  5. data/lib/openai/client.rb +13 -0
  6. data/lib/openai/helpers/agents/session_stream.rb +11 -36
  7. data/lib/openai/helpers/agents/tools.rb +34 -4
  8. data/lib/openai/helpers/beta/agents/creation_stream.rb +26 -0
  9. data/lib/openai/helpers/beta/agents/function_tool.rb +11 -4
  10. data/lib/openai/helpers/beta/agents/tool_dispatcher.rb +74 -0
  11. data/lib/openai/helpers/beta/agents/tool_error.rb +28 -0
  12. data/lib/openai/models/admin/organization/usage_audio_speeches_response.rb +125 -3
  13. data/lib/openai/models/admin/organization/usage_audio_transcriptions_response.rb +125 -3
  14. data/lib/openai/models/admin/organization/usage_code_interpreter_sessions_response.rb +125 -3
  15. data/lib/openai/models/admin/organization/usage_completions_params.rb +9 -4
  16. data/lib/openai/models/admin/organization/usage_completions_response.rb +125 -3
  17. data/lib/openai/models/admin/organization/usage_costs_params.rb +16 -4
  18. data/lib/openai/models/admin/organization/usage_costs_response.rb +125 -3
  19. data/lib/openai/models/admin/organization/usage_embeddings_response.rb +125 -3
  20. data/lib/openai/models/admin/organization/usage_file_search_calls_response.rb +125 -3
  21. data/lib/openai/models/admin/organization/usage_images_response.rb +125 -3
  22. data/lib/openai/models/admin/organization/usage_moderations_response.rb +125 -3
  23. data/lib/openai/models/admin/organization/usage_vector_stores_response.rb +125 -3
  24. data/lib/openai/models/admin/organization/usage_web_search_calls_params.rb +9 -4
  25. data/lib/openai/models/admin/organization/usage_web_search_calls_response.rb +125 -3
  26. data/lib/openai/models/beta/agents/environments/template_create_params.rb +6 -6
  27. data/lib/openai/models/beta/agents/environments/template_update_params.rb +3 -6
  28. data/lib/openai/models/beta/agents/sessions/turns/item_list_params.rb +79 -0
  29. data/lib/openai/models/beta/beta_response_computer_tool_call_output_item.rb +2 -2
  30. data/lib/openai/models/beta/beta_response_error.rb +12 -1
  31. data/lib/openai/models/beta/beta_response_tool_search_output_item_param.rb +1166 -3
  32. data/lib/openai/models/beta/beta_responses_server_event.rb +12 -1
  33. data/lib/openai/models/beta/beta_tool.rb +12 -9
  34. data/lib/openai/models/beta/beta_tool_search_output_namespace_tool.rb +176 -0
  35. data/lib/openai/models/beta/environment_param.rb +6 -6
  36. data/lib/openai/models/beta/session_turn_error.rb +9 -0
  37. data/lib/openai/models/chat/chat_completion_chunk.rb +85 -18
  38. data/lib/openai/models/decision.rb +313 -0
  39. data/lib/openai/models/decision_create_params.rb +233 -0
  40. data/lib/openai/models/decision_input_image.rb +53 -0
  41. data/lib/openai/models/decision_input_message.rb +60 -0
  42. data/lib/openai/models/decision_input_part.rb +20 -0
  43. data/lib/openai/models/decision_input_text.rb +21 -0
  44. data/lib/openai/models/error_object.rb +12 -1
  45. data/lib/openai/models/eval_create_params.rb +1 -1
  46. data/lib/openai/models/eval_create_response.rb +1 -1
  47. data/lib/openai/models/eval_list_response.rb +1 -1
  48. data/lib/openai/models/eval_retrieve_response.rb +1 -1
  49. data/lib/openai/models/eval_update_response.rb +1 -1
  50. data/lib/openai/models/fine_tuning/job_list_params.rb +14 -4
  51. data/lib/openai/models/graders/score_model_grader.rb +2 -2
  52. data/lib/openai/models/image_edit_params.rb +12 -9
  53. data/lib/openai/models/realtime/realtime_client_event.rb +9 -0
  54. data/lib/openai/models/realtime/session_update_event.rb +16 -0
  55. data/lib/openai/models/responses/response_computer_tool_call_output_item.rb +2 -2
  56. data/lib/openai/models/responses/response_error.rb +12 -1
  57. data/lib/openai/models/responses/response_tool_search_output_item_param.rb +1166 -3
  58. data/lib/openai/models/responses/responses_server_event.rb +12 -1
  59. data/lib/openai/models/responses/tool.rb +12 -9
  60. data/lib/openai/models/responses/tool_search_output_namespace_tool.rb +174 -0
  61. data/lib/openai/models/video_create_error.rb +12 -1
  62. data/lib/openai/models.rb +12 -0
  63. data/lib/openai/providers/bedrock.rb +20 -1
  64. data/lib/openai/resources/admin/organization/usage.rb +15 -6
  65. data/lib/openai/resources/beta/agents/environments/templates.rb +3 -4
  66. data/lib/openai/resources/beta/agents/sessions/turns/items.rb +68 -0
  67. data/lib/openai/resources/beta/agents/sessions/turns.rb +4 -0
  68. data/lib/openai/resources/beta/agents/sessions.rb +22 -2
  69. data/lib/openai/resources/decisions.rb +59 -0
  70. data/lib/openai/resources/fine_tuning/jobs.rb +7 -2
  71. data/lib/openai/resources/images.rb +8 -6
  72. data/lib/openai/version.rb +1 -1
  73. data/lib/openai.rb +11 -0
  74. data/rbi/openai/client.rbi +3 -0
  75. data/rbi/openai/helpers/agents.rbi +2 -0
  76. data/rbi/openai/helpers/beta/agents/function_tool.rbi +8 -3
  77. data/rbi/openai/helpers/beta/agents/tool_error.rbi +19 -0
  78. data/rbi/openai/helpers/beta/agents.rbi +12 -0
  79. data/rbi/openai/models/admin/organization/usage_audio_speeches_response.rbi +194 -1
  80. data/rbi/openai/models/admin/organization/usage_audio_transcriptions_response.rbi +194 -1
  81. data/rbi/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbi +194 -1
  82. data/rbi/openai/models/admin/organization/usage_completions_params.rbi +9 -4
  83. data/rbi/openai/models/admin/organization/usage_completions_response.rbi +194 -1
  84. data/rbi/openai/models/admin/organization/usage_costs_params.rbi +16 -4
  85. data/rbi/openai/models/admin/organization/usage_costs_response.rbi +194 -1
  86. data/rbi/openai/models/admin/organization/usage_embeddings_response.rbi +194 -1
  87. data/rbi/openai/models/admin/organization/usage_file_search_calls_response.rbi +194 -1
  88. data/rbi/openai/models/admin/organization/usage_images_response.rbi +194 -1
  89. data/rbi/openai/models/admin/organization/usage_moderations_response.rbi +194 -1
  90. data/rbi/openai/models/admin/organization/usage_vector_stores_response.rbi +194 -1
  91. data/rbi/openai/models/admin/organization/usage_web_search_calls_params.rbi +12 -4
  92. data/rbi/openai/models/admin/organization/usage_web_search_calls_response.rbi +194 -1
  93. data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +6 -6
  94. data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +3 -6
  95. data/rbi/openai/models/beta/agents/sessions/turns/item_list_params.rbi +139 -0
  96. data/rbi/openai/models/beta/beta_response_computer_tool_call_output_item.rbi +2 -2
  97. data/rbi/openai/models/beta/beta_response_error.rbi +12 -0
  98. data/rbi/openai/models/beta/beta_response_tool_search_output_item_param.rbi +1893 -18
  99. data/rbi/openai/models/beta/beta_responses_server_event.rbi +12 -0
  100. data/rbi/openai/models/beta/beta_tool.rbi +12 -9
  101. data/rbi/openai/models/beta/beta_tool_search_output_namespace_tool.rbi +272 -0
  102. data/rbi/openai/models/beta/environment_param.rbi +6 -6
  103. data/rbi/openai/models/beta/session_turn_error.rbi +18 -0
  104. data/rbi/openai/models/chat/chat_completion_chunk.rbi +123 -17
  105. data/rbi/openai/models/decision.rbi +586 -0
  106. data/rbi/openai/models/decision_create_params.rbi +435 -0
  107. data/rbi/openai/models/decision_input_image.rbi +81 -0
  108. data/rbi/openai/models/decision_input_message.rbi +96 -0
  109. data/rbi/openai/models/decision_input_part.rbi +24 -0
  110. data/rbi/openai/models/decision_input_text.rbi +49 -0
  111. data/rbi/openai/models/error_object.rbi +12 -0
  112. data/rbi/openai/models/eval_create_params.rbi +1 -1
  113. data/rbi/openai/models/eval_create_response.rbi +1 -1
  114. data/rbi/openai/models/eval_list_response.rbi +1 -1
  115. data/rbi/openai/models/eval_retrieve_response.rbi +1 -1
  116. data/rbi/openai/models/eval_update_response.rbi +1 -1
  117. data/rbi/openai/models/fine_tuning/job_list_params.rbi +14 -4
  118. data/rbi/openai/models/graders/score_model_grader.rbi +2 -2
  119. data/rbi/openai/models/image_edit_params.rbi +12 -9
  120. data/rbi/openai/models/realtime/session_update_event.rbi +16 -0
  121. data/rbi/openai/models/responses/response_computer_tool_call_output_item.rbi +2 -2
  122. data/rbi/openai/models/responses/response_error.rbi +12 -0
  123. data/rbi/openai/models/responses/response_tool_search_output_item_param.rbi +1901 -18
  124. data/rbi/openai/models/responses/responses_server_event.rbi +12 -0
  125. data/rbi/openai/models/responses/tool.rbi +12 -9
  126. data/rbi/openai/models/responses/tool_search_output_namespace_tool.rbi +272 -0
  127. data/rbi/openai/models/video_create_error.rbi +12 -0
  128. data/rbi/openai/models.rbi +12 -0
  129. data/rbi/openai/resources/admin/organization/usage.rbi +15 -6
  130. data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -4
  131. data/rbi/openai/resources/beta/agents/sessions/turns/items.rbi +62 -0
  132. data/rbi/openai/resources/beta/agents/sessions/turns.rbi +3 -0
  133. data/rbi/openai/resources/beta/agents/sessions.rbi +2 -0
  134. data/rbi/openai/resources/decisions.rbi +57 -0
  135. data/rbi/openai/resources/fine_tuning/jobs.rbi +7 -2
  136. data/rbi/openai/resources/images.rbi +8 -6
  137. data/sig/openai/client.rbs +2 -0
  138. data/sig/openai/helpers/agents.rbs +3 -0
  139. data/sig/openai/helpers/beta/agents/function_tool.rbs +5 -2
  140. data/sig/openai/helpers/beta/agents/tool_error.rbs +17 -0
  141. data/sig/openai/helpers/beta/agents.rbs +5 -0
  142. data/sig/openai/models/admin/organization/usage_audio_speeches_response.rbs +87 -2
  143. data/sig/openai/models/admin/organization/usage_audio_transcriptions_response.rbs +87 -2
  144. data/sig/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbs +87 -2
  145. data/sig/openai/models/admin/organization/usage_completions_params.rbs +14 -6
  146. data/sig/openai/models/admin/organization/usage_completions_response.rbs +87 -2
  147. data/sig/openai/models/admin/organization/usage_costs_params.rbs +25 -7
  148. data/sig/openai/models/admin/organization/usage_costs_response.rbs +87 -2
  149. data/sig/openai/models/admin/organization/usage_embeddings_response.rbs +87 -2
  150. data/sig/openai/models/admin/organization/usage_file_search_calls_response.rbs +87 -2
  151. data/sig/openai/models/admin/organization/usage_images_response.rbs +87 -2
  152. data/sig/openai/models/admin/organization/usage_moderations_response.rbs +87 -2
  153. data/sig/openai/models/admin/organization/usage_vector_stores_response.rbs +87 -2
  154. data/sig/openai/models/admin/organization/usage_web_search_calls_params.rbs +19 -7
  155. data/sig/openai/models/admin/organization/usage_web_search_calls_response.rbs +87 -2
  156. data/sig/openai/models/beta/agents/environments/template_create_params.rbs +4 -4
  157. data/sig/openai/models/beta/agents/environments/template_update_params.rbs +2 -4
  158. data/sig/openai/models/beta/agents/sessions/turns/item_list_params.rbs +91 -0
  159. data/sig/openai/models/beta/beta_response_computer_tool_call_output_item.rbs +2 -2
  160. data/sig/openai/models/beta/beta_response_error.rbs +10 -0
  161. data/sig/openai/models/beta/beta_response_tool_search_output_item_param.rbs +993 -4
  162. data/sig/openai/models/beta/beta_responses_server_event.rbs +10 -0
  163. data/sig/openai/models/beta/beta_tool.rbs +8 -6
  164. data/sig/openai/models/beta/beta_tool_search_output_namespace_tool.rbs +162 -0
  165. data/sig/openai/models/beta/environment_param.rbs +4 -4
  166. data/sig/openai/models/beta/session_turn_error.rbs +12 -0
  167. data/sig/openai/models/chat/chat_completion_chunk.rbs +96 -12
  168. data/sig/openai/models/decision.rbs +296 -0
  169. data/sig/openai/models/decision_create_params.rbs +227 -0
  170. data/sig/openai/models/decision_input_image.rbs +51 -0
  171. data/sig/openai/models/decision_input_message.rbs +57 -0
  172. data/sig/openai/models/decision_input_part.rbs +12 -0
  173. data/sig/openai/models/decision_input_text.rbs +15 -0
  174. data/sig/openai/models/error_object.rbs +10 -0
  175. data/sig/openai/models/eval_create_params.rbs +1 -1
  176. data/sig/openai/models/eval_create_response.rbs +1 -1
  177. data/sig/openai/models/eval_list_response.rbs +1 -1
  178. data/sig/openai/models/eval_retrieve_response.rbs +1 -1
  179. data/sig/openai/models/eval_update_response.rbs +1 -1
  180. data/sig/openai/models/fine_tuning/job_list_params.rbs +14 -4
  181. data/sig/openai/models/graders/score_model_grader.rbs +3 -3
  182. data/sig/openai/models/image_edit_params.rbs +8 -6
  183. data/sig/openai/models/responses/response_computer_tool_call_output_item.rbs +2 -2
  184. data/sig/openai/models/responses/response_error.rbs +10 -0
  185. data/sig/openai/models/responses/response_tool_search_output_item_param.rbs +993 -4
  186. data/sig/openai/models/responses/responses_server_event.rbs +10 -0
  187. data/sig/openai/models/responses/tool.rbs +8 -6
  188. data/sig/openai/models/responses/tool_search_output_namespace_tool.rbs +160 -0
  189. data/sig/openai/models/video_create_error.rbs +10 -0
  190. data/sig/openai/models.rbs +12 -0
  191. data/sig/openai/resources/beta/agents/sessions/turns/items.rbs +24 -0
  192. data/sig/openai/resources/beta/agents/sessions/turns.rbs +2 -0
  193. data/sig/openai/resources/beta/agents/sessions.rbs +1 -0
  194. data/sig/openai/resources/decisions.rbs +15 -0
  195. metadata +38 -1
@@ -23,14 +23,14 @@ module OpenAI
23
23
  OpenAI::Responses::FileSearchTool,
24
24
  OpenAI::Responses::ComputerTool,
25
25
  OpenAI::Responses::ComputerUsePreviewTool,
26
- OpenAI::Responses::Tool::Mcp,
27
- OpenAI::Responses::Tool::CodeInterpreter,
28
- OpenAI::Responses::Tool::ProgrammaticToolCalling,
29
- OpenAI::Responses::Tool::ImageGeneration,
30
- OpenAI::Responses::Tool::LocalShell,
26
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp,
27
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter,
28
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ProgrammaticToolCalling,
29
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration,
30
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::LocalShell,
31
31
  OpenAI::Responses::FunctionShellTool,
32
32
  OpenAI::Responses::CustomTool,
33
- OpenAI::Responses::NamespaceTool,
33
+ OpenAI::Responses::ToolSearchOutputNamespaceTool,
34
34
  OpenAI::Responses::ToolSearchTool,
35
35
  OpenAI::Responses::ApplyPatchTool,
36
36
  OpenAI::Responses::WebSearchTool,
@@ -73,14 +73,14 @@ module OpenAI
73
73
  OpenAI::Responses::FileSearchTool::OrHash,
74
74
  OpenAI::Responses::ComputerTool::OrHash,
75
75
  OpenAI::Responses::ComputerUsePreviewTool::OrHash,
76
- OpenAI::Responses::Tool::Mcp::OrHash,
77
- OpenAI::Responses::Tool::CodeInterpreter::OrHash,
78
- OpenAI::Responses::Tool::ProgrammaticToolCalling::OrHash,
79
- OpenAI::Responses::Tool::ImageGeneration::OrHash,
80
- OpenAI::Responses::Tool::LocalShell::OrHash,
76
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::OrHash,
77
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::OrHash,
78
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ProgrammaticToolCalling::OrHash,
79
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OrHash,
80
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::LocalShell::OrHash,
81
81
  OpenAI::Responses::FunctionShellTool::OrHash,
82
82
  OpenAI::Responses::CustomTool::OrHash,
83
- OpenAI::Responses::NamespaceTool::OrHash,
83
+ OpenAI::Responses::ToolSearchOutputNamespaceTool::OrHash,
84
84
  OpenAI::Responses::ToolSearchTool::OrHash,
85
85
  OpenAI::Responses::ApplyPatchTool::OrHash,
86
86
  OpenAI::Responses::WebSearchTool::OrHash,
@@ -132,14 +132,14 @@ module OpenAI
132
132
  OpenAI::Responses::FileSearchTool,
133
133
  OpenAI::Responses::ComputerTool,
134
134
  OpenAI::Responses::ComputerUsePreviewTool,
135
- OpenAI::Responses::Tool::Mcp,
136
- OpenAI::Responses::Tool::CodeInterpreter,
137
- OpenAI::Responses::Tool::ProgrammaticToolCalling,
138
- OpenAI::Responses::Tool::ImageGeneration,
139
- OpenAI::Responses::Tool::LocalShell,
135
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp,
136
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter,
137
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ProgrammaticToolCalling,
138
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration,
139
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::LocalShell,
140
140
  OpenAI::Responses::FunctionShellTool,
141
141
  OpenAI::Responses::CustomTool,
142
- OpenAI::Responses::NamespaceTool,
142
+ OpenAI::Responses::ToolSearchOutputNamespaceTool,
143
143
  OpenAI::Responses::ToolSearchTool,
144
144
  OpenAI::Responses::ApplyPatchTool,
145
145
  OpenAI::Responses::WebSearchTool,
@@ -157,6 +157,1889 @@ module OpenAI
157
157
  def to_hash
158
158
  end
159
159
 
160
+ # A tool definition returned by a tool search output.
161
+ module Tool
162
+ extend OpenAI::Internal::Type::Union
163
+
164
+ Variants = T.type_alias {
165
+ T.any(
166
+ OpenAI::Responses::FunctionTool,
167
+ OpenAI::Responses::FileSearchTool,
168
+ OpenAI::Responses::ComputerTool,
169
+ OpenAI::Responses::ComputerUsePreviewTool,
170
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp,
171
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter,
172
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ProgrammaticToolCalling,
173
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration,
174
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::LocalShell,
175
+ OpenAI::Responses::FunctionShellTool,
176
+ OpenAI::Responses::CustomTool,
177
+ OpenAI::Responses::ToolSearchOutputNamespaceTool,
178
+ OpenAI::Responses::ToolSearchTool,
179
+ OpenAI::Responses::ApplyPatchTool,
180
+ OpenAI::Responses::WebSearchTool,
181
+ OpenAI::Responses::WebSearchPreviewTool
182
+ )
183
+ }
184
+
185
+ class Mcp < OpenAI::Internal::Type::BaseModel
186
+ OrHash = T.type_alias do
187
+ T.any(
188
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp,
189
+ OpenAI::Internal::AnyHash
190
+ )
191
+ end
192
+
193
+ # A label for this MCP server, used to identify it in tool calls.
194
+ sig { returns(String) }
195
+ attr_accessor :server_label
196
+
197
+ # The type of the MCP tool. Always `mcp`.
198
+ sig { returns(Symbol) }
199
+ attr_accessor :type
200
+
201
+ # The tool invocation context(s).
202
+ sig {
203
+ returns(
204
+ T.nilable(
205
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::OrSymbol]
206
+ )
207
+ )
208
+ }
209
+ attr_accessor :allowed_callers
210
+
211
+ # List of allowed tool names or a filter object.
212
+ sig {
213
+ returns(
214
+ T.nilable(
215
+ T.any(
216
+ T::Array[String],
217
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::McpToolFilter
218
+ )
219
+ )
220
+ )
221
+ }
222
+ attr_accessor :allowed_tools
223
+
224
+ # An OAuth access token that can be used with a remote MCP server, either with a
225
+ # custom MCP server URL or a service connector. Your application must handle the
226
+ # OAuth authorization flow and provide the token here.
227
+ sig { returns(T.nilable(String)) }
228
+ attr_reader :authorization
229
+
230
+ sig { params(authorization: String).void }
231
+ attr_writer :authorization
232
+
233
+ # Identifier for service connectors, like those available in ChatGPT. One of
234
+ # `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about
235
+ # service connectors
236
+ # [here](https://developers.openai.com/api/docs/guides/tools-connectors-mcp#connectors).
237
+ #
238
+ # This field is deprecated for models released after September 1, 2026. Use
239
+ # `server_url` to connect to a remote MCP server, or `tunnel_id` to connect
240
+ # through a Secure MCP Tunnel.
241
+ #
242
+ # Currently supported `connector_id` values are:
243
+ #
244
+ # - Dropbox: `connector_dropbox`
245
+ # - Gmail: `connector_gmail`
246
+ # - Google Calendar: `connector_googlecalendar`
247
+ # - Google Drive: `connector_googledrive`
248
+ # - Microsoft Teams: `connector_microsoftteams`
249
+ # - Outlook Calendar: `connector_outlookcalendar`
250
+ # - Outlook Email: `connector_outlookemail`
251
+ # - SharePoint: `connector_sharepoint`
252
+ sig {
253
+ returns(T.nilable(OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::OrSymbol))
254
+ }
255
+ attr_reader :connector_id
256
+
257
+ sig {
258
+ params(
259
+ connector_id: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::OrSymbol
260
+ )
261
+ .void
262
+ }
263
+ attr_writer :connector_id
264
+
265
+ # Whether this MCP tool is deferred and discovered via tool search.
266
+ sig { returns(T.nilable(T::Boolean)) }
267
+ attr_reader :defer_loading
268
+
269
+ sig { params(defer_loading: T::Boolean).void }
270
+ attr_writer :defer_loading
271
+
272
+ # Optional HTTP headers to send to the MCP server. Use for authentication or other
273
+ # purposes.
274
+ sig { returns(T.nilable(T::Hash[Symbol, String])) }
275
+ attr_accessor :headers
276
+
277
+ # Specify which of the MCP server's tools require approval.
278
+ sig {
279
+ returns(
280
+ T.nilable(
281
+ T.any(
282
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter,
283
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::OrSymbol
284
+ )
285
+ )
286
+ )
287
+ }
288
+ attr_accessor :require_approval
289
+
290
+ # Optional description of the MCP server, used to provide more context.
291
+ sig { returns(T.nilable(String)) }
292
+ attr_reader :server_description
293
+
294
+ sig { params(server_description: String).void }
295
+ attr_writer :server_description
296
+
297
+ # The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id`
298
+ # must be provided.
299
+ sig { returns(T.nilable(String)) }
300
+ attr_reader :server_url
301
+
302
+ sig { params(server_url: String).void }
303
+ attr_writer :server_url
304
+
305
+ # The Secure MCP Tunnel ID to use instead of a direct server URL. One of
306
+ # `server_url`, `connector_id`, or `tunnel_id` must be provided.
307
+ sig { returns(T.nilable(String)) }
308
+ attr_reader :tunnel_id
309
+
310
+ sig { params(tunnel_id: String).void }
311
+ attr_writer :tunnel_id
312
+
313
+ # Give the model access to additional tools via remote Model Context Protocol
314
+ # (MCP) servers.
315
+ # [Learn more about MCP](https://developers.openai.com/api/docs/guides/tools-connectors-mcp).
316
+ sig do
317
+ params(
318
+
319
+ server_label: String,
320
+
321
+ allowed_callers: T.nilable(
322
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::OrSymbol]
323
+ ),
324
+
325
+ allowed_tools: T.nilable(
326
+ T.any(
327
+ T::Array[String],
328
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::McpToolFilter::OrHash
329
+ )
330
+ ),
331
+
332
+ authorization: String,
333
+
334
+ connector_id: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::OrSymbol,
335
+
336
+ defer_loading: T::Boolean,
337
+
338
+ headers: T.nilable(T::Hash[Symbol, String]),
339
+
340
+ require_approval: T.nilable(
341
+ T.any(
342
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::OrHash,
343
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::OrSymbol
344
+ )
345
+ ),
346
+
347
+ server_description: String,
348
+
349
+ server_url: String,
350
+
351
+ tunnel_id: String,
352
+
353
+ type: Symbol
354
+ )
355
+ .returns(T.attached_class)
356
+ end
357
+ def self.new(
358
+
359
+ # A label for this MCP server, used to identify it in tool calls.
360
+ server_label:,
361
+
362
+ # The tool invocation context(s).
363
+ allowed_callers: nil,
364
+
365
+ # List of allowed tool names or a filter object.
366
+ allowed_tools: nil,
367
+
368
+ # An OAuth access token that can be used with a remote MCP server, either with a
369
+ # custom MCP server URL or a service connector. Your application must handle the
370
+ # OAuth authorization flow and provide the token here.
371
+ authorization: nil,
372
+
373
+ # Identifier for service connectors, like those available in ChatGPT. One of
374
+ # `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about
375
+ # service connectors
376
+ # [here](https://developers.openai.com/api/docs/guides/tools-connectors-mcp#connectors).
377
+ #
378
+ # This field is deprecated for models released after September 1, 2026. Use
379
+ # `server_url` to connect to a remote MCP server, or `tunnel_id` to connect
380
+ # through a Secure MCP Tunnel.
381
+ #
382
+ # Currently supported `connector_id` values are:
383
+ #
384
+ # - Dropbox: `connector_dropbox`
385
+ # - Gmail: `connector_gmail`
386
+ # - Google Calendar: `connector_googlecalendar`
387
+ # - Google Drive: `connector_googledrive`
388
+ # - Microsoft Teams: `connector_microsoftteams`
389
+ # - Outlook Calendar: `connector_outlookcalendar`
390
+ # - Outlook Email: `connector_outlookemail`
391
+ # - SharePoint: `connector_sharepoint`
392
+ connector_id: nil,
393
+
394
+ # Whether this MCP tool is deferred and discovered via tool search.
395
+ defer_loading: nil,
396
+
397
+ # Optional HTTP headers to send to the MCP server. Use for authentication or other
398
+ # purposes.
399
+ headers: nil,
400
+
401
+ # Specify which of the MCP server's tools require approval.
402
+ require_approval: nil,
403
+
404
+ # Optional description of the MCP server, used to provide more context.
405
+ server_description: nil,
406
+
407
+ # The URL for the MCP server. One of `server_url`, `connector_id`, or `tunnel_id`
408
+ # must be provided.
409
+ server_url: nil,
410
+
411
+ # The Secure MCP Tunnel ID to use instead of a direct server URL. One of
412
+ # `server_url`, `connector_id`, or `tunnel_id` must be provided.
413
+ tunnel_id: nil,
414
+
415
+ # The type of the MCP tool. Always `mcp`.
416
+
417
+ type: :mcp
418
+ )
419
+ end
420
+
421
+ sig do
422
+ override.returns(
423
+ {
424
+ server_label: String,
425
+ type: Symbol,
426
+ allowed_callers: T.nilable(
427
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::OrSymbol]
428
+ ),
429
+ allowed_tools: T.nilable(
430
+ T.any(
431
+ T::Array[String],
432
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::McpToolFilter
433
+ )
434
+ ),
435
+ authorization: String,
436
+ connector_id: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::OrSymbol,
437
+ defer_loading: T::Boolean,
438
+ headers: T.nilable(T::Hash[Symbol, String]),
439
+ require_approval: T.nilable(
440
+ T.any(
441
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter,
442
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::OrSymbol
443
+ )
444
+ ),
445
+ server_description: String,
446
+ server_url: String,
447
+ tunnel_id: String
448
+ }
449
+ )
450
+ end
451
+ def to_hash
452
+ end
453
+
454
+ module AllowedCaller
455
+ extend OpenAI::Internal::Type::Enum
456
+
457
+ TaggedSymbol = T.type_alias {
458
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller)
459
+ }
460
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
461
+
462
+ DIRECT = T.let(
463
+ :direct,
464
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::TaggedSymbol
465
+ )
466
+ PROGRAMMATIC = T.let(
467
+ :programmatic,
468
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::TaggedSymbol
469
+ )
470
+
471
+ sig {
472
+ override.returns(
473
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedCaller::TaggedSymbol]
474
+ )
475
+ }
476
+ def self.values
477
+ end
478
+ end
479
+
480
+ # List of allowed tool names or a filter object.
481
+ module AllowedTools
482
+ extend OpenAI::Internal::Type::Union
483
+
484
+ Variants = T.type_alias {
485
+ T.any(
486
+ T::Array[String],
487
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::McpToolFilter
488
+ )
489
+ }
490
+
491
+ class McpToolFilter < OpenAI::Internal::Type::BaseModel
492
+ OrHash = T.type_alias do
493
+ T.any(
494
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::McpToolFilter,
495
+ OpenAI::Internal::AnyHash
496
+ )
497
+ end
498
+
499
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
500
+ # is
501
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
502
+ # it will match this filter.
503
+ sig { returns(T.nilable(T::Boolean)) }
504
+ attr_reader :read_only
505
+
506
+ sig { params(read_only: T::Boolean).void }
507
+ attr_writer :read_only
508
+
509
+ # List of allowed tool names.
510
+ sig { returns(T.nilable(T::Array[String])) }
511
+ attr_reader :tool_names
512
+
513
+ sig { params(tool_names: T::Array[String]).void }
514
+ attr_writer :tool_names
515
+
516
+ # A filter object to specify which tools are allowed.
517
+ sig do
518
+ params(
519
+
520
+ read_only: T::Boolean,
521
+
522
+ tool_names: T::Array[String]
523
+ )
524
+ .returns(T.attached_class)
525
+ end
526
+ def self.new(
527
+
528
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
529
+ # is
530
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
531
+ # it will match this filter.
532
+ read_only: nil,
533
+
534
+ # List of allowed tool names.
535
+
536
+ tool_names: nil
537
+ )
538
+ end
539
+
540
+ sig do
541
+ override.returns(
542
+ {read_only: T::Boolean, tool_names: T::Array[String]}
543
+ )
544
+ end
545
+ def to_hash
546
+ end
547
+
548
+ end
549
+
550
+ sig {
551
+ override.returns(
552
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::AllowedTools::Variants]
553
+ )
554
+ }
555
+ def self.variants
556
+ end
557
+
558
+ StringArray = T.let(
559
+ OpenAI::Internal::Type::ArrayOf[String],
560
+ OpenAI::Internal::Type::Converter
561
+ )
562
+
563
+ end
564
+
565
+ # Identifier for service connectors, like those available in ChatGPT. One of
566
+ # `server_url`, `connector_id`, or `tunnel_id` must be provided. Learn more about
567
+ # service connectors
568
+ # [here](https://developers.openai.com/api/docs/guides/tools-connectors-mcp#connectors).
569
+ #
570
+ # This field is deprecated for models released after September 1, 2026. Use
571
+ # `server_url` to connect to a remote MCP server, or `tunnel_id` to connect
572
+ # through a Secure MCP Tunnel.
573
+ #
574
+ # Currently supported `connector_id` values are:
575
+ #
576
+ # - Dropbox: `connector_dropbox`
577
+ # - Gmail: `connector_gmail`
578
+ # - Google Calendar: `connector_googlecalendar`
579
+ # - Google Drive: `connector_googledrive`
580
+ # - Microsoft Teams: `connector_microsoftteams`
581
+ # - Outlook Calendar: `connector_outlookcalendar`
582
+ # - Outlook Email: `connector_outlookemail`
583
+ # - SharePoint: `connector_sharepoint`
584
+ module ConnectorID
585
+ extend OpenAI::Internal::Type::Enum
586
+
587
+ TaggedSymbol = T.type_alias {
588
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID)
589
+ }
590
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
591
+
592
+ CONNECTOR_DROPBOX = T.let(
593
+ :connector_dropbox,
594
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
595
+ )
596
+ CONNECTOR_GMAIL = T.let(
597
+ :connector_gmail,
598
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
599
+ )
600
+ CONNECTOR_GOOGLECALENDAR = T.let(
601
+ :connector_googlecalendar,
602
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
603
+ )
604
+ CONNECTOR_GOOGLEDRIVE = T.let(
605
+ :connector_googledrive,
606
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
607
+ )
608
+ CONNECTOR_MICROSOFTTEAMS = T.let(
609
+ :connector_microsoftteams,
610
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
611
+ )
612
+ CONNECTOR_OUTLOOKCALENDAR = T.let(
613
+ :connector_outlookcalendar,
614
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
615
+ )
616
+ CONNECTOR_OUTLOOKEMAIL = T.let(
617
+ :connector_outlookemail,
618
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
619
+ )
620
+ CONNECTOR_SHAREPOINT = T.let(
621
+ :connector_sharepoint,
622
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol
623
+ )
624
+
625
+ sig {
626
+ override.returns(
627
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::ConnectorID::TaggedSymbol]
628
+ )
629
+ }
630
+ def self.values
631
+ end
632
+ end
633
+
634
+ # Specify which of the MCP server's tools require approval.
635
+ module RequireApproval
636
+ extend OpenAI::Internal::Type::Union
637
+
638
+ Variants = T.type_alias {
639
+ T.any(
640
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter,
641
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::TaggedSymbol
642
+ )
643
+ }
644
+
645
+ class McpToolApprovalFilter < OpenAI::Internal::Type::BaseModel
646
+ OrHash = T.type_alias do
647
+ T.any(
648
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter,
649
+ OpenAI::Internal::AnyHash
650
+ )
651
+ end
652
+
653
+ # A filter object to specify which tools are allowed.
654
+ sig {
655
+ returns(
656
+ T.nilable(
657
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Always
658
+ )
659
+ )
660
+ }
661
+ attr_reader :always
662
+
663
+ sig {
664
+ params(
665
+ always: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Always::OrHash
666
+ )
667
+ .void
668
+ }
669
+ attr_writer :always
670
+
671
+ # A filter object to specify which tools are allowed.
672
+ sig {
673
+ returns(
674
+ T.nilable(
675
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Never
676
+ )
677
+ )
678
+ }
679
+ attr_reader :never
680
+
681
+ sig {
682
+ params(
683
+ never: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Never::OrHash
684
+ )
685
+ .void
686
+ }
687
+ attr_writer :never
688
+
689
+ # Specify which of the MCP server's tools require approval. Can be `always`,
690
+ # `never`, or a filter object associated with tools that require approval.
691
+ sig do
692
+ params(
693
+
694
+ always: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Always::OrHash,
695
+
696
+ never: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Never::OrHash
697
+ )
698
+ .returns(T.attached_class)
699
+ end
700
+ def self.new(
701
+
702
+ # A filter object to specify which tools are allowed.
703
+ always: nil,
704
+
705
+ # A filter object to specify which tools are allowed.
706
+
707
+ never: nil
708
+ )
709
+ end
710
+
711
+ sig do
712
+ override.returns(
713
+ {
714
+ always: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Always,
715
+ never: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Never
716
+ }
717
+ )
718
+ end
719
+ def to_hash
720
+ end
721
+
722
+ class Always < OpenAI::Internal::Type::BaseModel
723
+ OrHash = T.type_alias do
724
+ T.any(
725
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Always,
726
+ OpenAI::Internal::AnyHash
727
+ )
728
+ end
729
+
730
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
731
+ # is
732
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
733
+ # it will match this filter.
734
+ sig { returns(T.nilable(T::Boolean)) }
735
+ attr_reader :read_only
736
+
737
+ sig { params(read_only: T::Boolean).void }
738
+ attr_writer :read_only
739
+
740
+ # List of allowed tool names.
741
+ sig { returns(T.nilable(T::Array[String])) }
742
+ attr_reader :tool_names
743
+
744
+ sig { params(tool_names: T::Array[String]).void }
745
+ attr_writer :tool_names
746
+
747
+ # A filter object to specify which tools are allowed.
748
+ sig do
749
+ params(
750
+
751
+ read_only: T::Boolean,
752
+
753
+ tool_names: T::Array[String]
754
+ )
755
+ .returns(T.attached_class)
756
+ end
757
+ def self.new(
758
+
759
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
760
+ # is
761
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
762
+ # it will match this filter.
763
+ read_only: nil,
764
+
765
+ # List of allowed tool names.
766
+
767
+ tool_names: nil
768
+ )
769
+ end
770
+
771
+ sig do
772
+ override.returns(
773
+ {read_only: T::Boolean, tool_names: T::Array[String]}
774
+ )
775
+ end
776
+ def to_hash
777
+ end
778
+
779
+ end
780
+
781
+ class Never < OpenAI::Internal::Type::BaseModel
782
+ OrHash = T.type_alias do
783
+ T.any(
784
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalFilter::Never,
785
+ OpenAI::Internal::AnyHash
786
+ )
787
+ end
788
+
789
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
790
+ # is
791
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
792
+ # it will match this filter.
793
+ sig { returns(T.nilable(T::Boolean)) }
794
+ attr_reader :read_only
795
+
796
+ sig { params(read_only: T::Boolean).void }
797
+ attr_writer :read_only
798
+
799
+ # List of allowed tool names.
800
+ sig { returns(T.nilable(T::Array[String])) }
801
+ attr_reader :tool_names
802
+
803
+ sig { params(tool_names: T::Array[String]).void }
804
+ attr_writer :tool_names
805
+
806
+ # A filter object to specify which tools are allowed.
807
+ sig do
808
+ params(
809
+
810
+ read_only: T::Boolean,
811
+
812
+ tool_names: T::Array[String]
813
+ )
814
+ .returns(T.attached_class)
815
+ end
816
+ def self.new(
817
+
818
+ # Indicates whether or not a tool modifies data or is read-only. If an MCP server
819
+ # is
820
+ # [annotated with `readOnlyHint`](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),
821
+ # it will match this filter.
822
+ read_only: nil,
823
+
824
+ # List of allowed tool names.
825
+
826
+ tool_names: nil
827
+ )
828
+ end
829
+
830
+ sig do
831
+ override.returns(
832
+ {read_only: T::Boolean, tool_names: T::Array[String]}
833
+ )
834
+ end
835
+ def to_hash
836
+ end
837
+
838
+ end
839
+ end
840
+
841
+ # Specify a single approval policy for all tools. One of `always` or `never`. When
842
+ # set to `always`, all tools will require approval. When set to `never`, all tools
843
+ # will not require approval.
844
+ module McpToolApprovalSetting
845
+ extend OpenAI::Internal::Type::Enum
846
+
847
+ TaggedSymbol = T.type_alias {
848
+ T.all(
849
+ Symbol,
850
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting
851
+ )
852
+ }
853
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
854
+
855
+ ALWAYS = T.let(
856
+ :always,
857
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::TaggedSymbol
858
+ )
859
+ NEVER = T.let(
860
+ :never,
861
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::TaggedSymbol
862
+ )
863
+
864
+ sig {
865
+ override.returns(
866
+ T::Array[
867
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::McpToolApprovalSetting::TaggedSymbol
868
+ ]
869
+ )
870
+ }
871
+ def self.values
872
+ end
873
+ end
874
+
875
+ sig {
876
+ override.returns(
877
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Mcp::RequireApproval::Variants]
878
+ )
879
+ }
880
+ def self.variants
881
+ end
882
+
883
+ end
884
+ end
885
+
886
+ class CodeInterpreter < OpenAI::Internal::Type::BaseModel
887
+ OrHash = T.type_alias do
888
+ T.any(
889
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter,
890
+ OpenAI::Internal::AnyHash
891
+ )
892
+ end
893
+
894
+ # The code interpreter container. Can be a container ID or an object that
895
+ # specifies uploaded file IDs to make available to your code, along with an
896
+ # optional `memory_limit` setting.
897
+ sig {
898
+ returns(
899
+ T.any(
900
+ String,
901
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto
902
+ )
903
+ )
904
+ }
905
+ attr_accessor :container
906
+
907
+ # The type of the code interpreter tool. Always `code_interpreter`.
908
+ sig { returns(Symbol) }
909
+ attr_accessor :type
910
+
911
+ # The tool invocation context(s).
912
+ sig {
913
+ returns(
914
+ T.nilable(
915
+ T::Array[
916
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::OrSymbol
917
+ ]
918
+ )
919
+ )
920
+ }
921
+ attr_accessor :allowed_callers
922
+
923
+ # A tool that runs Python code to help generate a response to a prompt.
924
+ sig do
925
+ params(
926
+
927
+ container: T.any(
928
+ String,
929
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::OrHash
930
+ ),
931
+
932
+ allowed_callers: T.nilable(
933
+ T::Array[
934
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::OrSymbol
935
+ ]
936
+ ),
937
+
938
+ type: Symbol
939
+ )
940
+ .returns(T.attached_class)
941
+ end
942
+ def self.new(
943
+
944
+ # The code interpreter container. Can be a container ID or an object that
945
+ # specifies uploaded file IDs to make available to your code, along with an
946
+ # optional `memory_limit` setting.
947
+ container:,
948
+
949
+ # The tool invocation context(s).
950
+ allowed_callers: nil,
951
+
952
+ # The type of the code interpreter tool. Always `code_interpreter`.
953
+
954
+ type: :code_interpreter
955
+ )
956
+ end
957
+
958
+ sig do
959
+ override.returns(
960
+ {
961
+ container: T.any(
962
+ String,
963
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto
964
+ ),
965
+ type: Symbol,
966
+ allowed_callers: T.nilable(
967
+ T::Array[
968
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::OrSymbol
969
+ ]
970
+ )
971
+ }
972
+ )
973
+ end
974
+ def to_hash
975
+ end
976
+
977
+ # The code interpreter container. Can be a container ID or an object that
978
+ # specifies uploaded file IDs to make available to your code, along with an
979
+ # optional `memory_limit` setting.
980
+ module Container
981
+ extend OpenAI::Internal::Type::Union
982
+
983
+ Variants = T.type_alias {
984
+ T.any(
985
+ String,
986
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto
987
+ )
988
+ }
989
+
990
+ class CodeInterpreterToolAuto < OpenAI::Internal::Type::BaseModel
991
+ OrHash = T.type_alias do
992
+ T.any(
993
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto,
994
+ OpenAI::Internal::AnyHash
995
+ )
996
+ end
997
+
998
+ # Always `auto`.
999
+ sig { returns(Symbol) }
1000
+ attr_accessor :type
1001
+
1002
+ # An optional list of uploaded files to make available to your code.
1003
+ sig { returns(T.nilable(T::Array[String])) }
1004
+ attr_reader :file_ids
1005
+
1006
+ sig { params(file_ids: T::Array[String]).void }
1007
+ attr_writer :file_ids
1008
+
1009
+ # The memory limit for the code interpreter container.
1010
+ sig {
1011
+ returns(
1012
+ T.nilable(
1013
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::OrSymbol
1014
+ )
1015
+ )
1016
+ }
1017
+ attr_accessor :memory_limit
1018
+
1019
+ # Network access policy for the container.
1020
+ sig {
1021
+ returns(
1022
+ T.nilable(
1023
+ T.any(
1024
+ OpenAI::Responses::ContainerNetworkPolicyDisabled,
1025
+ OpenAI::Responses::ContainerNetworkPolicyAllowlist
1026
+ )
1027
+ )
1028
+ )
1029
+ }
1030
+ attr_reader :network_policy
1031
+
1032
+ sig {
1033
+ params(
1034
+ network_policy: T.any(
1035
+ OpenAI::Responses::ContainerNetworkPolicyDisabled::OrHash,
1036
+ OpenAI::Responses::ContainerNetworkPolicyAllowlist::OrHash
1037
+ )
1038
+ )
1039
+ .void
1040
+ }
1041
+ attr_writer :network_policy
1042
+
1043
+ # Configuration for a code interpreter container. Optionally specify the IDs of
1044
+ # the files to run the code on.
1045
+ sig do
1046
+ params(
1047
+
1048
+ file_ids: T::Array[String],
1049
+
1050
+ memory_limit: T.nilable(
1051
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::OrSymbol
1052
+ ),
1053
+
1054
+ network_policy: T.any(
1055
+ OpenAI::Responses::ContainerNetworkPolicyDisabled::OrHash,
1056
+ OpenAI::Responses::ContainerNetworkPolicyAllowlist::OrHash
1057
+ ),
1058
+
1059
+ type: Symbol
1060
+ )
1061
+ .returns(T.attached_class)
1062
+ end
1063
+ def self.new(
1064
+
1065
+ # An optional list of uploaded files to make available to your code.
1066
+ file_ids: nil,
1067
+
1068
+ # The memory limit for the code interpreter container.
1069
+ memory_limit: nil,
1070
+
1071
+ # Network access policy for the container.
1072
+ network_policy: nil,
1073
+
1074
+ # Always `auto`.
1075
+
1076
+ type: :auto
1077
+ )
1078
+ end
1079
+
1080
+ sig do
1081
+ override.returns(
1082
+ {
1083
+ type: Symbol,
1084
+ file_ids: T::Array[String],
1085
+ memory_limit: T.nilable(
1086
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::OrSymbol
1087
+ ),
1088
+ network_policy: T.any(
1089
+ OpenAI::Responses::ContainerNetworkPolicyDisabled,
1090
+ OpenAI::Responses::ContainerNetworkPolicyAllowlist
1091
+ )
1092
+ }
1093
+ )
1094
+ end
1095
+ def to_hash
1096
+ end
1097
+
1098
+ # The memory limit for the code interpreter container.
1099
+ module MemoryLimit
1100
+ extend OpenAI::Internal::Type::Enum
1101
+
1102
+ TaggedSymbol = T.type_alias {
1103
+ T.all(
1104
+ Symbol,
1105
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit
1106
+ )
1107
+ }
1108
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1109
+
1110
+ MEMORY_LIMIT_1G = T.let(
1111
+ :"1g",
1112
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::TaggedSymbol
1113
+ )
1114
+ MEMORY_LIMIT_4G = T.let(
1115
+ :"4g",
1116
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::TaggedSymbol
1117
+ )
1118
+ MEMORY_LIMIT_16G = T.let(
1119
+ :"16g",
1120
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::TaggedSymbol
1121
+ )
1122
+ MEMORY_LIMIT_64G = T.let(
1123
+ :"64g",
1124
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::TaggedSymbol
1125
+ )
1126
+
1127
+ sig {
1128
+ override.returns(
1129
+ T::Array[
1130
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::MemoryLimit::TaggedSymbol
1131
+ ]
1132
+ )
1133
+ }
1134
+ def self.values
1135
+ end
1136
+ end
1137
+
1138
+ # Network access policy for the container.
1139
+ module NetworkPolicy
1140
+ extend OpenAI::Internal::Type::Union
1141
+
1142
+ Variants = T.type_alias {
1143
+ T.any(
1144
+ OpenAI::Responses::ContainerNetworkPolicyDisabled,
1145
+ OpenAI::Responses::ContainerNetworkPolicyAllowlist
1146
+ )
1147
+ }
1148
+
1149
+ sig {
1150
+ override.returns(
1151
+ T::Array[
1152
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::CodeInterpreterToolAuto::NetworkPolicy::Variants
1153
+ ]
1154
+ )
1155
+ }
1156
+ def self.variants
1157
+ end
1158
+
1159
+ end
1160
+ end
1161
+
1162
+ sig {
1163
+ override.returns(
1164
+ T::Array[
1165
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::Container::Variants
1166
+ ]
1167
+ )
1168
+ }
1169
+ def self.variants
1170
+ end
1171
+
1172
+ end
1173
+
1174
+ module AllowedCaller
1175
+ extend OpenAI::Internal::Type::Enum
1176
+
1177
+ TaggedSymbol = T.type_alias {
1178
+ T.all(
1179
+ Symbol,
1180
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller
1181
+ )
1182
+ }
1183
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1184
+
1185
+ DIRECT = T.let(
1186
+ :direct,
1187
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::TaggedSymbol
1188
+ )
1189
+ PROGRAMMATIC = T.let(
1190
+ :programmatic,
1191
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::TaggedSymbol
1192
+ )
1193
+
1194
+ sig {
1195
+ override.returns(
1196
+ T::Array[
1197
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::CodeInterpreter::AllowedCaller::TaggedSymbol
1198
+ ]
1199
+ )
1200
+ }
1201
+ def self.values
1202
+ end
1203
+ end
1204
+ end
1205
+
1206
+ class ProgrammaticToolCalling < OpenAI::Internal::Type::BaseModel
1207
+ OrHash = T.type_alias do
1208
+ T.any(
1209
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ProgrammaticToolCalling,
1210
+ OpenAI::Internal::AnyHash
1211
+ )
1212
+ end
1213
+
1214
+ # The type of the tool. Always `programmatic_tool_calling`.
1215
+ sig { returns(Symbol) }
1216
+ attr_accessor :type
1217
+
1218
+ sig do
1219
+ params(
1220
+
1221
+ type: Symbol
1222
+ )
1223
+ .returns(T.attached_class)
1224
+ end
1225
+ def self.new(
1226
+
1227
+ # The type of the tool. Always `programmatic_tool_calling`.
1228
+
1229
+ type: :programmatic_tool_calling
1230
+ )
1231
+ end
1232
+
1233
+ sig do
1234
+ override.returns(
1235
+ {type: Symbol}
1236
+ )
1237
+ end
1238
+ def to_hash
1239
+ end
1240
+
1241
+ end
1242
+
1243
+ class ImageGeneration < OpenAI::Internal::Type::BaseModel
1244
+ OrHash = T.type_alias do
1245
+ T.any(
1246
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration,
1247
+ OpenAI::Internal::AnyHash
1248
+ )
1249
+ end
1250
+
1251
+ # The type of the image generation tool. Always `image_generation`.
1252
+ sig { returns(Symbol) }
1253
+ attr_accessor :type
1254
+
1255
+ # Whether to generate a new image or edit an existing image. Default: `auto`.
1256
+ sig {
1257
+ returns(
1258
+ T.nilable(OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::OrSymbol)
1259
+ )
1260
+ }
1261
+ attr_reader :action
1262
+
1263
+ sig {
1264
+ params(
1265
+ action: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::OrSymbol
1266
+ )
1267
+ .void
1268
+ }
1269
+ attr_writer :action
1270
+
1271
+ # Allows to set transparency for the background of the generated image(s). Must be
1272
+ # one of `transparent`, `opaque`, or `auto` (default value). When `auto` is used,
1273
+ # the model will automatically determine the best background for the image.
1274
+ #
1275
+ # `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`, including their `2026-09-08`
1276
+ # snapshots, support `opaque` and `transparent` backgrounds. Transparent
1277
+ # backgrounds are available for supported GPT Image models. For `gpt-image-2` and
1278
+ # `gpt-image-2-2026-04-21`, this support is in preview. When using `transparent`,
1279
+ # set the output format to `png` or `webp`.
1280
+ sig {
1281
+ returns(
1282
+ T.nilable(
1283
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::OrSymbol
1284
+ )
1285
+ )
1286
+ }
1287
+ attr_reader :background
1288
+
1289
+ sig {
1290
+ params(
1291
+ background: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::OrSymbol
1292
+ )
1293
+ .void
1294
+ }
1295
+ attr_writer :background
1296
+
1297
+ # Control how much effort the model will exert to match the style and features,
1298
+ # especially facial features, of input images. Supports `high` and `low` on
1299
+ # `gpt-image-1` and `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For
1300
+ # `gpt-image-2`, omit this parameter. Defaults to `low` on supported models.
1301
+ sig {
1302
+ returns(
1303
+ T.nilable(
1304
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::OrSymbol
1305
+ )
1306
+ )
1307
+ }
1308
+ attr_accessor :input_fidelity
1309
+
1310
+ # Optional mask for inpainting. Contains `image_url` (string, optional) and
1311
+ # `file_id` (string, optional).
1312
+ sig {
1313
+ returns(
1314
+ T.nilable(OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputImageMask)
1315
+ )
1316
+ }
1317
+ attr_reader :input_image_mask
1318
+
1319
+ sig {
1320
+ params(
1321
+ input_image_mask: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputImageMask::OrHash
1322
+ )
1323
+ .void
1324
+ }
1325
+ attr_writer :input_image_mask
1326
+
1327
+ # The image generation model to use. One of `gpt-image-1`, `gpt-image-1-mini`,
1328
+ # `gpt-image-1.5`, `gpt-image-2`, `gpt-image-2-2026-04-21`,
1329
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1330
+ # `gpt-image-2.5-flare`, `gpt-image-2.5-flare-2026-09-08`, or
1331
+ # `chatgpt-image-latest`. Default: `gpt-image-1`.
1332
+ sig {
1333
+ returns(
1334
+ T.nilable(
1335
+ T.any(
1336
+ String,
1337
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::OrSymbol
1338
+ )
1339
+ )
1340
+ )
1341
+ }
1342
+ attr_reader :model
1343
+
1344
+ sig {
1345
+ params(
1346
+ model: T.any(
1347
+ String,
1348
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::OrSymbol
1349
+ )
1350
+ )
1351
+ .void
1352
+ }
1353
+ attr_writer :model
1354
+
1355
+ # Moderation level for the generated image. Default: `auto`.
1356
+ sig {
1357
+ returns(
1358
+ T.nilable(
1359
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::OrSymbol
1360
+ )
1361
+ )
1362
+ }
1363
+ attr_reader :moderation
1364
+
1365
+ sig {
1366
+ params(
1367
+ moderation: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::OrSymbol
1368
+ )
1369
+ .void
1370
+ }
1371
+ attr_writer :moderation
1372
+
1373
+ # Compression level for the output image. Default: 100.
1374
+ sig { returns(T.nilable(Integer)) }
1375
+ attr_reader :output_compression
1376
+
1377
+ sig { params(output_compression: Integer).void }
1378
+ attr_writer :output_compression
1379
+
1380
+ # The output format of the generated image. One of `png`, `webp`, or `jpeg`.
1381
+ # Default: `png`.
1382
+ sig {
1383
+ returns(
1384
+ T.nilable(
1385
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::OrSymbol
1386
+ )
1387
+ )
1388
+ }
1389
+ attr_reader :output_format
1390
+
1391
+ sig {
1392
+ params(
1393
+ output_format: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::OrSymbol
1394
+ )
1395
+ .void
1396
+ }
1397
+ attr_writer :output_format
1398
+
1399
+ # Number of partial images to generate in streaming mode, from 0 (default value)
1400
+ # to 3.
1401
+ sig { returns(T.nilable(Integer)) }
1402
+ attr_reader :partial_images
1403
+
1404
+ sig { params(partial_images: Integer).void }
1405
+ attr_writer :partial_images
1406
+
1407
+ # The quality of the generated image. The GPT image models support `low`,
1408
+ # `medium`, and `high`. `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`,
1409
+ # including their `2026-09-08` snapshots, also support `xhigh` and `max`. Default:
1410
+ # `auto`.
1411
+ sig {
1412
+ returns(
1413
+ T.nilable(
1414
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::OrSymbol
1415
+ )
1416
+ )
1417
+ }
1418
+ attr_reader :quality
1419
+
1420
+ sig {
1421
+ params(
1422
+ quality: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::OrSymbol
1423
+ )
1424
+ .void
1425
+ }
1426
+ attr_writer :quality
1427
+
1428
+ # The size of the generated images. For `gpt-image-2`, `gpt-image-2-2026-04-21`,
1429
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1430
+ # `gpt-image-2.5-flare`, and `gpt-image-2.5-flare-2026-09-08`, arbitrary
1431
+ # resolutions are supported as `WIDTHxHEIGHT` strings, for example `1536x864`.
1432
+ # Width and height must both be divisible by 16 and the requested aspect ratio
1433
+ # must be between 1:3 and 3:1. Resolutions above `2560x1440` are experimental, and
1434
+ # the maximum supported resolution is `3840x2160`. The requested size must also
1435
+ # satisfy the model's current pixel and edge limits. The standard sizes
1436
+ # `1024x1024`, `1536x1024`, and `1024x1536` are supported by the GPT image models;
1437
+ # `auto` is supported for models that allow automatic sizing.
1438
+ sig {
1439
+ returns(
1440
+ T.nilable(
1441
+ T.any(
1442
+ String,
1443
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::OrSymbol
1444
+ )
1445
+ )
1446
+ )
1447
+ }
1448
+ attr_reader :size
1449
+
1450
+ sig {
1451
+ params(
1452
+ size: T.any(
1453
+ String,
1454
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::OrSymbol
1455
+ )
1456
+ )
1457
+ .void
1458
+ }
1459
+ attr_writer :size
1460
+
1461
+ # A tool that generates images using the GPT image models.
1462
+ sig do
1463
+ params(
1464
+
1465
+ action: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::OrSymbol,
1466
+
1467
+ background: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::OrSymbol,
1468
+
1469
+ input_fidelity: T.nilable(
1470
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::OrSymbol
1471
+ ),
1472
+
1473
+ input_image_mask: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputImageMask::OrHash,
1474
+
1475
+ model: T.any(
1476
+ String,
1477
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::OrSymbol
1478
+ ),
1479
+
1480
+ moderation: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::OrSymbol,
1481
+
1482
+ output_compression: Integer,
1483
+
1484
+ output_format: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::OrSymbol,
1485
+
1486
+ partial_images: Integer,
1487
+
1488
+ quality: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::OrSymbol,
1489
+
1490
+ size: T.any(
1491
+ String,
1492
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::OrSymbol
1493
+ ),
1494
+
1495
+ type: Symbol
1496
+ )
1497
+ .returns(T.attached_class)
1498
+ end
1499
+ def self.new(
1500
+
1501
+ # Whether to generate a new image or edit an existing image. Default: `auto`.
1502
+ action: nil,
1503
+
1504
+ # Allows to set transparency for the background of the generated image(s). Must be
1505
+ # one of `transparent`, `opaque`, or `auto` (default value). When `auto` is used,
1506
+ # the model will automatically determine the best background for the image.
1507
+ #
1508
+ # `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`, including their `2026-09-08`
1509
+ # snapshots, support `opaque` and `transparent` backgrounds. Transparent
1510
+ # backgrounds are available for supported GPT Image models. For `gpt-image-2` and
1511
+ # `gpt-image-2-2026-04-21`, this support is in preview. When using `transparent`,
1512
+ # set the output format to `png` or `webp`.
1513
+ background: nil,
1514
+
1515
+ # Control how much effort the model will exert to match the style and features,
1516
+ # especially facial features, of input images. Supports `high` and `low` on
1517
+ # `gpt-image-1` and `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For
1518
+ # `gpt-image-2`, omit this parameter. Defaults to `low` on supported models.
1519
+ input_fidelity: nil,
1520
+
1521
+ # Optional mask for inpainting. Contains `image_url` (string, optional) and
1522
+ # `file_id` (string, optional).
1523
+ input_image_mask: nil,
1524
+
1525
+ # The image generation model to use. One of `gpt-image-1`, `gpt-image-1-mini`,
1526
+ # `gpt-image-1.5`, `gpt-image-2`, `gpt-image-2-2026-04-21`,
1527
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1528
+ # `gpt-image-2.5-flare`, `gpt-image-2.5-flare-2026-09-08`, or
1529
+ # `chatgpt-image-latest`. Default: `gpt-image-1`.
1530
+ model: nil,
1531
+
1532
+ # Moderation level for the generated image. Default: `auto`.
1533
+ moderation: nil,
1534
+
1535
+ # Compression level for the output image. Default: 100.
1536
+ output_compression: nil,
1537
+
1538
+ # The output format of the generated image. One of `png`, `webp`, or `jpeg`.
1539
+ # Default: `png`.
1540
+ output_format: nil,
1541
+
1542
+ # Number of partial images to generate in streaming mode, from 0 (default value)
1543
+ # to 3.
1544
+ partial_images: nil,
1545
+
1546
+ # The quality of the generated image. The GPT image models support `low`,
1547
+ # `medium`, and `high`. `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`,
1548
+ # including their `2026-09-08` snapshots, also support `xhigh` and `max`. Default:
1549
+ # `auto`.
1550
+ quality: nil,
1551
+
1552
+ # The size of the generated images. For `gpt-image-2`, `gpt-image-2-2026-04-21`,
1553
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1554
+ # `gpt-image-2.5-flare`, and `gpt-image-2.5-flare-2026-09-08`, arbitrary
1555
+ # resolutions are supported as `WIDTHxHEIGHT` strings, for example `1536x864`.
1556
+ # Width and height must both be divisible by 16 and the requested aspect ratio
1557
+ # must be between 1:3 and 3:1. Resolutions above `2560x1440` are experimental, and
1558
+ # the maximum supported resolution is `3840x2160`. The requested size must also
1559
+ # satisfy the model's current pixel and edge limits. The standard sizes
1560
+ # `1024x1024`, `1536x1024`, and `1024x1536` are supported by the GPT image models;
1561
+ # `auto` is supported for models that allow automatic sizing.
1562
+ size: nil,
1563
+
1564
+ # The type of the image generation tool. Always `image_generation`.
1565
+
1566
+ type: :image_generation
1567
+ )
1568
+ end
1569
+
1570
+ sig do
1571
+ override.returns(
1572
+ {
1573
+ type: Symbol,
1574
+ action: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::OrSymbol,
1575
+ background: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::OrSymbol,
1576
+ input_fidelity: T.nilable(
1577
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::OrSymbol
1578
+ ),
1579
+ input_image_mask: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputImageMask,
1580
+ model: T.any(
1581
+ String,
1582
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::OrSymbol
1583
+ ),
1584
+ moderation: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::OrSymbol,
1585
+ output_compression: Integer,
1586
+ output_format: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::OrSymbol,
1587
+ partial_images: Integer,
1588
+ quality: OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::OrSymbol,
1589
+ size: T.any(
1590
+ String,
1591
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::OrSymbol
1592
+ )
1593
+ }
1594
+ )
1595
+ end
1596
+ def to_hash
1597
+ end
1598
+
1599
+ # Whether to generate a new image or edit an existing image. Default: `auto`.
1600
+ module Action
1601
+ extend OpenAI::Internal::Type::Enum
1602
+
1603
+ TaggedSymbol = T.type_alias {
1604
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action)
1605
+ }
1606
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1607
+
1608
+ GENERATE = T.let(
1609
+ :generate,
1610
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::TaggedSymbol
1611
+ )
1612
+ EDIT = T.let(
1613
+ :edit,
1614
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::TaggedSymbol
1615
+ )
1616
+ AUTO = T.let(
1617
+ :auto,
1618
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::TaggedSymbol
1619
+ )
1620
+
1621
+ sig {
1622
+ override.returns(
1623
+ T::Array[
1624
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Action::TaggedSymbol
1625
+ ]
1626
+ )
1627
+ }
1628
+ def self.values
1629
+ end
1630
+ end
1631
+
1632
+ # Allows to set transparency for the background of the generated image(s). Must be
1633
+ # one of `transparent`, `opaque`, or `auto` (default value). When `auto` is used,
1634
+ # the model will automatically determine the best background for the image.
1635
+ #
1636
+ # `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`, including their `2026-09-08`
1637
+ # snapshots, support `opaque` and `transparent` backgrounds. Transparent
1638
+ # backgrounds are available for supported GPT Image models. For `gpt-image-2` and
1639
+ # `gpt-image-2-2026-04-21`, this support is in preview. When using `transparent`,
1640
+ # set the output format to `png` or `webp`.
1641
+ module Background
1642
+ extend OpenAI::Internal::Type::Enum
1643
+
1644
+ TaggedSymbol = T.type_alias {
1645
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background)
1646
+ }
1647
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1648
+
1649
+ TRANSPARENT = T.let(
1650
+ :transparent,
1651
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::TaggedSymbol
1652
+ )
1653
+ OPAQUE = T.let(
1654
+ :opaque,
1655
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::TaggedSymbol
1656
+ )
1657
+ AUTO = T.let(
1658
+ :auto,
1659
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::TaggedSymbol
1660
+ )
1661
+
1662
+ sig {
1663
+ override.returns(
1664
+ T::Array[
1665
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Background::TaggedSymbol
1666
+ ]
1667
+ )
1668
+ }
1669
+ def self.values
1670
+ end
1671
+ end
1672
+
1673
+ # Control how much effort the model will exert to match the style and features,
1674
+ # especially facial features, of input images. Supports `high` and `low` on
1675
+ # `gpt-image-1` and `gpt-image-1.5`; `gpt-image-1-mini` supports only `low`. For
1676
+ # `gpt-image-2`, omit this parameter. Defaults to `low` on supported models.
1677
+ module InputFidelity
1678
+ extend OpenAI::Internal::Type::Enum
1679
+
1680
+ TaggedSymbol = T.type_alias {
1681
+ T.all(
1682
+ Symbol,
1683
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity
1684
+ )
1685
+ }
1686
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1687
+
1688
+ HIGH = T.let(
1689
+ :high,
1690
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::TaggedSymbol
1691
+ )
1692
+ LOW = T.let(
1693
+ :low,
1694
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::TaggedSymbol
1695
+ )
1696
+
1697
+ sig {
1698
+ override.returns(
1699
+ T::Array[
1700
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputFidelity::TaggedSymbol
1701
+ ]
1702
+ )
1703
+ }
1704
+ def self.values
1705
+ end
1706
+ end
1707
+
1708
+ class InputImageMask < OpenAI::Internal::Type::BaseModel
1709
+ OrHash = T.type_alias do
1710
+ T.any(
1711
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::InputImageMask,
1712
+ OpenAI::Internal::AnyHash
1713
+ )
1714
+ end
1715
+
1716
+ # File ID for the mask image.
1717
+ sig { returns(T.nilable(String)) }
1718
+ attr_reader :file_id
1719
+
1720
+ sig { params(file_id: String).void }
1721
+ attr_writer :file_id
1722
+
1723
+ # Base64-encoded mask image.
1724
+ sig { returns(T.nilable(String)) }
1725
+ attr_reader :image_url
1726
+
1727
+ sig { params(image_url: String).void }
1728
+ attr_writer :image_url
1729
+
1730
+ # Optional mask for inpainting. Contains `image_url` (string, optional) and
1731
+ # `file_id` (string, optional).
1732
+ sig do
1733
+ params(
1734
+
1735
+ file_id: String,
1736
+
1737
+ image_url: String
1738
+ )
1739
+ .returns(T.attached_class)
1740
+ end
1741
+ def self.new(
1742
+
1743
+ # File ID for the mask image.
1744
+ file_id: nil,
1745
+
1746
+ # Base64-encoded mask image.
1747
+
1748
+ image_url: nil
1749
+ )
1750
+ end
1751
+
1752
+ sig do
1753
+ override.returns(
1754
+ {file_id: String, image_url: String}
1755
+ )
1756
+ end
1757
+ def to_hash
1758
+ end
1759
+
1760
+ end
1761
+
1762
+ # The image generation model to use. One of `gpt-image-1`, `gpt-image-1-mini`,
1763
+ # `gpt-image-1.5`, `gpt-image-2`, `gpt-image-2-2026-04-21`,
1764
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1765
+ # `gpt-image-2.5-flare`, `gpt-image-2.5-flare-2026-09-08`, or
1766
+ # `chatgpt-image-latest`. Default: `gpt-image-1`.
1767
+ module Model
1768
+ extend OpenAI::Internal::Type::Union
1769
+
1770
+ Variants = T.type_alias {
1771
+ T.any(
1772
+ String,
1773
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1774
+ )
1775
+ }
1776
+
1777
+ sig {
1778
+ override.returns(
1779
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::Variants]
1780
+ )
1781
+ }
1782
+ def self.variants
1783
+ end
1784
+
1785
+ TaggedSymbol = T.type_alias do
1786
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model)
1787
+ end
1788
+
1789
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1790
+
1791
+ GPT_IMAGE_1 = T.let(
1792
+ :"gpt-image-1",
1793
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1794
+ )
1795
+ GPT_IMAGE_1_MINI = T.let(
1796
+ :"gpt-image-1-mini",
1797
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1798
+ )
1799
+ GPT_IMAGE_2 = T.let(
1800
+ :"gpt-image-2",
1801
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1802
+ )
1803
+ GPT_IMAGE_2_2026_04_21 = T.let(
1804
+ :"gpt-image-2-2026-04-21",
1805
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1806
+ )
1807
+ GPT_IMAGE_2_5_SUNBURST = T.let(
1808
+ :"gpt-image-2.5-sunburst",
1809
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1810
+ )
1811
+ GPT_IMAGE_2_5_SUNBURST_2026_09_08 = T.let(
1812
+ :"gpt-image-2.5-sunburst-2026-09-08",
1813
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1814
+ )
1815
+ GPT_IMAGE_2_5_FLARE = T.let(
1816
+ :"gpt-image-2.5-flare",
1817
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1818
+ )
1819
+ GPT_IMAGE_2_5_FLARE_2026_09_08 = T.let(
1820
+ :"gpt-image-2.5-flare-2026-09-08",
1821
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1822
+ )
1823
+ GPT_IMAGE_1_5 = T.let(
1824
+ :"gpt-image-1.5",
1825
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1826
+ )
1827
+ CHATGPT_IMAGE_LATEST = T.let(
1828
+ :"chatgpt-image-latest",
1829
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Model::TaggedSymbol
1830
+ )
1831
+
1832
+ end
1833
+
1834
+ # Moderation level for the generated image. Default: `auto`.
1835
+ module Moderation
1836
+ extend OpenAI::Internal::Type::Enum
1837
+
1838
+ TaggedSymbol = T.type_alias {
1839
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation)
1840
+ }
1841
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1842
+
1843
+ AUTO = T.let(
1844
+ :auto,
1845
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::TaggedSymbol
1846
+ )
1847
+ LOW = T.let(
1848
+ :low,
1849
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::TaggedSymbol
1850
+ )
1851
+
1852
+ sig {
1853
+ override.returns(
1854
+ T::Array[
1855
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Moderation::TaggedSymbol
1856
+ ]
1857
+ )
1858
+ }
1859
+ def self.values
1860
+ end
1861
+ end
1862
+
1863
+ # The output format of the generated image. One of `png`, `webp`, or `jpeg`.
1864
+ # Default: `png`.
1865
+ module OutputFormat
1866
+ extend OpenAI::Internal::Type::Enum
1867
+
1868
+ TaggedSymbol = T.type_alias {
1869
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat)
1870
+ }
1871
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1872
+
1873
+ PNG = T.let(
1874
+ :png,
1875
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::TaggedSymbol
1876
+ )
1877
+ WEBP = T.let(
1878
+ :webp,
1879
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::TaggedSymbol
1880
+ )
1881
+ JPEG = T.let(
1882
+ :jpeg,
1883
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::TaggedSymbol
1884
+ )
1885
+
1886
+ sig {
1887
+ override.returns(
1888
+ T::Array[
1889
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::OutputFormat::TaggedSymbol
1890
+ ]
1891
+ )
1892
+ }
1893
+ def self.values
1894
+ end
1895
+ end
1896
+
1897
+ # The quality of the generated image. The GPT image models support `low`,
1898
+ # `medium`, and `high`. `gpt-image-2.5-sunburst` and `gpt-image-2.5-flare`,
1899
+ # including their `2026-09-08` snapshots, also support `xhigh` and `max`. Default:
1900
+ # `auto`.
1901
+ module Quality
1902
+ extend OpenAI::Internal::Type::Enum
1903
+
1904
+ TaggedSymbol = T.type_alias {
1905
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality)
1906
+ }
1907
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1908
+
1909
+ LOW = T.let(
1910
+ :low,
1911
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1912
+ )
1913
+ MEDIUM = T.let(
1914
+ :medium,
1915
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1916
+ )
1917
+ HIGH = T.let(
1918
+ :high,
1919
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1920
+ )
1921
+ XHIGH = T.let(
1922
+ :xhigh,
1923
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1924
+ )
1925
+ MAX = T.let(
1926
+ :max,
1927
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1928
+ )
1929
+ AUTO = T.let(
1930
+ :auto,
1931
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1932
+ )
1933
+
1934
+ sig {
1935
+ override.returns(
1936
+ T::Array[
1937
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Quality::TaggedSymbol
1938
+ ]
1939
+ )
1940
+ }
1941
+ def self.values
1942
+ end
1943
+ end
1944
+
1945
+ # The size of the generated images. For `gpt-image-2`, `gpt-image-2-2026-04-21`,
1946
+ # `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`,
1947
+ # `gpt-image-2.5-flare`, and `gpt-image-2.5-flare-2026-09-08`, arbitrary
1948
+ # resolutions are supported as `WIDTHxHEIGHT` strings, for example `1536x864`.
1949
+ # Width and height must both be divisible by 16 and the requested aspect ratio
1950
+ # must be between 1:3 and 3:1. Resolutions above `2560x1440` are experimental, and
1951
+ # the maximum supported resolution is `3840x2160`. The requested size must also
1952
+ # satisfy the model's current pixel and edge limits. The standard sizes
1953
+ # `1024x1024`, `1536x1024`, and `1024x1536` are supported by the GPT image models;
1954
+ # `auto` is supported for models that allow automatic sizing.
1955
+ module Size
1956
+ extend OpenAI::Internal::Type::Union
1957
+
1958
+ Variants = T.type_alias {
1959
+ T.any(
1960
+ String,
1961
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::TaggedSymbol
1962
+ )
1963
+ }
1964
+
1965
+ sig {
1966
+ override.returns(
1967
+ T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::Variants]
1968
+ )
1969
+ }
1970
+ def self.variants
1971
+ end
1972
+
1973
+ TaggedSymbol = T.type_alias do
1974
+ T.all(Symbol, OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size)
1975
+ end
1976
+
1977
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1978
+
1979
+ SIZE_1024X1024 = T.let(
1980
+ :"1024x1024",
1981
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::TaggedSymbol
1982
+ )
1983
+ SIZE_1024X1536 = T.let(
1984
+ :"1024x1536",
1985
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::TaggedSymbol
1986
+ )
1987
+ SIZE_1536X1024 = T.let(
1988
+ :"1536x1024",
1989
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::TaggedSymbol
1990
+ )
1991
+ AUTO = T.let(
1992
+ :auto,
1993
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::ImageGeneration::Size::TaggedSymbol
1994
+ )
1995
+
1996
+ end
1997
+ end
1998
+
1999
+ class LocalShell < OpenAI::Internal::Type::BaseModel
2000
+ OrHash = T.type_alias do
2001
+ T.any(
2002
+ OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::LocalShell,
2003
+ OpenAI::Internal::AnyHash
2004
+ )
2005
+ end
2006
+
2007
+ # The type of the local shell tool. Always `local_shell`.
2008
+ sig { returns(Symbol) }
2009
+ attr_accessor :type
2010
+
2011
+ # A tool that allows the model to execute shell commands in a local environment.
2012
+ sig do
2013
+ params(
2014
+
2015
+ type: Symbol
2016
+ )
2017
+ .returns(T.attached_class)
2018
+ end
2019
+ def self.new(
2020
+
2021
+ # The type of the local shell tool. Always `local_shell`.
2022
+
2023
+ type: :local_shell
2024
+ )
2025
+ end
2026
+
2027
+ sig do
2028
+ override.returns(
2029
+ {type: Symbol}
2030
+ )
2031
+ end
2032
+ def to_hash
2033
+ end
2034
+
2035
+ end
2036
+
2037
+ sig { override.returns(T::Array[OpenAI::Responses::ResponseToolSearchOutputItemParam::Tool::Variants]) }
2038
+ def self.variants
2039
+ end
2040
+
2041
+ end
2042
+
160
2043
  # Whether tool search was executed by the server or by the client.
161
2044
  module Execution
162
2045
  extend OpenAI::Internal::Type::Enum