Module: Clip

Defined in:
lib/clip.rb,
lib/clip/model.rb,
lib/clip/version.rb,
lib/clip/tokenizer.rb,
lib/clip/image_preprocessor.rb,
lib/clip/multilingual_model.rb

Defined Under Namespace

Classes: ImagePreprocessor, Model, MultilingualModel, Tokenizer

Constant Summary collapse

BASE_URL =
"https://huggingface.co/khasinski/"
MODELS =
{
  "textual.onnx" => "clip-ViT-B-32-onnx/resolve/main/textual.onnx?download=true",
  "visual.onnx" => "clip-ViT-B-32-onnx/resolve/main/visual.onnx?download=true"
}
MULTILINGUAL_MODELS =
{
  "textual.onnx" => "XLM-Roberta-Large-Vit-B-32-onnx/resolve/main/textual.onnx?download=true",
  "data.bin" => "XLM-Roberta-Large-Vit-B-32-onnx/resolve/main/data.bin?download=true",
  "visual.onnx" => "XLM-Roberta-Large-Vit-B-32-onnx/resolve/main/visual.onnx?download=true"
}
VERSION =
"1.1.0"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#loggerObject

Returns the value of attribute logger.



11
12
13
# File 'lib/clip.rb', line 11

def logger
  @logger
end

Class Method Details

.download_file(url, destination, limit = 10) ⇒ Object



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
# File 'lib/clip.rb', line 37

def self.download_file(url, destination, limit = 10)
  raise "Too many HTTP redirects" if limit == 0

  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = (uri.scheme == 'https')

  request = Net::HTTP::Get.new(uri.request_uri)

  http.request(request) do |response|
    case response
    when Net::HTTPRedirection
      new_url = response['location']
      self.download_file(new_url, destination, limit - 1)
    when Net::HTTPSuccess
      File.open(destination, 'wb') do |file|
        response.read_body do |chunk|
          file.write(chunk)
        end
      end
      puts "Downloaded #{url} to #{destination}"
    else
      raise "Failed to download file: #{response.code} #{response.message}"
    end
  end
end

.download_models(download_dir, models = MODELS) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/clip.rb', line 25

def self.download_models(download_dir, models = MODELS)
  logger ||= Logger.new(STDOUT)
  FileUtils.mkdir_p(download_dir)

  models.each do |filename, path|
    uri = URI.join(BASE_URL, path)
    logger.info("Downloading #{filename} model from #{uri}")

    self.download_file(uri.to_s, File.join(download_dir, filename))
  end
end

.models_exist?(textual_model_path:, visual_model_path:) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/clip.rb', line 64

def self.models_exist?(textual_model_path:, visual_model_path:)
  File.exist?(textual_model_path) && File.exist?(visual_model_path)
end