class RubyLLM::ErrorMiddleware
Faraday middleware that maps provider-specific API errors to RubyLLM errors.
Public Class Methods
Source
# File lib/ruby_llm/error_middleware.rb, line 9 def initialize(app, options = {}) super(app) @provider = options[:provider] end
Calls superclass method
# File lib/ruby_llm/error_middleware.rb, line 34 def parse_error(provider:, response:) # rubocop:disable Metrics/PerceivedComplexity message = provider&.parse_error(response) case response.status when 200..399 message when 400 if context_length_exceeded?(message) raise ContextLengthExceededError.new(response, message || 'Context length exceeded') end raise BadRequestError.new(response, message || 'Invalid request - please check your input') when 401 raise UnauthorizedError.new(response, message || 'Invalid API key - check your credentials') when 402 raise PaymentRequiredError.new(response, message || 'Payment required - please top up your account') when 403 raise ForbiddenError.new(response, message || 'Forbidden - you do not have permission to access this resource') when 429 if context_length_exceeded?(message) raise ContextLengthExceededError.new(response, message || 'Context length exceeded') end raise RateLimitError.new(response, message || 'Rate limit exceeded - please wait a moment') when 500 raise ServerError.new(response, message || 'API server error - please try again') when 502..504 raise ServiceUnavailableError.new(response, message || 'API server unavailable - please try again later') when 529 raise OverloadedError.new(response, message || 'Service overloaded - please try again later') else raise Error.new(response, message || 'An unknown error occurred') end end
Public Instance Methods
Source
# File lib/ruby_llm/error_middleware.rb, line 14 def call(env) @app.call(env).on_complete do |response| self.class.parse_error(provider: @provider, response: response) end end