module RubyLLM::Provider
def configured_providers
def configured_providers providers.select { |_name, provider| provider.configured? }.values end
def extended(base)
def extended(base) base.extend(Methods) base.extend(Streaming) end
def for(model)
def for(model) model_info = Models.find(model) providers[model_info.provider.to_sym] end
def parse_data_uri(uri)
def parse_data_uri(uri) if uri&.start_with?('data:') match = uri.match(/\Adata:([^;]+);base64,(.+)\z/) return { mime_type: match[1], data: match[2] } if match end # If it's not a data URI, return nil nil end
def parse_error(response) # rubocop:disable Metrics/MethodLength
def parse_error(response) # rubocop:disable Metrics/MethodLength return if response.body.empty? body = try_parse_json(response.body) case body when Hash body.dig('error', 'message') when Array body.map do |part| part.dig('error', 'message') end.join('. ') else body end end
def providers
def providers @providers ||= {} end
def register(name, provider_module)
def register(name, provider_module) providers[name.to_sym] = provider_module end
def try_parse_json(maybe_json)
def try_parse_json(maybe_json) return maybe_json unless maybe_json.is_a?(String) JSON.parse(maybe_json) rescue JSON::ParserError maybe_json end