1
1
# frozen_string_literal: true
2
2
3
3
module OpenAI
4
- # @private
4
+ # @api private
5
5
#
6
6
# @abstract
7
- #
8
7
class BaseClient
9
8
# from whatwg fetch spec
10
9
MAX_REDIRECTS = 20
@@ -21,12 +20,11 @@ class BaseClient
21
20
# rubocop:enable Style/MutableConstant
22
21
23
22
class << self
24
- # @private
23
+ # @api private
25
24
#
26
25
# @param req [Hash{Symbol=>Object}]
27
26
#
28
27
# @raise [ArgumentError]
29
- #
30
28
def validate! ( req )
31
29
keys = [ :method , :path , :query , :headers , :body , :unwrap , :page , :stream , :model , :options ]
32
30
case req
@@ -41,13 +39,12 @@ def validate!(req)
41
39
end
42
40
end
43
41
44
- # @private
42
+ # @api private
45
43
#
46
44
# @param status [Integer]
47
45
# @param headers [Hash{String=>String}, Net::HTTPHeader]
48
46
#
49
47
# @return [Boolean]
50
- #
51
48
def should_retry? ( status , headers :)
52
49
coerced = OpenAI ::Util . coerce_boolean ( headers [ "x-should-retry" ] )
53
50
case [ coerced , status ]
@@ -65,7 +62,7 @@ def should_retry?(status, headers:)
65
62
end
66
63
end
67
64
68
- # @private
65
+ # @api private
69
66
#
70
67
# @param request [Hash{Symbol=>Object}] .
71
68
#
@@ -86,7 +83,6 @@ def should_retry?(status, headers:)
86
83
# @param response_headers [Hash{String=>String}, Net::HTTPHeader]
87
84
#
88
85
# @return [Hash{Symbol=>Object}]
89
- #
90
86
def follow_redirect ( request , status :, response_headers :)
91
87
method , url , headers = request . fetch_values ( :method , :url , :headers )
92
88
location =
@@ -130,12 +126,11 @@ def follow_redirect(request, status:, response_headers:)
130
126
end
131
127
end
132
128
133
- # @private
134
- #
129
+ # @api private
135
130
# @return [OpenAI::PooledNetRequester]
136
131
attr_accessor :requester
137
132
138
- # @private
133
+ # @api private
139
134
#
140
135
# @param base_url [String]
141
136
# @param timeout [Float]
@@ -144,7 +139,6 @@ def follow_redirect(request, status:, response_headers:)
144
139
# @param max_retry_delay [Float]
145
140
# @param headers [Hash{String=>String, Integer, Array<String, Integer, nil>, nil}]
146
141
# @param idempotency_header [String, nil]
147
- #
148
142
def initialize (
149
143
base_url :,
150
144
timeout : 0.0 ,
@@ -171,19 +165,17 @@ def initialize(
171
165
@max_retry_delay = max_retry_delay
172
166
end
173
167
174
- # @private
168
+ # @api private
175
169
#
176
170
# @return [Hash{String=>String}]
177
- #
178
171
private def auth_headers = { }
179
172
180
- # @private
173
+ # @api private
181
174
#
182
175
# @return [String]
183
- #
184
176
private def generate_idempotency_key = "stainless-ruby-retry-#{ SecureRandom . uuid } "
185
177
186
- # @private
178
+ # @api private
187
179
#
188
180
# @param req [Hash{Symbol=>Object}] .
189
181
#
@@ -220,7 +212,6 @@ def initialize(
220
212
# @option opts [Float, nil] :timeout
221
213
#
222
214
# @return [Hash{Symbol=>Object}]
223
- #
224
215
private def build_request ( req , opts )
225
216
method , uninterpolated_path = req . fetch_values ( :method , :path )
226
217
@@ -271,13 +262,12 @@ def initialize(
271
262
}
272
263
end
273
264
274
- # @private
265
+ # @api private
275
266
#
276
267
# @param headers [Hash{String=>String}]
277
268
# @param retry_count [Integer]
278
269
#
279
270
# @return [Float]
280
- #
281
271
private def retry_delay ( headers , retry_count :)
282
272
# Non-standard extension
283
273
span = Float ( headers [ "retry-after-ms" ] , exception : false ) &.then { _1 / 1000 }
@@ -298,7 +288,7 @@ def initialize(
298
288
( @initial_retry_delay * scale * jitter ) . clamp ( 0 , @max_retry_delay )
299
289
end
300
290
301
- # @private
291
+ # @api private
302
292
#
303
293
# @param request [Hash{Symbol=>Object}] .
304
294
#
@@ -322,7 +312,6 @@ def initialize(
322
312
#
323
313
# @raise [OpenAI::APIError]
324
314
# @return [Array(Integer, Net::HTTPResponse, Enumerable)]
325
- #
326
315
private def send_request ( request , redirect_count :, retry_count :, send_retry_header :)
327
316
url , headers , max_retries , timeout = request . fetch_values ( :url , :headers , :max_retries , :timeout )
328
317
input = { **request . except ( :timeout ) , deadline : OpenAI ::Util . monotonic_secs + timeout }
@@ -424,7 +413,6 @@ def initialize(
424
413
#
425
414
# @raise [OpenAI::APIError]
426
415
# @return [Object]
427
- #
428
416
def request ( req )
429
417
self . class . validate! ( req )
430
418
model = req . fetch ( :model ) { OpenAI ::Unknown }
@@ -455,7 +443,6 @@ def request(req)
455
443
end
456
444
457
445
# @return [String]
458
- #
459
446
def inspect
460
447
# rubocop:disable Layout/LineLength
461
448
base_url = OpenAI ::Util . unparse_uri ( @base_url )
0 commit comments