class Anthropic::Internal::Transport::BaseClient
def send_request(request, redirect_count:, retry_count:, send_retry_header:)
-
(Array(Integer, Net::HTTPResponse, Enumerable
-))
Raises:
-
(Anthropic::Errors::APIError)
-
Parameters:
-
send_retry_header
(Boolean
) -- -
retry_count
(Integer
) -- -
redirect_count
(Integer
) -- -
request
(Hash{Symbol=>Object}
) -- .
Options Hash:
(**request)
-
:timeout
(Float
) -- -
:max_retries
(Integer
) -- -
:body
(Object
) -- -
:headers
(Hash{String=>String}
) -- -
:url
(URI::Generic
) -- -
:method
(Symbol
) --
Other tags:
- Api: - private
def send_request(request, redirect_count:, retry_count:, send_retry_header:) request = transform_request(request) url, headers, max_retries, timeout = request.fetch_values(:url, :headers, :max_retries, :timeout) input = {**request.except(:timeout), deadline: Anthropic::Internal::Util.monotonic_secs + timeout} if send_retry_header headers["x-stainless-retry-count"] = retry_count.to_s end begin status, response, stream = @requester.execute(input) rescue Anthropic::Errors::APIConnectionError => e status = e end case status in ..299 [status, response, stream] in 300..399 if redirect_count >= self.class::MAX_REDIRECTS self.class.reap_connection!(status, stream: stream) message = "Failed to complete the request within #{self.class::MAX_REDIRECTS} redirects." raise Anthropic::Errors::APIConnectionError.new(url: url, response: response, message: message) in 300..399 self.class.reap_connection!(status, stream: stream) request = self.class.follow_redirect(request, status: status, response_headers: response) send_request( request, redirect_count: redirect_count + 1, retry_count: retry_count, send_retry_header: send_retry_header ) in Anthropic::Errors::APIConnectionError if retry_count >= max_retries raise status in (400..) if retry_count >= max_retries || !self.class.should_retry?(status, headers: response) decoded = Kernel.then do Anthropic::Internal::Util.decode_content(response, stream: stream, suppress_error: true) ensure self.class.reap_connection!(status, stream: stream) end raise Anthropic::Errors::APIStatusError.for( url: url, status: status, body: decoded, request: nil, response: response ) in (400..) | Anthropic::Errors::APIConnectionError self.class.reap_connection!(status, stream: stream) delay = retry_delay(response || {}, retry_count: retry_count) sleep(delay) send_request( request, redirect_count: redirect_count, retry_count: retry_count + 1, send_retry_header: send_retry_header ) end end