Class: RubyLLM::ErrorMiddleware
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- RubyLLM::ErrorMiddleware
- Defined in:
- lib/ruby_llm/error.rb
Overview
Faraday middleware that maps provider-specific API errors to RubyLLM errors.
Class Method Summary collapse
-
.parse_error(provider:, response:) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity.
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ ErrorMiddleware
constructor
A new instance of ErrorMiddleware.
Constructor Details
#initialize(app, options = {}) ⇒ ErrorMiddleware
33 34 35 36 |
# File 'lib/ruby_llm/error.rb', line 33 def initialize(app, = {}) super(app) @provider = [:provider] end |
Class Method Details
.parse_error(provider:, response:) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/ruby_llm/error.rb', line 45 def parse_error(provider:, response:) # rubocop:disable Metrics/PerceivedComplexity = provider&.parse_error(response) case response.status when 200..399 when 400 raise BadRequestError.new(response, || 'Invalid request - please check your input') when 401 raise UnauthorizedError.new(response, || 'Invalid API key - check your credentials') when 402 raise PaymentRequiredError.new(response, || 'Payment required - please top up your account') when 403 raise ForbiddenError.new(response, || 'Forbidden - you do not have permission to access this resource') when 429 raise RateLimitError.new(response, || 'Rate limit exceeded - please wait a moment') when 500 raise ServerError.new(response, || 'API server error - please try again') when 502..503 raise ServiceUnavailableError.new(response, || 'API server unavailable - please try again later') when 529 raise OverloadedError.new(response, || 'Service overloaded - please try again later') else raise Error.new(response, || 'An unknown error occurred') end end |
Instance Method Details
#call(env) ⇒ Object
38 39 40 41 42 |
# File 'lib/ruby_llm/error.rb', line 38 def call(env) @app.call(env).on_complete do |response| self.class.parse_error(provider: @provider, response: response) end end |