openai 0.77.1 → 0.79.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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +98 -0
  3. data/README.md +341 -10
  4. data/SECURITY.md +6 -22
  5. data/azure.md +110 -0
  6. data/bedrock.md +132 -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 +34 -14
  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 +189 -0
  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 +161 -0
  24. data/lib/openai/internal/stream.rb +2 -2
  25. data/lib/openai/internal/transport/base_client.rb +216 -57
  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 +40 -8
  30. data/lib/openai/internal/type/hash_of.rb +3 -3
  31. data/lib/openai/internal/util.rb +59 -112
  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 +3 -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_response.rb +9 -0
  47. data/lib/openai/models/beta/beta_response_stream_event.rb +1 -1
  48. data/lib/openai/models/beta/beta_responses_client_event.rb +28 -3
  49. data/lib/openai/models/beta/beta_responses_server_event.rb +1037 -61
  50. data/lib/openai/models/beta/response_compact_params.rb +9 -0
  51. data/lib/openai/models/beta/response_create_params.rb +9 -0
  52. data/lib/openai/models/containers/file_create_params.rb +4 -0
  53. data/lib/openai/models/content_provenance_check_create_params.rb +4 -0
  54. data/lib/openai/models/file_create_params.rb +4 -0
  55. data/lib/openai/models/image_create_variation_params.rb +4 -0
  56. data/lib/openai/models/image_edit_params.rb +8 -0
  57. data/lib/openai/models/responses/response_compact_params.rb +9 -0
  58. data/lib/openai/models/responses/response_stream_event.rb +1 -1
  59. data/lib/openai/models/responses/responses_client_event.rb +13 -1
  60. data/lib/openai/models/responses/responses_server_event.rb +1027 -54
  61. data/lib/openai/models/responses_model.rb +3 -0
  62. data/lib/openai/models/skill_create_params.rb +4 -0
  63. data/lib/openai/models/skills/version_create_params.rb +4 -0
  64. data/lib/openai/models/uploads/part_create_params.rb +4 -0
  65. data/lib/openai/models/vector_store_search_response.rb +3 -1
  66. data/lib/openai/models/video_create_character_params.rb +4 -0
  67. data/lib/openai/models/video_create_params.rb +4 -0
  68. data/lib/openai/models/video_edit_params.rb +4 -0
  69. data/lib/openai/models/video_extend_params.rb +4 -0
  70. data/lib/openai/models.rb +9 -1
  71. data/lib/openai/net_http_client.rb +295 -0
  72. data/lib/openai/providers/azure.rb +216 -0
  73. data/lib/openai/providers/bedrock.rb +3 -1
  74. data/lib/openai/resources/admin/organization/projects/groups/roles.rb +1 -1
  75. data/lib/openai/resources/admin/organization/projects/groups.rb +1 -1
  76. data/lib/openai/resources/admin/organization/projects/users/roles.rb +1 -1
  77. data/lib/openai/resources/admin/organization/projects.rb +4 -2
  78. data/lib/openai/resources/audio/transcriptions.rb +8 -0
  79. data/lib/openai/resources/audio/translations.rb +4 -0
  80. data/lib/openai/resources/beta/responses.rb +1 -1
  81. data/lib/openai/resources/beta/threads/runs/steps.rb +2 -2
  82. data/lib/openai/resources/containers/files.rb +4 -0
  83. data/lib/openai/resources/content_provenance_checks.rb +4 -0
  84. data/lib/openai/resources/conversations/items.rb +1 -1
  85. data/lib/openai/resources/evals/runs/output_items.rb +1 -1
  86. data/lib/openai/resources/files.rb +4 -0
  87. data/lib/openai/resources/images.rb +12 -0
  88. data/lib/openai/resources/responses.rb +3 -2
  89. data/lib/openai/resources/skills/versions.rb +4 -0
  90. data/lib/openai/resources/skills.rb +4 -0
  91. data/lib/openai/resources/uploads/parts.rb +4 -0
  92. data/lib/openai/resources/vector_stores/file_batches.rb +1 -1
  93. data/lib/openai/resources/videos.rb +38 -0
  94. data/lib/openai/resources/webhooks.rb +18 -6
  95. data/lib/openai/version.rb +1 -1
  96. data/lib/openai.rb +113 -108
  97. data/rbi/openai/auth.rbi +4 -4
  98. data/rbi/openai/client.rbi +15 -3
  99. data/rbi/openai/errors.rbi +7 -0
  100. data/rbi/openai/helpers/streaming/events.rbi +12 -0
  101. data/rbi/openai/http_client.rbi +123 -0
  102. data/rbi/openai/internal/logging.rbi +192 -0
  103. data/rbi/openai/internal/provider.rbi +3 -0
  104. data/rbi/openai/internal/read_io_adapter.rbi +52 -0
  105. data/rbi/openai/internal/transport/base_client.rbi +80 -10
  106. data/rbi/openai/internal/type/base_model.rbi +24 -1
  107. data/rbi/openai/internal/type/base_page.rbi +13 -2
  108. data/rbi/openai/internal/type/base_stream.rbi +16 -5
  109. data/rbi/openai/internal/util.rbi +26 -42
  110. data/rbi/openai/models/admin/organization/audit_log_list_params.rbi +5 -0
  111. data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +5 -0
  112. data/rbi/openai/models/all_models.rbi +15 -0
  113. data/rbi/openai/models/audio/transcription_create_params.rbi +14 -2
  114. data/rbi/openai/models/audio/translation_create_params.rbi +14 -2
  115. data/rbi/openai/models/beta/beta_response.rbi +15 -0
  116. data/rbi/openai/models/beta/beta_response_stream_event.rbi +1 -1
  117. data/rbi/openai/models/beta/beta_responses_client_event.rbi +37 -1
  118. data/rbi/openai/models/beta/beta_responses_server_event.rbi +3791 -54
  119. data/rbi/openai/models/beta/response_compact_params.rbi +15 -0
  120. data/rbi/openai/models/beta/response_create_params.rbi +15 -0
  121. data/rbi/openai/models/containers/file_create_params.rbi +8 -0
  122. data/rbi/openai/models/content_provenance_check_create_params.rbi +8 -0
  123. data/rbi/openai/models/file_create_params.rbi +8 -0
  124. data/rbi/openai/models/image_create_variation_params.rbi +8 -0
  125. data/rbi/openai/models/image_edit_params.rbi +16 -0
  126. data/rbi/openai/models/responses/response_compact_params.rbi +15 -0
  127. data/rbi/openai/models/responses/response_stream_event.rbi +1 -1
  128. data/rbi/openai/models/responses/responses_client_event.rbi +19 -0
  129. data/rbi/openai/models/responses/responses_server_event.rbi +3282 -53
  130. data/rbi/openai/models/responses_model.rbi +15 -0
  131. data/rbi/openai/models/skill_create_params.rbi +8 -0
  132. data/rbi/openai/models/skills/version_create_params.rbi +8 -0
  133. data/rbi/openai/models/uploads/part_create_params.rbi +8 -0
  134. data/rbi/openai/models/video_create_character_params.rbi +8 -0
  135. data/rbi/openai/models/video_create_params.rbi +8 -0
  136. data/rbi/openai/models/video_edit_params.rbi +8 -0
  137. data/rbi/openai/models/video_extend_params.rbi +8 -0
  138. data/rbi/openai/net_http_client.rbi +64 -0
  139. data/rbi/openai/providers.rbi +9 -0
  140. data/rbi/openai/resources/audio/transcriptions.rbi +14 -2
  141. data/rbi/openai/resources/audio/translations.rbi +7 -1
  142. data/rbi/openai/resources/containers/files.rbi +4 -0
  143. data/rbi/openai/resources/content_provenance_checks.rbi +4 -0
  144. data/rbi/openai/resources/files.rbi +4 -0
  145. data/rbi/openai/resources/images.rbi +20 -0
  146. data/rbi/openai/resources/skills/versions.rbi +4 -0
  147. data/rbi/openai/resources/skills.rbi +4 -0
  148. data/rbi/openai/resources/uploads/parts.rbi +4 -0
  149. data/rbi/openai/resources/videos.rbi +16 -0
  150. data/sig/openai/client.rbs +7 -2
  151. data/sig/openai/errors.rbs +5 -0
  152. data/sig/openai/http_client.rbs +76 -0
  153. data/sig/openai/internal/logging.rbs +88 -0
  154. data/sig/openai/internal/provider.rbs +3 -1
  155. data/sig/openai/internal/read_io_adapter.rbs +23 -0
  156. data/sig/openai/internal/transport/base_client.rbs +41 -6
  157. data/sig/openai/internal/type/base_model.rbs +13 -0
  158. data/sig/openai/internal/type/base_page.rbs +8 -1
  159. data/sig/openai/internal/type/base_stream.rbs +9 -3
  160. data/sig/openai/internal/util.rbs +12 -16
  161. data/sig/openai/models/admin/organization/audit_log_list_params.rbs +2 -0
  162. data/sig/openai/models/admin/organization/audit_log_list_response.rbs +2 -0
  163. data/sig/openai/models/all_models.rbs +6 -0
  164. data/sig/openai/models/beta/beta_response.rbs +6 -0
  165. data/sig/openai/models/beta/beta_responses_client_event.rbs +13 -0
  166. data/sig/openai/models/beta/beta_responses_server_event.rbs +1946 -54
  167. data/sig/openai/models/beta/response_compact_params.rbs +6 -0
  168. data/sig/openai/models/beta/response_create_params.rbs +6 -0
  169. data/sig/openai/models/responses/response_compact_params.rbs +6 -0
  170. data/sig/openai/models/responses/responses_client_event.rbs +7 -0
  171. data/sig/openai/models/responses/responses_server_event.rbs +1786 -53
  172. data/sig/openai/models/responses_model.rbs +6 -0
  173. data/sig/openai/net_http_client.rbs +34 -0
  174. data/sig/openai/providers.rbs +6 -0
  175. metadata +33 -4
  176. data/lib/openai/internal/transport/pooled_net_requester.rb +0 -210
  177. data/rbi/openai/internal/transport/pooled_net_requester.rbi +0 -82
  178. data/sig/openai/internal/transport/pooled_net_requester.rbs +0 -48
data/lib/openai.rb CHANGED
@@ -18,9 +18,12 @@ require "time"
18
18
  require "uri"
19
19
  # We already ship the preferred sorbet manifests in the package itself.
20
20
  # `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
21
+ # Thor removes the selected subcommand from `ARGV` before loading an application,
22
+ # so the DSL loader is the reliable fallback for detecting `tapioca dsl`.
23
+ tapioca_dsl = ARGV.any?(/dsl/) || caller.any?(%r{tapioca[\\/]loaders[\\/]dsl})
21
24
  if Object.const_defined?(:Tapioca) &&
22
25
  caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
23
- ARGV.none?(/dsl/)
26
+ !tapioca_dsl
24
27
  return
25
28
  end
26
29
 
@@ -53,11 +56,13 @@ require_relative "openai/internal"
53
56
  require_relative "openai/request_options"
54
57
  require_relative "openai/file_part"
55
58
  require_relative "openai/errors"
59
+ require_relative "openai/http_client"
60
+ require_relative "openai/net_http_client"
56
61
  require_relative "openai/provider"
57
62
  require_relative "openai/internal/provider"
63
+ require_relative "openai/providers/azure"
58
64
  require_relative "openai/providers/bedrock"
59
65
  require_relative "openai/internal/transport/base_client"
60
- require_relative "openai/internal/transport/pooled_net_requester"
61
66
  require_relative "openai/client"
62
67
  require_relative "openai/internal/stream"
63
68
  require_relative "openai/internal/conversation_cursor_page"
@@ -77,6 +82,59 @@ require_relative "openai/structured_output"
77
82
  require_relative "openai/models/beta/beta_response_custom_tool_call"
78
83
  require_relative "openai/models/beta/beta_response_custom_tool_call_output"
79
84
  require_relative "openai/models/beta/beta_response_function_tool_call"
85
+ require_relative "openai/models/beta/beta_response_custom_tool_call_input_done_event"
86
+ require_relative "openai/models/beta/beta_response_custom_tool_call_input_delta_event"
87
+ require_relative "openai/models/beta/beta_response_queued_event"
88
+ require_relative "openai/models/beta/beta_response_output_text_annotation_added_event"
89
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_in_progress_event"
90
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_failed_event"
91
+ require_relative "openai/models/beta/beta_response_mcp_list_tools_completed_event"
92
+ require_relative "openai/models/beta/beta_response_mcp_call_in_progress_event"
93
+ require_relative "openai/models/beta/beta_response_mcp_call_failed_event"
94
+ require_relative "openai/models/beta/beta_response_mcp_call_completed_event"
95
+ require_relative "openai/models/beta/beta_response_mcp_call_arguments_done_event"
96
+ require_relative "openai/models/beta/beta_response_mcp_call_arguments_delta_event"
97
+ require_relative "openai/models/beta/beta_response_image_gen_call_partial_image_event"
98
+ require_relative "openai/models/beta/beta_response_image_gen_call_in_progress_event"
99
+ require_relative "openai/models/beta/beta_response_image_gen_call_generating_event"
100
+ require_relative "openai/models/beta/beta_response_image_gen_call_completed_event"
101
+ require_relative "openai/models/beta/beta_response_web_search_call_searching_event"
102
+ require_relative "openai/models/beta/beta_response_web_search_call_in_progress_event"
103
+ require_relative "openai/models/beta/beta_response_web_search_call_completed_event"
104
+ require_relative "openai/models/beta/beta_response_text_done_event"
105
+ require_relative "openai/models/beta/beta_response_text_delta_event"
106
+ require_relative "openai/models/beta/beta_response_refusal_done_event"
107
+ require_relative "openai/models/beta/beta_response_refusal_delta_event"
108
+ require_relative "openai/models/beta/beta_response_reasoning_text_done_event"
109
+ require_relative "openai/models/beta/beta_response_reasoning_text_delta_event"
110
+ require_relative "openai/models/beta/beta_response_reasoning_summary_text_done_event"
111
+ require_relative "openai/models/beta/beta_response_reasoning_summary_text_delta_event"
112
+ require_relative "openai/models/beta/beta_response_reasoning_summary_part_done_event"
113
+ require_relative "openai/models/beta/beta_response_reasoning_summary_part_added_event"
114
+ require_relative "openai/models/beta/beta_response_output_item_done_event"
115
+ require_relative "openai/models/beta/beta_response_output_item_added_event"
116
+ require_relative "openai/models/beta/beta_response_incomplete_event"
117
+ require_relative "openai/models/beta/beta_response_failed_event"
118
+ require_relative "openai/models/beta/beta_response_in_progress_event"
119
+ require_relative "openai/models/beta/beta_response_function_call_arguments_done_event"
120
+ require_relative "openai/models/beta/beta_response_function_call_arguments_delta_event"
121
+ require_relative "openai/models/beta/beta_response_file_search_call_searching_event"
122
+ require_relative "openai/models/beta/beta_response_file_search_call_in_progress_event"
123
+ require_relative "openai/models/beta/beta_response_file_search_call_completed_event"
124
+ require_relative "openai/models/beta/beta_response_error_event"
125
+ require_relative "openai/models/beta/beta_response_created_event"
126
+ require_relative "openai/models/beta/beta_response_content_part_done_event"
127
+ require_relative "openai/models/beta/beta_response_content_part_added_event"
128
+ require_relative "openai/models/beta/beta_response_completed_event"
129
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_interpreting_event"
130
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_in_progress_event"
131
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_completed_event"
132
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_code_done_event"
133
+ require_relative "openai/models/beta/beta_response_code_interpreter_call_code_delta_event"
134
+ require_relative "openai/models/beta/beta_response_audio_transcript_done_event"
135
+ require_relative "openai/models/beta/beta_response_audio_transcript_delta_event"
136
+ require_relative "openai/models/beta/beta_response_audio_done_event"
137
+ require_relative "openai/models/beta/beta_response_audio_delta_event"
80
138
  require_relative "openai/models/reasoning_effort"
81
139
  require_relative "openai/models/chat/chat_completion_message"
82
140
  require_relative "openai/models/responses/response_input_file"
@@ -92,6 +150,59 @@ require_relative "openai/models/realtime/realtime_session_create_request"
92
150
  require_relative "openai/models/responses/response_custom_tool_call"
93
151
  require_relative "openai/models/responses/response_custom_tool_call_output"
94
152
  require_relative "openai/models/responses/response_function_tool_call"
153
+ require_relative "openai/models/responses/response_custom_tool_call_input_done_event"
154
+ require_relative "openai/models/responses/response_custom_tool_call_input_delta_event"
155
+ require_relative "openai/models/responses/response_queued_event"
156
+ require_relative "openai/models/responses/response_output_text_annotation_added_event"
157
+ require_relative "openai/models/responses/response_mcp_list_tools_in_progress_event"
158
+ require_relative "openai/models/responses/response_mcp_list_tools_failed_event"
159
+ require_relative "openai/models/responses/response_mcp_list_tools_completed_event"
160
+ require_relative "openai/models/responses/response_mcp_call_in_progress_event"
161
+ require_relative "openai/models/responses/response_mcp_call_failed_event"
162
+ require_relative "openai/models/responses/response_mcp_call_completed_event"
163
+ require_relative "openai/models/responses/response_mcp_call_arguments_done_event"
164
+ require_relative "openai/models/responses/response_mcp_call_arguments_delta_event"
165
+ require_relative "openai/models/responses/response_image_gen_call_partial_image_event"
166
+ require_relative "openai/models/responses/response_image_gen_call_in_progress_event"
167
+ require_relative "openai/models/responses/response_image_gen_call_generating_event"
168
+ require_relative "openai/models/responses/response_image_gen_call_completed_event"
169
+ require_relative "openai/models/responses/response_web_search_call_searching_event"
170
+ require_relative "openai/models/responses/response_web_search_call_in_progress_event"
171
+ require_relative "openai/models/responses/response_web_search_call_completed_event"
172
+ require_relative "openai/models/responses/response_text_done_event"
173
+ require_relative "openai/models/responses/response_text_delta_event"
174
+ require_relative "openai/models/responses/response_refusal_done_event"
175
+ require_relative "openai/models/responses/response_refusal_delta_event"
176
+ require_relative "openai/models/responses/response_reasoning_text_done_event"
177
+ require_relative "openai/models/responses/response_reasoning_text_delta_event"
178
+ require_relative "openai/models/responses/response_reasoning_summary_text_done_event"
179
+ require_relative "openai/models/responses/response_reasoning_summary_text_delta_event"
180
+ require_relative "openai/models/responses/response_reasoning_summary_part_done_event"
181
+ require_relative "openai/models/responses/response_reasoning_summary_part_added_event"
182
+ require_relative "openai/models/responses/response_output_item_done_event"
183
+ require_relative "openai/models/responses/response_output_item_added_event"
184
+ require_relative "openai/models/responses/response_incomplete_event"
185
+ require_relative "openai/models/responses/response_failed_event"
186
+ require_relative "openai/models/responses/response_in_progress_event"
187
+ require_relative "openai/models/responses/response_function_call_arguments_done_event"
188
+ require_relative "openai/models/responses/response_function_call_arguments_delta_event"
189
+ require_relative "openai/models/responses/response_file_search_call_searching_event"
190
+ require_relative "openai/models/responses/response_file_search_call_in_progress_event"
191
+ require_relative "openai/models/responses/response_file_search_call_completed_event"
192
+ require_relative "openai/models/responses/response_error_event"
193
+ require_relative "openai/models/responses/response_created_event"
194
+ require_relative "openai/models/responses/response_content_part_done_event"
195
+ require_relative "openai/models/responses/response_content_part_added_event"
196
+ require_relative "openai/models/responses/response_completed_event"
197
+ require_relative "openai/models/responses/response_code_interpreter_call_interpreting_event"
198
+ require_relative "openai/models/responses/response_code_interpreter_call_in_progress_event"
199
+ require_relative "openai/models/responses/response_code_interpreter_call_completed_event"
200
+ require_relative "openai/models/responses/response_code_interpreter_call_code_done_event"
201
+ require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event"
202
+ require_relative "openai/models/responses/response_audio_transcript_done_event"
203
+ require_relative "openai/models/responses/response_audio_transcript_delta_event"
204
+ require_relative "openai/models/responses/response_audio_done_event"
205
+ require_relative "openai/models/responses/response_audio_delta_event"
95
206
  require_relative "openai/models/admin/organization/admin_api_key_create_params"
96
207
  require_relative "openai/models/admin/organization/admin_api_key_create_response"
97
208
  require_relative "openai/models/admin/organization/admin_api_key_delete_params"
@@ -357,43 +468,21 @@ require_relative "openai/models/beta/beta_namespace_tool"
357
468
  require_relative "openai/models/beta/beta_response"
358
469
  require_relative "openai/models/beta/beta_response_apply_patch_tool_call"
359
470
  require_relative "openai/models/beta/beta_response_apply_patch_tool_call_output"
360
- require_relative "openai/models/beta/beta_response_audio_delta_event"
361
- require_relative "openai/models/beta/beta_response_audio_done_event"
362
- require_relative "openai/models/beta/beta_response_audio_transcript_delta_event"
363
- require_relative "openai/models/beta/beta_response_audio_transcript_done_event"
364
- require_relative "openai/models/beta/beta_response_code_interpreter_call_code_delta_event"
365
- require_relative "openai/models/beta/beta_response_code_interpreter_call_code_done_event"
366
- require_relative "openai/models/beta/beta_response_code_interpreter_call_completed_event"
367
- require_relative "openai/models/beta/beta_response_code_interpreter_call_in_progress_event"
368
- require_relative "openai/models/beta/beta_response_code_interpreter_call_interpreting_event"
369
471
  require_relative "openai/models/beta/beta_response_code_interpreter_tool_call"
370
472
  require_relative "openai/models/beta/beta_response_compaction_item"
371
473
  require_relative "openai/models/beta/beta_response_compaction_item_param"
372
- require_relative "openai/models/beta/beta_response_completed_event"
373
474
  require_relative "openai/models/beta/beta_response_computer_tool_call"
374
475
  require_relative "openai/models/beta/beta_response_computer_tool_call_output_item"
375
476
  require_relative "openai/models/beta/beta_response_computer_tool_call_output_screenshot"
376
477
  require_relative "openai/models/beta/beta_response_container_reference"
377
478
  require_relative "openai/models/beta/beta_response_content"
378
- require_relative "openai/models/beta/beta_response_content_part_added_event"
379
- require_relative "openai/models/beta/beta_response_content_part_done_event"
380
479
  require_relative "openai/models/beta/beta_response_conversation_param"
381
- require_relative "openai/models/beta/beta_response_created_event"
382
- require_relative "openai/models/beta/beta_response_custom_tool_call_input_delta_event"
383
- require_relative "openai/models/beta/beta_response_custom_tool_call_input_done_event"
384
480
  require_relative "openai/models/beta/beta_response_custom_tool_call_item"
385
481
  require_relative "openai/models/beta/beta_response_custom_tool_call_output_item"
386
482
  require_relative "openai/models/beta/beta_response_error"
387
- require_relative "openai/models/beta/beta_response_error_event"
388
- require_relative "openai/models/beta/beta_response_failed_event"
389
- require_relative "openai/models/beta/beta_response_file_search_call_completed_event"
390
- require_relative "openai/models/beta/beta_response_file_search_call_in_progress_event"
391
- require_relative "openai/models/beta/beta_response_file_search_call_searching_event"
392
483
  require_relative "openai/models/beta/beta_response_file_search_tool_call"
393
484
  require_relative "openai/models/beta/beta_response_format_text_config"
394
485
  require_relative "openai/models/beta/beta_response_format_text_json_schema_config"
395
- require_relative "openai/models/beta/beta_response_function_call_arguments_delta_event"
396
- require_relative "openai/models/beta/beta_response_function_call_arguments_done_event"
397
486
  require_relative "openai/models/beta/beta_response_function_call_output_item"
398
487
  require_relative "openai/models/beta/beta_response_function_call_output_item_list"
399
488
  require_relative "openai/models/beta/beta_response_function_shell_call_output_content"
@@ -402,16 +491,10 @@ require_relative "openai/models/beta/beta_response_function_shell_tool_call_outp
402
491
  require_relative "openai/models/beta/beta_response_function_tool_call_item"
403
492
  require_relative "openai/models/beta/beta_response_function_tool_call_output_item"
404
493
  require_relative "openai/models/beta/beta_response_function_web_search"
405
- require_relative "openai/models/beta/beta_response_image_gen_call_completed_event"
406
- require_relative "openai/models/beta/beta_response_image_gen_call_generating_event"
407
- require_relative "openai/models/beta/beta_response_image_gen_call_in_progress_event"
408
- require_relative "openai/models/beta/beta_response_image_gen_call_partial_image_event"
409
494
  require_relative "openai/models/beta/beta_response_includable"
410
- require_relative "openai/models/beta/beta_response_incomplete_event"
411
495
  require_relative "openai/models/beta/beta_response_inject_created_event"
412
496
  require_relative "openai/models/beta/beta_response_inject_event"
413
497
  require_relative "openai/models/beta/beta_response_inject_failed_event"
414
- require_relative "openai/models/beta/beta_response_in_progress_event"
415
498
  require_relative "openai/models/beta/beta_response_input"
416
499
  require_relative "openai/models/beta/beta_response_input_audio"
417
500
  require_relative "openai/models/beta/beta_response_input_content"
@@ -426,47 +509,22 @@ require_relative "openai/models/beta/beta_response_input_text"
426
509
  require_relative "openai/models/beta/beta_response_input_text_content"
427
510
  require_relative "openai/models/beta/beta_response_item"
428
511
  require_relative "openai/models/beta/beta_response_local_environment"
429
- require_relative "openai/models/beta/beta_response_mcp_call_arguments_delta_event"
430
- require_relative "openai/models/beta/beta_response_mcp_call_arguments_done_event"
431
- require_relative "openai/models/beta/beta_response_mcp_call_completed_event"
432
- require_relative "openai/models/beta/beta_response_mcp_call_failed_event"
433
- require_relative "openai/models/beta/beta_response_mcp_call_in_progress_event"
434
- require_relative "openai/models/beta/beta_response_mcp_list_tools_completed_event"
435
- require_relative "openai/models/beta/beta_response_mcp_list_tools_failed_event"
436
- require_relative "openai/models/beta/beta_response_mcp_list_tools_in_progress_event"
437
512
  require_relative "openai/models/beta/beta_response_output_audio"
438
513
  require_relative "openai/models/beta/beta_response_output_item"
439
- require_relative "openai/models/beta/beta_response_output_item_added_event"
440
- require_relative "openai/models/beta/beta_response_output_item_done_event"
441
514
  require_relative "openai/models/beta/beta_response_output_message"
442
515
  require_relative "openai/models/beta/beta_response_output_refusal"
443
516
  require_relative "openai/models/beta/beta_response_output_text"
444
- require_relative "openai/models/beta/beta_response_output_text_annotation_added_event"
445
517
  require_relative "openai/models/beta/beta_response_prompt"
446
- require_relative "openai/models/beta/beta_response_queued_event"
447
518
  require_relative "openai/models/beta/beta_response_reasoning_item"
448
- require_relative "openai/models/beta/beta_response_reasoning_summary_part_added_event"
449
- require_relative "openai/models/beta/beta_response_reasoning_summary_part_done_event"
450
- require_relative "openai/models/beta/beta_response_reasoning_summary_text_delta_event"
451
- require_relative "openai/models/beta/beta_response_reasoning_summary_text_done_event"
452
- require_relative "openai/models/beta/beta_response_reasoning_text_delta_event"
453
- require_relative "openai/models/beta/beta_response_reasoning_text_done_event"
454
- require_relative "openai/models/beta/beta_response_refusal_delta_event"
455
- require_relative "openai/models/beta/beta_response_refusal_done_event"
456
519
  require_relative "openai/models/beta/beta_responses_client_event"
457
520
  require_relative "openai/models/beta/beta_responses_server_event"
458
521
  require_relative "openai/models/beta/beta_response_status"
459
522
  require_relative "openai/models/beta/beta_response_stream_event"
460
523
  require_relative "openai/models/beta/beta_response_text_config"
461
- require_relative "openai/models/beta/beta_response_text_delta_event"
462
- require_relative "openai/models/beta/beta_response_text_done_event"
463
524
  require_relative "openai/models/beta/beta_response_tool_search_call"
464
525
  require_relative "openai/models/beta/beta_response_tool_search_output_item"
465
526
  require_relative "openai/models/beta/beta_response_tool_search_output_item_param"
466
527
  require_relative "openai/models/beta/beta_response_usage"
467
- require_relative "openai/models/beta/beta_response_web_search_call_completed_event"
468
- require_relative "openai/models/beta/beta_response_web_search_call_in_progress_event"
469
- require_relative "openai/models/beta/beta_response_web_search_call_searching_event"
470
528
  require_relative "openai/models/beta/beta_skill_reference"
471
529
  require_relative "openai/models/beta/beta_tool"
472
530
  require_relative "openai/models/beta/beta_tool_choice_allowed"
@@ -953,47 +1011,25 @@ require_relative "openai/models/responses/namespace_tool"
953
1011
  require_relative "openai/models/responses/response"
954
1012
  require_relative "openai/models/responses/response_apply_patch_tool_call"
955
1013
  require_relative "openai/models/responses/response_apply_patch_tool_call_output"
956
- require_relative "openai/models/responses/response_audio_delta_event"
957
- require_relative "openai/models/responses/response_audio_done_event"
958
- require_relative "openai/models/responses/response_audio_transcript_delta_event"
959
- require_relative "openai/models/responses/response_audio_transcript_done_event"
960
1014
  require_relative "openai/models/responses/response_cancel_params"
961
- require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event"
962
- require_relative "openai/models/responses/response_code_interpreter_call_code_done_event"
963
- require_relative "openai/models/responses/response_code_interpreter_call_completed_event"
964
- require_relative "openai/models/responses/response_code_interpreter_call_in_progress_event"
965
- require_relative "openai/models/responses/response_code_interpreter_call_interpreting_event"
966
1015
  require_relative "openai/models/responses/response_code_interpreter_tool_call"
967
1016
  require_relative "openai/models/responses/response_compaction_item"
968
1017
  require_relative "openai/models/responses/response_compaction_item_param"
969
1018
  require_relative "openai/models/responses/response_compact_params"
970
- require_relative "openai/models/responses/response_completed_event"
971
1019
  require_relative "openai/models/responses/response_computer_tool_call"
972
1020
  require_relative "openai/models/responses/response_computer_tool_call_output_item"
973
1021
  require_relative "openai/models/responses/response_computer_tool_call_output_screenshot"
974
1022
  require_relative "openai/models/responses/response_container_reference"
975
1023
  require_relative "openai/models/responses/response_content"
976
- require_relative "openai/models/responses/response_content_part_added_event"
977
- require_relative "openai/models/responses/response_content_part_done_event"
978
1024
  require_relative "openai/models/responses/response_conversation_param"
979
- require_relative "openai/models/responses/response_created_event"
980
1025
  require_relative "openai/models/responses/response_create_params"
981
- require_relative "openai/models/responses/response_custom_tool_call_input_delta_event"
982
- require_relative "openai/models/responses/response_custom_tool_call_input_done_event"
983
1026
  require_relative "openai/models/responses/response_custom_tool_call_item"
984
1027
  require_relative "openai/models/responses/response_custom_tool_call_output_item"
985
1028
  require_relative "openai/models/responses/response_delete_params"
986
1029
  require_relative "openai/models/responses/response_error"
987
- require_relative "openai/models/responses/response_error_event"
988
- require_relative "openai/models/responses/response_failed_event"
989
- require_relative "openai/models/responses/response_file_search_call_completed_event"
990
- require_relative "openai/models/responses/response_file_search_call_in_progress_event"
991
- require_relative "openai/models/responses/response_file_search_call_searching_event"
992
1030
  require_relative "openai/models/responses/response_file_search_tool_call"
993
1031
  require_relative "openai/models/responses/response_format_text_config"
994
1032
  require_relative "openai/models/responses/response_format_text_json_schema_config"
995
- require_relative "openai/models/responses/response_function_call_arguments_delta_event"
996
- require_relative "openai/models/responses/response_function_call_arguments_done_event"
997
1033
  require_relative "openai/models/responses/response_function_call_output_item"
998
1034
  require_relative "openai/models/responses/response_function_call_output_item_list"
999
1035
  require_relative "openai/models/responses/response_function_shell_call_output_content"
@@ -1002,13 +1038,7 @@ require_relative "openai/models/responses/response_function_shell_tool_call_outp
1002
1038
  require_relative "openai/models/responses/response_function_tool_call_item"
1003
1039
  require_relative "openai/models/responses/response_function_tool_call_output_item"
1004
1040
  require_relative "openai/models/responses/response_function_web_search"
1005
- require_relative "openai/models/responses/response_image_gen_call_completed_event"
1006
- require_relative "openai/models/responses/response_image_gen_call_generating_event"
1007
- require_relative "openai/models/responses/response_image_gen_call_in_progress_event"
1008
- require_relative "openai/models/responses/response_image_gen_call_partial_image_event"
1009
1041
  require_relative "openai/models/responses/response_includable"
1010
- require_relative "openai/models/responses/response_incomplete_event"
1011
- require_relative "openai/models/responses/response_in_progress_event"
1012
1042
  require_relative "openai/models/responses/response_input"
1013
1043
  require_relative "openai/models/responses/response_input_audio"
1014
1044
  require_relative "openai/models/responses/response_input_content"
@@ -1021,46 +1051,21 @@ require_relative "openai/models/responses/response_input_text_content"
1021
1051
  require_relative "openai/models/responses/response_item"
1022
1052
  require_relative "openai/models/responses/response_item_list"
1023
1053
  require_relative "openai/models/responses/response_local_environment"
1024
- require_relative "openai/models/responses/response_mcp_call_arguments_delta_event"
1025
- require_relative "openai/models/responses/response_mcp_call_arguments_done_event"
1026
- require_relative "openai/models/responses/response_mcp_call_completed_event"
1027
- require_relative "openai/models/responses/response_mcp_call_failed_event"
1028
- require_relative "openai/models/responses/response_mcp_call_in_progress_event"
1029
- require_relative "openai/models/responses/response_mcp_list_tools_completed_event"
1030
- require_relative "openai/models/responses/response_mcp_list_tools_failed_event"
1031
- require_relative "openai/models/responses/response_mcp_list_tools_in_progress_event"
1032
1054
  require_relative "openai/models/responses/response_output_audio"
1033
1055
  require_relative "openai/models/responses/response_output_item"
1034
- require_relative "openai/models/responses/response_output_item_added_event"
1035
- require_relative "openai/models/responses/response_output_item_done_event"
1036
1056
  require_relative "openai/models/responses/response_output_message"
1037
- require_relative "openai/models/responses/response_output_text_annotation_added_event"
1038
1057
  require_relative "openai/models/responses/response_prompt"
1039
- require_relative "openai/models/responses/response_queued_event"
1040
1058
  require_relative "openai/models/responses/response_reasoning_item"
1041
- require_relative "openai/models/responses/response_reasoning_summary_part_added_event"
1042
- require_relative "openai/models/responses/response_reasoning_summary_part_done_event"
1043
- require_relative "openai/models/responses/response_reasoning_summary_text_delta_event"
1044
- require_relative "openai/models/responses/response_reasoning_summary_text_done_event"
1045
- require_relative "openai/models/responses/response_reasoning_text_delta_event"
1046
- require_relative "openai/models/responses/response_reasoning_text_done_event"
1047
- require_relative "openai/models/responses/response_refusal_delta_event"
1048
- require_relative "openai/models/responses/response_refusal_done_event"
1049
1059
  require_relative "openai/models/responses/response_retrieve_params"
1050
1060
  require_relative "openai/models/responses/responses_client_event"
1051
1061
  require_relative "openai/models/responses/responses_server_event"
1052
1062
  require_relative "openai/models/responses/response_status"
1053
1063
  require_relative "openai/models/responses/response_stream_event"
1054
1064
  require_relative "openai/models/responses/response_text_config"
1055
- require_relative "openai/models/responses/response_text_delta_event"
1056
- require_relative "openai/models/responses/response_text_done_event"
1057
1065
  require_relative "openai/models/responses/response_tool_search_call"
1058
1066
  require_relative "openai/models/responses/response_tool_search_output_item"
1059
1067
  require_relative "openai/models/responses/response_tool_search_output_item_param"
1060
1068
  require_relative "openai/models/responses/response_usage"
1061
- require_relative "openai/models/responses/response_web_search_call_completed_event"
1062
- require_relative "openai/models/responses/response_web_search_call_in_progress_event"
1063
- require_relative "openai/models/responses/response_web_search_call_searching_event"
1064
1069
  require_relative "openai/models/responses/skill_reference"
1065
1070
  require_relative "openai/models/responses/tool"
1066
1071
  require_relative "openai/models/responses/tool_choice_allowed"
data/rbi/openai/auth.rbi CHANGED
@@ -35,17 +35,17 @@ module OpenAI
35
35
 
36
36
  sig do
37
37
  params(
38
- identity_provider_id: T.any(String, Symbol),
39
- service_account_id: T.any(String, Symbol),
40
38
  provider: SubjectTokenProvider,
39
+ identity_provider_id: T.nilable(T.any(String, Symbol)),
40
+ service_account_id: T.nilable(T.any(String, Symbol)),
41
41
  client_id: T.nilable(T.any(String, Symbol)),
42
42
  refresh_buffer_seconds: Integer
43
43
  ).void
44
44
  end
45
45
  def initialize(
46
- identity_provider_id:,
47
- service_account_id:,
48
46
  provider:,
47
+ identity_provider_id: ENV["IDENTITY_PROVIDER_ID"],
48
+ service_account_id: ENV["SERVICE_ACCOUNT_ID"],
49
49
  client_id: nil,
50
50
  refresh_buffer_seconds: 1200
51
51
  )
@@ -159,10 +159,15 @@ module OpenAI
159
159
  webhook_secret: T.nilable(String),
160
160
  provider: T.nilable(OpenAI::Provider),
161
161
  base_url: T.nilable(String),
162
+ default_headers: T.nilable(T::Hash[String, T.nilable(String)]),
162
163
  max_retries: Integer,
163
- timeout: Float,
164
+ timeout: T.nilable(Float),
164
165
  initial_retry_delay: Float,
165
- max_retry_delay: Float
166
+ max_retry_delay: Float,
167
+ http_client: T.untyped,
168
+ logger: T.untyped,
169
+ log_level: T.nilable(T.any(Symbol, String)),
170
+ on_retry: T.nilable(T.proc.params(event: OpenAI::RetryEvent).void)
166
171
  ).returns(T.attached_class)
167
172
  end
168
173
  def self.new(
@@ -181,11 +186,18 @@ module OpenAI
181
186
  # Override the default base URL for the API, e.g.,
182
187
  # `"https://api.example.com/v2/"`. Defaults to `ENV["OPENAI_BASE_URL"]`
183
188
  base_url: ENV["OPENAI_BASE_URL"],
189
+ # Extra headers to send with every request. Explicit values override
190
+ # `ENV["OPENAI_CUSTOM_HEADERS"]`.
191
+ default_headers: nil,
184
192
  # Max number of retries to attempt after a failed retryable request.
185
193
  max_retries: OpenAI::Client::DEFAULT_MAX_RETRIES,
186
194
  timeout: OpenAI::Client::DEFAULT_TIMEOUT_IN_SECONDS,
187
195
  initial_retry_delay: OpenAI::Client::DEFAULT_INITIAL_RETRY_DELAY,
188
- max_retry_delay: OpenAI::Client::DEFAULT_MAX_RETRY_DELAY
196
+ max_retry_delay: OpenAI::Client::DEFAULT_MAX_RETRY_DELAY,
197
+ http_client: nil,
198
+ logger: nil,
199
+ log_level: nil,
200
+ on_retry: nil
189
201
  )
190
202
  end
191
203
  end
@@ -48,6 +48,13 @@ module OpenAI
48
48
  sig { returns(T.nilable(String)) }
49
49
  attr_accessor :type
50
50
 
51
+ # The ID of the API request, returned via the `x-request-id` response
52
+ # header. This is nil when no HTTP response was received or the response
53
+ # did not include the header.
54
+ sig { returns(T.nilable(String)) }
55
+ def request_id
56
+ end
57
+
51
58
  # @api private
52
59
  sig do
53
60
  params(
@@ -142,6 +142,18 @@ module OpenAI
142
142
  end
143
143
 
144
144
  class ChatCompletionStream
145
+ sig { returns(Integer) }
146
+ def status
147
+ end
148
+
149
+ sig { returns(T::Hash[String, String]) }
150
+ def headers
151
+ end
152
+
153
+ sig { returns(OpenAI::ResponseMetadata) }
154
+ def last_response
155
+ end
156
+
145
157
  sig { returns(T.untyped) }
146
158
  def each
147
159
  end
@@ -0,0 +1,123 @@
1
+ # typed: strong
2
+
3
+ module OpenAI
4
+ class ResponseMetadata
5
+ sig { returns(Integer) }
6
+ attr_reader :status
7
+
8
+ sig { returns(T::Hash[String, String]) }
9
+ attr_reader :headers
10
+
11
+ sig { returns(T.nilable(String)) }
12
+ attr_reader :request_id
13
+
14
+ # @api private
15
+ sig do
16
+ params(status: Integer, headers: T::Hash[String, String]).returns(
17
+ T.attached_class
18
+ )
19
+ end
20
+ def self.new(status:, headers:)
21
+ end
22
+ end
23
+
24
+ class RetryEvent
25
+ sig { returns(Integer) }
26
+ attr_reader :attempt
27
+
28
+ sig { returns(Integer) }
29
+ attr_reader :max_attempts
30
+
31
+ sig { returns(Float) }
32
+ attr_reader :delay
33
+
34
+ sig { returns(T.nilable(OpenAI::ResponseMetadata)) }
35
+ attr_reader :response
36
+
37
+ sig { returns(T.nilable(OpenAI::Errors::APIConnectionError)) }
38
+ attr_reader :error
39
+
40
+ sig do
41
+ params(
42
+ attempt: Integer,
43
+ max_attempts: Integer,
44
+ delay: Float,
45
+ response: T.nilable(OpenAI::ResponseMetadata),
46
+ error: T.nilable(OpenAI::Errors::APIConnectionError)
47
+ ).returns(T.attached_class)
48
+ end
49
+ def self.new(attempt:, max_attempts:, delay:, response:, error:)
50
+ end
51
+
52
+ sig { returns(T.nilable(Integer)) }
53
+ def status
54
+ end
55
+
56
+ sig { returns(T.nilable(String)) }
57
+ def request_id
58
+ end
59
+ end
60
+
61
+ class HTTPClient
62
+ class Request
63
+ sig { returns(Symbol) }
64
+ attr_reader :method
65
+
66
+ sig { returns(URI::Generic) }
67
+ attr_reader :url
68
+
69
+ sig { returns(T::Hash[String, String]) }
70
+ attr_reader :headers
71
+
72
+ sig { returns(T.anything) }
73
+ attr_reader :body
74
+
75
+ sig { returns(T.nilable(Float)) }
76
+ attr_reader :timeout
77
+
78
+ sig do
79
+ params(
80
+ method: Symbol,
81
+ url: URI::Generic,
82
+ headers: T::Hash[String, String],
83
+ body: T.anything,
84
+ timeout: T.nilable(Float)
85
+ ).returns(T.attached_class)
86
+ end
87
+ def self.new(method:, url:, headers:, body:, timeout:)
88
+ end
89
+ end
90
+
91
+ class Response
92
+ sig { returns(Integer) }
93
+ attr_reader :status
94
+
95
+ sig { returns(T::Hash[String, String]) }
96
+ attr_reader :headers
97
+
98
+ sig { returns(T::Enumerable[String]) }
99
+ attr_reader :body
100
+
101
+ sig { returns(OpenAI::ResponseMetadata) }
102
+ attr_reader :metadata
103
+
104
+ sig do
105
+ params(
106
+ status: Integer,
107
+ headers: T::Hash[String, String],
108
+ body: T.any(String, T::Enumerable[String])
109
+ ).returns(T.attached_class)
110
+ end
111
+ def self.new(status:, headers:, body:)
112
+ end
113
+ end
114
+
115
+ sig do
116
+ params(request: OpenAI::HTTPClient::Request).returns(
117
+ OpenAI::HTTPClient::Response
118
+ )
119
+ end
120
+ def execute(request)
121
+ end
122
+ end
123
+ end