Module: RubyLLM::ProviderErrorFix

Defined in:
lib/extensions/ruby_llm/provider_fix.rb

Instance Method Summary collapse

Instance Method Details

#parse_error(response) ⇒ String?

Override the parse_error method to handle String responses from LM Studio Parses error response from provider API.

Supports two error formats:

  1. OpenAI standard: {“message”: “…”, “type”: “…”, “code”: “…”}

  2. Simple format: “error message”

Examples:

OpenAI format

response = double(body: '{"error": {"message": "Rate limit exceeded"}}')
parse_error(response) #=> "Rate limit exceeded"

Simple format (LM Studio, some local providers)

response = double(body: '{"error": "Token limit exceeded"}')
parse_error(response) #=> "Token limit exceeded"

Parameters:

  • response (Faraday::Response)

    The HTTP response

Returns:

  • (String, nil)

    The error message or nil if parsing fails



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/extensions/ruby_llm/provider_fix.rb', line 29

def parse_error(response)
  return if response.body.empty?

  body = try_parse_json(response.body)
  case body
  when Hash
    # Handle both formats:
    # - {"error": "message"}          (LM Studio, some providers)
    # - {"error": {"message": "..."}} (OpenAI standard)
    error_value = body['error']
    return nil unless error_value

    case error_value
    when Hash
      error_value['message']
    when String
      error_value
    else
      error_value.to_s if error_value
    end
  when Array
    body.filter_map do |part|
      next unless part.is_a?(Hash)

      error_value = part['error']
      next unless error_value

      case error_value
      when Hash then error_value['message']
      when String then error_value
      else error_value.to_s if error_value
      end
    end.join('. ')
  else
    body.to_s
  end
rescue StandardError => e
  RubyLLM.logger.debug "Error parsing response: #{e.message}"
  nil
end