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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +98 -0
- data/README.md +341 -10
- data/SECURITY.md +6 -22
- data/azure.md +110 -0
- data/bedrock.md +132 -0
- data/examples/mtls_custom_http_client.rb +61 -0
- data/lib/openai/auth/workload_identity.rb +13 -2
- data/lib/openai/auth/workload_identity_auth.rb +2 -1
- data/lib/openai/client.rb +34 -14
- data/lib/openai/errors.rb +11 -1
- data/lib/openai/helpers/streaming/chat_completion_stream.rb +3 -3
- data/lib/openai/helpers/streaming/response_stream.rb +5 -6
- data/lib/openai/helpers/structured_output/base_model.rb +20 -19
- data/lib/openai/helpers/structured_output/json_schema_converter.rb +12 -5
- data/lib/openai/http_client.rb +189 -0
- data/lib/openai/internal/conversation_cursor_page.rb +5 -6
- data/lib/openai/internal/cursor_page.rb +3 -3
- data/lib/openai/internal/logging.rb +419 -0
- data/lib/openai/internal/next_cursor_page.rb +5 -6
- data/lib/openai/internal/page.rb +2 -2
- data/lib/openai/internal/provider.rb +7 -1
- data/lib/openai/internal/read_io_adapter.rb +161 -0
- data/lib/openai/internal/stream.rb +2 -2
- data/lib/openai/internal/transport/base_client.rb +216 -57
- data/lib/openai/internal/type/array_of.rb +6 -4
- data/lib/openai/internal/type/base_model.rb +39 -1
- data/lib/openai/internal/type/base_page.rb +19 -2
- data/lib/openai/internal/type/base_stream.rb +40 -8
- data/lib/openai/internal/type/hash_of.rb +3 -3
- data/lib/openai/internal/util.rb +59 -112
- data/lib/openai/models/admin/organization/audit_log_list_params.rb +3 -1
- data/lib/openai/models/admin/organization/audit_log_list_response.rb +33 -11
- data/lib/openai/models/admin/organization/groups/role_list_response.rb +5 -1
- data/lib/openai/models/admin/organization/groups/role_retrieve_response.rb +5 -1
- data/lib/openai/models/admin/organization/projects/groups/role_list_response.rb +6 -1
- data/lib/openai/models/admin/organization/projects/groups/role_retrieve_response.rb +6 -1
- data/lib/openai/models/admin/organization/projects/service_account_create_response.rb +3 -1
- data/lib/openai/models/admin/organization/projects/users/role_list_response.rb +6 -1
- data/lib/openai/models/admin/organization/projects/users/role_retrieve_response.rb +6 -1
- data/lib/openai/models/admin/organization/users/role_list_response.rb +5 -1
- data/lib/openai/models/admin/organization/users/role_retrieve_response.rb +5 -1
- data/lib/openai/models/all_models.rb +3 -0
- data/lib/openai/models/audio/transcription_create_params.rb +7 -1
- data/lib/openai/models/audio/translation_create_params.rb +7 -1
- data/lib/openai/models/beta/beta_response.rb +9 -0
- data/lib/openai/models/beta/beta_response_stream_event.rb +1 -1
- data/lib/openai/models/beta/beta_responses_client_event.rb +28 -3
- data/lib/openai/models/beta/beta_responses_server_event.rb +1037 -61
- data/lib/openai/models/beta/response_compact_params.rb +9 -0
- data/lib/openai/models/beta/response_create_params.rb +9 -0
- data/lib/openai/models/containers/file_create_params.rb +4 -0
- data/lib/openai/models/content_provenance_check_create_params.rb +4 -0
- data/lib/openai/models/file_create_params.rb +4 -0
- data/lib/openai/models/image_create_variation_params.rb +4 -0
- data/lib/openai/models/image_edit_params.rb +8 -0
- data/lib/openai/models/responses/response_compact_params.rb +9 -0
- data/lib/openai/models/responses/response_stream_event.rb +1 -1
- data/lib/openai/models/responses/responses_client_event.rb +13 -1
- data/lib/openai/models/responses/responses_server_event.rb +1027 -54
- data/lib/openai/models/responses_model.rb +3 -0
- data/lib/openai/models/skill_create_params.rb +4 -0
- data/lib/openai/models/skills/version_create_params.rb +4 -0
- data/lib/openai/models/uploads/part_create_params.rb +4 -0
- data/lib/openai/models/vector_store_search_response.rb +3 -1
- data/lib/openai/models/video_create_character_params.rb +4 -0
- data/lib/openai/models/video_create_params.rb +4 -0
- data/lib/openai/models/video_edit_params.rb +4 -0
- data/lib/openai/models/video_extend_params.rb +4 -0
- data/lib/openai/models.rb +9 -1
- data/lib/openai/net_http_client.rb +295 -0
- data/lib/openai/providers/azure.rb +216 -0
- data/lib/openai/providers/bedrock.rb +3 -1
- data/lib/openai/resources/admin/organization/projects/groups/roles.rb +1 -1
- data/lib/openai/resources/admin/organization/projects/groups.rb +1 -1
- data/lib/openai/resources/admin/organization/projects/users/roles.rb +1 -1
- data/lib/openai/resources/admin/organization/projects.rb +4 -2
- data/lib/openai/resources/audio/transcriptions.rb +8 -0
- data/lib/openai/resources/audio/translations.rb +4 -0
- data/lib/openai/resources/beta/responses.rb +1 -1
- data/lib/openai/resources/beta/threads/runs/steps.rb +2 -2
- data/lib/openai/resources/containers/files.rb +4 -0
- data/lib/openai/resources/content_provenance_checks.rb +4 -0
- data/lib/openai/resources/conversations/items.rb +1 -1
- data/lib/openai/resources/evals/runs/output_items.rb +1 -1
- data/lib/openai/resources/files.rb +4 -0
- data/lib/openai/resources/images.rb +12 -0
- data/lib/openai/resources/responses.rb +3 -2
- data/lib/openai/resources/skills/versions.rb +4 -0
- data/lib/openai/resources/skills.rb +4 -0
- data/lib/openai/resources/uploads/parts.rb +4 -0
- data/lib/openai/resources/vector_stores/file_batches.rb +1 -1
- data/lib/openai/resources/videos.rb +38 -0
- data/lib/openai/resources/webhooks.rb +18 -6
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +113 -108
- data/rbi/openai/auth.rbi +4 -4
- data/rbi/openai/client.rbi +15 -3
- data/rbi/openai/errors.rbi +7 -0
- data/rbi/openai/helpers/streaming/events.rbi +12 -0
- data/rbi/openai/http_client.rbi +123 -0
- data/rbi/openai/internal/logging.rbi +192 -0
- data/rbi/openai/internal/provider.rbi +3 -0
- data/rbi/openai/internal/read_io_adapter.rbi +52 -0
- data/rbi/openai/internal/transport/base_client.rbi +80 -10
- data/rbi/openai/internal/type/base_model.rbi +24 -1
- data/rbi/openai/internal/type/base_page.rbi +13 -2
- data/rbi/openai/internal/type/base_stream.rbi +16 -5
- data/rbi/openai/internal/util.rbi +26 -42
- data/rbi/openai/models/admin/organization/audit_log_list_params.rbi +5 -0
- data/rbi/openai/models/admin/organization/audit_log_list_response.rbi +5 -0
- data/rbi/openai/models/all_models.rbi +15 -0
- data/rbi/openai/models/audio/transcription_create_params.rbi +14 -2
- data/rbi/openai/models/audio/translation_create_params.rbi +14 -2
- data/rbi/openai/models/beta/beta_response.rbi +15 -0
- data/rbi/openai/models/beta/beta_response_stream_event.rbi +1 -1
- data/rbi/openai/models/beta/beta_responses_client_event.rbi +37 -1
- data/rbi/openai/models/beta/beta_responses_server_event.rbi +3791 -54
- data/rbi/openai/models/beta/response_compact_params.rbi +15 -0
- data/rbi/openai/models/beta/response_create_params.rbi +15 -0
- data/rbi/openai/models/containers/file_create_params.rbi +8 -0
- data/rbi/openai/models/content_provenance_check_create_params.rbi +8 -0
- data/rbi/openai/models/file_create_params.rbi +8 -0
- data/rbi/openai/models/image_create_variation_params.rbi +8 -0
- data/rbi/openai/models/image_edit_params.rbi +16 -0
- data/rbi/openai/models/responses/response_compact_params.rbi +15 -0
- data/rbi/openai/models/responses/response_stream_event.rbi +1 -1
- data/rbi/openai/models/responses/responses_client_event.rbi +19 -0
- data/rbi/openai/models/responses/responses_server_event.rbi +3282 -53
- data/rbi/openai/models/responses_model.rbi +15 -0
- data/rbi/openai/models/skill_create_params.rbi +8 -0
- data/rbi/openai/models/skills/version_create_params.rbi +8 -0
- data/rbi/openai/models/uploads/part_create_params.rbi +8 -0
- data/rbi/openai/models/video_create_character_params.rbi +8 -0
- data/rbi/openai/models/video_create_params.rbi +8 -0
- data/rbi/openai/models/video_edit_params.rbi +8 -0
- data/rbi/openai/models/video_extend_params.rbi +8 -0
- data/rbi/openai/net_http_client.rbi +64 -0
- data/rbi/openai/providers.rbi +9 -0
- data/rbi/openai/resources/audio/transcriptions.rbi +14 -2
- data/rbi/openai/resources/audio/translations.rbi +7 -1
- data/rbi/openai/resources/containers/files.rbi +4 -0
- data/rbi/openai/resources/content_provenance_checks.rbi +4 -0
- data/rbi/openai/resources/files.rbi +4 -0
- data/rbi/openai/resources/images.rbi +20 -0
- data/rbi/openai/resources/skills/versions.rbi +4 -0
- data/rbi/openai/resources/skills.rbi +4 -0
- data/rbi/openai/resources/uploads/parts.rbi +4 -0
- data/rbi/openai/resources/videos.rbi +16 -0
- data/sig/openai/client.rbs +7 -2
- data/sig/openai/errors.rbs +5 -0
- data/sig/openai/http_client.rbs +76 -0
- data/sig/openai/internal/logging.rbs +88 -0
- data/sig/openai/internal/provider.rbs +3 -1
- data/sig/openai/internal/read_io_adapter.rbs +23 -0
- data/sig/openai/internal/transport/base_client.rbs +41 -6
- data/sig/openai/internal/type/base_model.rbs +13 -0
- data/sig/openai/internal/type/base_page.rbs +8 -1
- data/sig/openai/internal/type/base_stream.rbs +9 -3
- data/sig/openai/internal/util.rbs +12 -16
- data/sig/openai/models/admin/organization/audit_log_list_params.rbs +2 -0
- data/sig/openai/models/admin/organization/audit_log_list_response.rbs +2 -0
- data/sig/openai/models/all_models.rbs +6 -0
- data/sig/openai/models/beta/beta_response.rbs +6 -0
- data/sig/openai/models/beta/beta_responses_client_event.rbs +13 -0
- data/sig/openai/models/beta/beta_responses_server_event.rbs +1946 -54
- data/sig/openai/models/beta/response_compact_params.rbs +6 -0
- data/sig/openai/models/beta/response_create_params.rbs +6 -0
- data/sig/openai/models/responses/response_compact_params.rbs +6 -0
- data/sig/openai/models/responses/responses_client_event.rbs +7 -0
- data/sig/openai/models/responses/responses_server_event.rbs +1786 -53
- data/sig/openai/models/responses_model.rbs +6 -0
- data/sig/openai/net_http_client.rbs +34 -0
- data/sig/openai/providers.rbs +6 -0
- metadata +33 -4
- data/lib/openai/internal/transport/pooled_net_requester.rb +0 -210
- data/rbi/openai/internal/transport/pooled_net_requester.rbi +0 -82
- data/sig/openai/internal/transport/pooled_net_requester.rbs +0 -48
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Internal
|
|
5
|
+
module Logging
|
|
6
|
+
LOG_LEVELS = T.let(T.unsafe(nil), T::Hash[Symbol, Integer])
|
|
7
|
+
REDACTED_HEADERS = T.let(T.unsafe(nil), T::Array[String])
|
|
8
|
+
MAX_BODY_BYTES = T.let(T.unsafe(nil), Integer)
|
|
9
|
+
MAX_ARRAY_ITEMS = T.let(T.unsafe(nil), Integer)
|
|
10
|
+
OPAQUE_STRING_BYTES = T.let(T.unsafe(nil), Integer)
|
|
11
|
+
SENSITIVE_BODY_KEY = T.let(T.unsafe(nil), Regexp)
|
|
12
|
+
SENSITIVE_QUERY_KEY = T.let(T.unsafe(nil), Regexp)
|
|
13
|
+
URL_HEADER_KEY = T.let(T.unsafe(nil), Regexp)
|
|
14
|
+
|
|
15
|
+
class Context
|
|
16
|
+
sig do
|
|
17
|
+
params(
|
|
18
|
+
logger: T.untyped,
|
|
19
|
+
log_level: Symbol,
|
|
20
|
+
on_retry: T.nilable(T.proc.params(event: OpenAI::RetryEvent).void),
|
|
21
|
+
method: Symbol,
|
|
22
|
+
url: URI::Generic
|
|
23
|
+
).returns(T.attached_class)
|
|
24
|
+
end
|
|
25
|
+
def self.new(logger:, log_level:, on_retry:, method:, url:)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
sig do
|
|
29
|
+
params(
|
|
30
|
+
request: OpenAI::HTTPClient::Request,
|
|
31
|
+
redirect_count: Integer
|
|
32
|
+
).void
|
|
33
|
+
end
|
|
34
|
+
def request_started(request, redirect_count:)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
sig do
|
|
38
|
+
params(response: OpenAI::HTTPClient::Response).returns(
|
|
39
|
+
OpenAI::HTTPClient::Response
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
def response_received(response)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
sig { params(error: OpenAI::Errors::APIConnectionError).void }
|
|
46
|
+
def attempt_failed(error)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
sig do
|
|
50
|
+
params(
|
|
51
|
+
cause: T.any(Integer, OpenAI::Errors::APIConnectionError),
|
|
52
|
+
delay: Float,
|
|
53
|
+
response: T.nilable(OpenAI::ResponseMetadata),
|
|
54
|
+
retry_count: Integer,
|
|
55
|
+
max_retries: Integer
|
|
56
|
+
).void
|
|
57
|
+
end
|
|
58
|
+
def retry_scheduled(
|
|
59
|
+
cause,
|
|
60
|
+
delay:,
|
|
61
|
+
response:,
|
|
62
|
+
retry_count:,
|
|
63
|
+
max_retries:
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
sig { params(response: OpenAI::HTTPClient::Response).void }
|
|
68
|
+
def completed(response)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
sig do
|
|
72
|
+
params(
|
|
73
|
+
stream: T.untyped,
|
|
74
|
+
response: OpenAI::HTTPClient::Response
|
|
75
|
+
).returns(T.untyped)
|
|
76
|
+
end
|
|
77
|
+
def observe_stream(stream, response:)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
sig { params(error: StandardError).void }
|
|
81
|
+
def request_failed(error)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
sig do
|
|
85
|
+
params(
|
|
86
|
+
body: String,
|
|
87
|
+
headers: T::Hash[String, String],
|
|
88
|
+
complete: T::Boolean,
|
|
89
|
+
total_bytes: Integer,
|
|
90
|
+
attempt: Integer
|
|
91
|
+
).void
|
|
92
|
+
end
|
|
93
|
+
def response_body(body, headers:, complete:, total_bytes:, attempt:)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class ObservedBody
|
|
98
|
+
include Enumerable
|
|
99
|
+
|
|
100
|
+
Elem = type_member { { fixed: String } }
|
|
101
|
+
|
|
102
|
+
sig do
|
|
103
|
+
params(
|
|
104
|
+
body: T::Enumerable[String],
|
|
105
|
+
headers: T::Hash[String, String],
|
|
106
|
+
context: OpenAI::Internal::Logging::Context,
|
|
107
|
+
attempt: Integer
|
|
108
|
+
).returns(T.attached_class)
|
|
109
|
+
end
|
|
110
|
+
def self.new(body:, headers:, context:, attempt:)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
sig { params(blk: T.untyped).returns(T.untyped) }
|
|
114
|
+
def each(&blk)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
sig { void }
|
|
118
|
+
def close
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class << self
|
|
123
|
+
sig { params(value: T.any(Symbol, String)).returns(Symbol) }
|
|
124
|
+
def normalize_level(value)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
sig { params(logger: T.untyped).void }
|
|
128
|
+
def validate_logger!(logger)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
sig { returns(Logger) }
|
|
132
|
+
def default_logger
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
sig do
|
|
136
|
+
params(configured_level: Symbol, event_level: Symbol).returns(
|
|
137
|
+
T::Boolean
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
def enabled?(configured_level, event_level)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
sig { params(url: URI::Generic).returns(String) }
|
|
144
|
+
def safe_path(url)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
sig { params(url: URI::Generic).returns(String) }
|
|
148
|
+
def safe_url(url)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
sig { params(value: T.untyped).returns(String) }
|
|
152
|
+
def safe_field(value)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
sig { params(name: T.any(String, Symbol)).returns(T::Boolean) }
|
|
156
|
+
def sensitive_header?(name)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
sig { params(name: T.any(String, Symbol)).returns(T::Boolean) }
|
|
160
|
+
def credential_header?(name)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
sig { params(headers: T::Hash[String, String]).returns(String) }
|
|
164
|
+
def format_headers(headers)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
sig do
|
|
168
|
+
params(body: T.untyped, headers: T::Hash[String, String]).returns(
|
|
169
|
+
String
|
|
170
|
+
)
|
|
171
|
+
end
|
|
172
|
+
def format_body(body, headers:)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
sig { params(headers: T::Hash[String, String]).returns(T::Boolean) }
|
|
176
|
+
def capture_response_body?(headers)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
sig do
|
|
180
|
+
params(
|
|
181
|
+
body: String,
|
|
182
|
+
headers: T::Hash[String, String],
|
|
183
|
+
complete: T::Boolean,
|
|
184
|
+
total_bytes: Integer
|
|
185
|
+
).returns(String)
|
|
186
|
+
end
|
|
187
|
+
def format_observed_body(body, headers:, complete:, total_bytes:)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module OpenAI
|
|
4
|
+
module Internal
|
|
5
|
+
module Util
|
|
6
|
+
# @api private
|
|
7
|
+
#
|
|
8
|
+
# An adapter that satisfies the IO interface required by `::IO.copy_stream`
|
|
9
|
+
class ReadIOAdapter
|
|
10
|
+
# @api private
|
|
11
|
+
sig { returns(T.nilable(T::Boolean)) }
|
|
12
|
+
def close?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @api private
|
|
16
|
+
sig { void }
|
|
17
|
+
def close
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @api private
|
|
21
|
+
sig { params(max_len: T.nilable(Integer)).returns(T.nilable(String)) }
|
|
22
|
+
private def read_enum(max_len)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @api private
|
|
26
|
+
sig { params(max_len: Integer).returns(String) }
|
|
27
|
+
private def read_buffer(max_len)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @api private
|
|
31
|
+
sig do
|
|
32
|
+
params(
|
|
33
|
+
max_len: T.nilable(Integer),
|
|
34
|
+
out_string: T.nilable(String)
|
|
35
|
+
).returns(T.nilable(String))
|
|
36
|
+
end
|
|
37
|
+
def read(max_len = nil, out_string = nil)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @api private
|
|
41
|
+
sig do
|
|
42
|
+
params(
|
|
43
|
+
src: T.any(String, Pathname, StringIO, T::Enumerable[String]),
|
|
44
|
+
blk: T.proc.params(arg0: String).void
|
|
45
|
+
).returns(T.attached_class)
|
|
46
|
+
end
|
|
47
|
+
def self.new(src, &blk)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -75,7 +75,7 @@ module OpenAI
|
|
|
75
75
|
headers: T::Hash[String, String],
|
|
76
76
|
body: T.anything,
|
|
77
77
|
max_retries: Integer,
|
|
78
|
-
timeout: Float
|
|
78
|
+
timeout: T.nilable(Float)
|
|
79
79
|
}
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -103,6 +103,11 @@ module OpenAI
|
|
|
103
103
|
def should_retry?(status, headers:)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
+
# @api private
|
|
107
|
+
sig { params(body: T.untyped).returns(T::Boolean) }
|
|
108
|
+
def request_body_replayable?(body)
|
|
109
|
+
end
|
|
110
|
+
|
|
106
111
|
# @api private
|
|
107
112
|
sig do
|
|
108
113
|
params(
|
|
@@ -128,7 +133,7 @@ module OpenAI
|
|
|
128
133
|
sig { returns(URI::Generic) }
|
|
129
134
|
attr_reader :base_url
|
|
130
135
|
|
|
131
|
-
sig { returns(Float) }
|
|
136
|
+
sig { returns(T.nilable(Float)) }
|
|
132
137
|
attr_reader :timeout
|
|
133
138
|
|
|
134
139
|
sig { returns(Integer) }
|
|
@@ -146,15 +151,24 @@ module OpenAI
|
|
|
146
151
|
sig { returns(T.nilable(String)) }
|
|
147
152
|
attr_reader :idempotency_header
|
|
148
153
|
|
|
154
|
+
sig { returns(T.untyped) }
|
|
155
|
+
attr_reader :logger
|
|
156
|
+
|
|
157
|
+
sig { returns(Symbol) }
|
|
158
|
+
attr_reader :log_level
|
|
159
|
+
|
|
160
|
+
sig { returns(T.nilable(T.proc.params(event: OpenAI::RetryEvent).void)) }
|
|
161
|
+
attr_reader :on_retry
|
|
162
|
+
|
|
149
163
|
# @api private
|
|
150
|
-
sig { returns(
|
|
164
|
+
sig { returns(T.untyped) }
|
|
151
165
|
attr_reader :requester
|
|
152
166
|
|
|
153
167
|
# @api private
|
|
154
168
|
sig do
|
|
155
169
|
params(
|
|
156
170
|
base_url: String,
|
|
157
|
-
timeout: Float,
|
|
171
|
+
timeout: T.nilable(Float),
|
|
158
172
|
max_retries: Integer,
|
|
159
173
|
initial_retry_delay: Float,
|
|
160
174
|
max_retry_delay: Float,
|
|
@@ -169,7 +183,11 @@ module OpenAI
|
|
|
169
183
|
)
|
|
170
184
|
)
|
|
171
185
|
],
|
|
172
|
-
idempotency_header: T.nilable(String)
|
|
186
|
+
idempotency_header: T.nilable(String),
|
|
187
|
+
http_client: T.untyped,
|
|
188
|
+
logger: T.untyped,
|
|
189
|
+
log_level: T.nilable(T.any(Symbol, String)),
|
|
190
|
+
on_retry: T.nilable(T.proc.params(event: OpenAI::RetryEvent).void)
|
|
173
191
|
).returns(T.attached_class)
|
|
174
192
|
end
|
|
175
193
|
def self.new(
|
|
@@ -179,7 +197,11 @@ module OpenAI
|
|
|
179
197
|
initial_retry_delay: 0.0,
|
|
180
198
|
max_retry_delay: 0.0,
|
|
181
199
|
headers: {},
|
|
182
|
-
idempotency_header: nil
|
|
200
|
+
idempotency_header: nil,
|
|
201
|
+
http_client: nil,
|
|
202
|
+
logger: nil,
|
|
203
|
+
log_level: nil,
|
|
204
|
+
on_retry: nil
|
|
183
205
|
)
|
|
184
206
|
end
|
|
185
207
|
|
|
@@ -223,6 +245,15 @@ module OpenAI
|
|
|
223
245
|
private def build_request(req, opts)
|
|
224
246
|
end
|
|
225
247
|
|
|
248
|
+
# @api private
|
|
249
|
+
sig do
|
|
250
|
+
params(
|
|
251
|
+
request: OpenAI::Internal::Transport::BaseClient::RequestInput
|
|
252
|
+
).returns(T::Boolean)
|
|
253
|
+
end
|
|
254
|
+
private def request_replayable?(request)
|
|
255
|
+
end
|
|
256
|
+
|
|
226
257
|
# @api private
|
|
227
258
|
sig do
|
|
228
259
|
params(
|
|
@@ -239,7 +270,7 @@ module OpenAI
|
|
|
239
270
|
url: URI::Generic,
|
|
240
271
|
status: Integer,
|
|
241
272
|
headers: T::Hash[String, String],
|
|
242
|
-
response:
|
|
273
|
+
response: OpenAI::HTTPClient::Response,
|
|
243
274
|
stream: T::Enumerable[String]
|
|
244
275
|
).returns(T.noreturn)
|
|
245
276
|
end
|
|
@@ -258,14 +289,16 @@ module OpenAI
|
|
|
258
289
|
request: OpenAI::Internal::Transport::BaseClient::RequestInput,
|
|
259
290
|
redirect_count: Integer,
|
|
260
291
|
retry_count: Integer,
|
|
261
|
-
send_retry_header: T::Boolean
|
|
262
|
-
|
|
292
|
+
send_retry_header: T::Boolean,
|
|
293
|
+
context_provider: T.proc.returns(OpenAI::Internal::Logging::Context)
|
|
294
|
+
).returns(OpenAI::HTTPClient::Response)
|
|
263
295
|
end
|
|
264
296
|
def send_request(
|
|
265
297
|
request,
|
|
266
298
|
redirect_count:,
|
|
267
299
|
retry_count:,
|
|
268
|
-
send_retry_header
|
|
300
|
+
send_retry_header:,
|
|
301
|
+
&context_provider
|
|
269
302
|
)
|
|
270
303
|
end
|
|
271
304
|
|
|
@@ -344,6 +377,43 @@ module OpenAI
|
|
|
344
377
|
)
|
|
345
378
|
end
|
|
346
379
|
|
|
380
|
+
# @api private
|
|
381
|
+
sig do
|
|
382
|
+
params(
|
|
383
|
+
req: OpenAI::Internal::Transport::BaseClient::RequestComponents
|
|
384
|
+
).returns(
|
|
385
|
+
[
|
|
386
|
+
URI::Generic,
|
|
387
|
+
OpenAI::HTTPClient::Response,
|
|
388
|
+
OpenAI::Internal::Logging::Context
|
|
389
|
+
]
|
|
390
|
+
)
|
|
391
|
+
end
|
|
392
|
+
private def perform_request(req)
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
# @api private
|
|
396
|
+
sig do
|
|
397
|
+
params(
|
|
398
|
+
log_context: OpenAI::Internal::Logging::Context,
|
|
399
|
+
response: OpenAI::HTTPClient::Response,
|
|
400
|
+
blk: T.proc.returns(T.anything)
|
|
401
|
+
).returns(T.anything)
|
|
402
|
+
end
|
|
403
|
+
private def finish_request(log_context, response, &blk)
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
# @api private
|
|
407
|
+
sig do
|
|
408
|
+
params(
|
|
409
|
+
req: OpenAI::Internal::Transport::BaseClient::RequestComponents,
|
|
410
|
+
url: URI::Generic,
|
|
411
|
+
response: OpenAI::HTTPClient::Response
|
|
412
|
+
).returns(T.anything)
|
|
413
|
+
end
|
|
414
|
+
private def parse_response(req, url:, response:)
|
|
415
|
+
end
|
|
416
|
+
|
|
347
417
|
# @api private
|
|
348
418
|
sig { returns(String) }
|
|
349
419
|
def inspect
|
|
@@ -29,7 +29,7 @@ module OpenAI
|
|
|
29
29
|
# Assumes superclass fields are totally defined before fields are accessed /
|
|
30
30
|
# defined on subclasses.
|
|
31
31
|
sig { params(child: OpenAI::Internal::Type::BaseModel).void }
|
|
32
|
-
def inherited(child)
|
|
32
|
+
def inherited(child) # rubocop:disable Lint/MissingSuper -- RBI declarations cannot contain executable bodies.
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
# @api private
|
|
@@ -161,6 +161,24 @@ module OpenAI
|
|
|
161
161
|
def hash
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
# The ID of the API request, returned via the `x-request-id` response
|
|
165
|
+
# header. This is only populated on top-level response objects returned
|
|
166
|
+
# by the client.
|
|
167
|
+
sig { returns(T.nilable(String)) }
|
|
168
|
+
def _request_id
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Metadata from the HTTP response that produced this model. This is
|
|
172
|
+
# only populated on top-level response objects returned by the client.
|
|
173
|
+
sig { returns(T.nilable(OpenAI::ResponseMetadata)) }
|
|
174
|
+
def last_response
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# @api private
|
|
178
|
+
sig { params(response: OpenAI::ResponseMetadata).returns(T.self_type) }
|
|
179
|
+
def _set_last_response(response)
|
|
180
|
+
end
|
|
181
|
+
|
|
164
182
|
class << self
|
|
165
183
|
# @api private
|
|
166
184
|
sig do
|
|
@@ -265,6 +283,11 @@ module OpenAI
|
|
|
265
283
|
def to_yaml(*a)
|
|
266
284
|
end
|
|
267
285
|
|
|
286
|
+
# @api private
|
|
287
|
+
sig { params(coder: T.untyped).void }
|
|
288
|
+
def encode_with(coder)
|
|
289
|
+
end
|
|
290
|
+
|
|
268
291
|
# Create a new instance of a model.
|
|
269
292
|
sig do
|
|
270
293
|
params(
|
|
@@ -9,6 +9,17 @@ module OpenAI
|
|
|
9
9
|
module BasePage
|
|
10
10
|
Elem = type_member(:out)
|
|
11
11
|
|
|
12
|
+
# The ID of the API request, returned via the `x-request-id` response
|
|
13
|
+
# header. This is only populated on top-level response objects returned
|
|
14
|
+
# by the client.
|
|
15
|
+
sig { returns(T.nilable(String)) }
|
|
16
|
+
def _request_id
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
sig { returns(OpenAI::ResponseMetadata) }
|
|
20
|
+
def last_response
|
|
21
|
+
end
|
|
22
|
+
|
|
12
23
|
sig { overridable.returns(T::Boolean) }
|
|
13
24
|
def next_page?
|
|
14
25
|
end
|
|
@@ -30,11 +41,11 @@ module OpenAI
|
|
|
30
41
|
params(
|
|
31
42
|
client: OpenAI::Internal::Transport::BaseClient,
|
|
32
43
|
req: OpenAI::Internal::Transport::BaseClient::RequestComponents,
|
|
33
|
-
|
|
44
|
+
response_metadata: OpenAI::ResponseMetadata,
|
|
34
45
|
page_data: T.anything
|
|
35
46
|
).void
|
|
36
47
|
end
|
|
37
|
-
def initialize(client:, req:,
|
|
48
|
+
def initialize(client:, req:, response_metadata:, page_data:)
|
|
38
49
|
end
|
|
39
50
|
end
|
|
40
51
|
end
|
|
@@ -18,10 +18,23 @@ module OpenAI
|
|
|
18
18
|
sig { returns(T::Hash[String, String]) }
|
|
19
19
|
attr_reader :headers
|
|
20
20
|
|
|
21
|
+
sig { returns(OpenAI::ResponseMetadata) }
|
|
22
|
+
attr_reader :last_response
|
|
23
|
+
|
|
21
24
|
sig { void }
|
|
22
25
|
def close
|
|
23
26
|
end
|
|
24
27
|
|
|
28
|
+
# @api private
|
|
29
|
+
sig do
|
|
30
|
+
params(
|
|
31
|
+
context: OpenAI::Internal::Logging::Context,
|
|
32
|
+
response: OpenAI::HTTPClient::Response
|
|
33
|
+
).returns(T.self_type)
|
|
34
|
+
end
|
|
35
|
+
def observe(context:, response:)
|
|
36
|
+
end
|
|
37
|
+
|
|
25
38
|
# @api private
|
|
26
39
|
sig { overridable.returns(T::Enumerable[Elem]) }
|
|
27
40
|
private def iterator
|
|
@@ -41,9 +54,8 @@ module OpenAI
|
|
|
41
54
|
model:
|
|
42
55
|
T.any(T::Class[T.anything], OpenAI::Internal::Type::Converter),
|
|
43
56
|
url: URI::Generic,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
response: Net::HTTPResponse,
|
|
57
|
+
response_metadata: OpenAI::ResponseMetadata,
|
|
58
|
+
response: OpenAI::HTTPClient::Response,
|
|
47
59
|
unwrap:
|
|
48
60
|
T.any(
|
|
49
61
|
Symbol,
|
|
@@ -57,8 +69,7 @@ module OpenAI
|
|
|
57
69
|
def initialize(
|
|
58
70
|
model:,
|
|
59
71
|
url:,
|
|
60
|
-
|
|
61
|
-
headers:,
|
|
72
|
+
response_metadata:,
|
|
62
73
|
response:,
|
|
63
74
|
unwrap:,
|
|
64
75
|
stream:
|
|
@@ -253,46 +253,6 @@ module OpenAI
|
|
|
253
253
|
end
|
|
254
254
|
end
|
|
255
255
|
|
|
256
|
-
# @api private
|
|
257
|
-
#
|
|
258
|
-
# An adapter that satisfies the IO interface required by `::IO.copy_stream`
|
|
259
|
-
class ReadIOAdapter
|
|
260
|
-
# @api private
|
|
261
|
-
sig { returns(T.nilable(T::Boolean)) }
|
|
262
|
-
def close?
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
# @api private
|
|
266
|
-
sig { void }
|
|
267
|
-
def close
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
# @api private
|
|
271
|
-
sig { params(max_len: T.nilable(Integer)).returns(String) }
|
|
272
|
-
private def read_enum(max_len)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
# @api private
|
|
276
|
-
sig do
|
|
277
|
-
params(
|
|
278
|
-
max_len: T.nilable(Integer),
|
|
279
|
-
out_string: T.nilable(String)
|
|
280
|
-
).returns(T.nilable(String))
|
|
281
|
-
end
|
|
282
|
-
def read(max_len = nil, out_string = nil)
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
# @api private
|
|
286
|
-
sig do
|
|
287
|
-
params(
|
|
288
|
-
src: T.any(String, Pathname, StringIO, T::Enumerable[String]),
|
|
289
|
-
blk: T.proc.params(arg0: String).void
|
|
290
|
-
).returns(T.attached_class)
|
|
291
|
-
end
|
|
292
|
-
def self.new(src, &blk)
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
|
|
296
256
|
class << self
|
|
297
257
|
sig do
|
|
298
258
|
params(blk: T.proc.params(y: Enumerator::Yielder).void).returns(
|
|
@@ -304,9 +264,15 @@ module OpenAI
|
|
|
304
264
|
end
|
|
305
265
|
|
|
306
266
|
JSON_CONTENT =
|
|
307
|
-
T.let(
|
|
267
|
+
T.let(
|
|
268
|
+
%r{\Aapplication/(?:[a-z0-9.-]+\+)?json[ \t]*(?:;|\z)}i,
|
|
269
|
+
Regexp
|
|
270
|
+
)
|
|
308
271
|
JSONL_CONTENT =
|
|
309
|
-
T.let(
|
|
272
|
+
T.let(
|
|
273
|
+
%r{\Aapplication/(?:x-[nl]djson|(?:x-)?jsonl)[ \t]*(?:;|\z)}i,
|
|
274
|
+
Regexp
|
|
275
|
+
)
|
|
310
276
|
|
|
311
277
|
class << self
|
|
312
278
|
# @api private
|
|
@@ -346,6 +312,11 @@ module OpenAI
|
|
|
346
312
|
)
|
|
347
313
|
end
|
|
348
314
|
|
|
315
|
+
# @api private
|
|
316
|
+
sig { params(value: T.any(Pathname, String, Symbol)).returns(String) }
|
|
317
|
+
private def escape_multipart_header_param(value)
|
|
318
|
+
end
|
|
319
|
+
|
|
349
320
|
# @api private
|
|
350
321
|
sig do
|
|
351
322
|
params(
|
|
@@ -359,6 +330,19 @@ module OpenAI
|
|
|
359
330
|
private def write_multipart_chunk(y, boundary:, key:, val:, closing:)
|
|
360
331
|
end
|
|
361
332
|
|
|
333
|
+
# @api private
|
|
334
|
+
sig do
|
|
335
|
+
params(
|
|
336
|
+
y: Enumerator::Yielder,
|
|
337
|
+
boundary: String,
|
|
338
|
+
key: T.any(Symbol, String),
|
|
339
|
+
val: T.anything,
|
|
340
|
+
closing: T::Array[T.proc.void]
|
|
341
|
+
).void
|
|
342
|
+
end
|
|
343
|
+
private def write_multipart_value(y, boundary:, key:, val:, closing:)
|
|
344
|
+
end
|
|
345
|
+
|
|
362
346
|
# @api private
|
|
363
347
|
#
|
|
364
348
|
# https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.1.md#special-considerations-for-multipart-content
|
|
@@ -646,6 +646,11 @@ module OpenAI
|
|
|
646
646
|
:"tenant.workload_identity.principal.provisioned",
|
|
647
647
|
OpenAI::Admin::Organization::AuditLogListParams::EventType::TaggedSymbol
|
|
648
648
|
)
|
|
649
|
+
TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED =
|
|
650
|
+
T.let(
|
|
651
|
+
:"tenant.workload_identity.access_token.issued",
|
|
652
|
+
OpenAI::Admin::Organization::AuditLogListParams::EventType::TaggedSymbol
|
|
653
|
+
)
|
|
649
654
|
TENANT_ADMIN_API_KEY_CREATED =
|
|
650
655
|
T.let(
|
|
651
656
|
:"tenant.admin_api_key.created",
|
|
@@ -1778,6 +1778,11 @@ module OpenAI
|
|
|
1778
1778
|
:"tenant.workload_identity.principal.provisioned",
|
|
1779
1779
|
OpenAI::Models::Admin::Organization::AuditLogListResponse::Type::TaggedSymbol
|
|
1780
1780
|
)
|
|
1781
|
+
TENANT_WORKLOAD_IDENTITY_ACCESS_TOKEN_ISSUED =
|
|
1782
|
+
T.let(
|
|
1783
|
+
:"tenant.workload_identity.access_token.issued",
|
|
1784
|
+
OpenAI::Models::Admin::Organization::AuditLogListResponse::Type::TaggedSymbol
|
|
1785
|
+
)
|
|
1781
1786
|
TENANT_ADMIN_API_KEY_CREATED =
|
|
1782
1787
|
T.let(
|
|
1783
1788
|
:"tenant.admin_api_key.created",
|
|
@@ -85,6 +85,21 @@ module OpenAI
|
|
|
85
85
|
:"gpt-5.1-codex-max",
|
|
86
86
|
OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
|
|
87
87
|
)
|
|
88
|
+
GPT_DAYBREAK_BLUE_LATEST =
|
|
89
|
+
T.let(
|
|
90
|
+
:"gpt-daybreak-blue-latest",
|
|
91
|
+
OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
|
|
92
|
+
)
|
|
93
|
+
GPT_DAYBREAK_RED_LATEST =
|
|
94
|
+
T.let(
|
|
95
|
+
:"gpt-daybreak-red-latest",
|
|
96
|
+
OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
|
|
97
|
+
)
|
|
98
|
+
GPT_5_6_CYBER =
|
|
99
|
+
T.let(
|
|
100
|
+
:"gpt-5.6-cyber",
|
|
101
|
+
OpenAI::AllModels::ResponsesOnlyModel::TaggedSymbol
|
|
102
|
+
)
|
|
88
103
|
|
|
89
104
|
sig do
|
|
90
105
|
override.returns(
|