Skip to content

Commit fce1ed6

Browse files
committed
Simplify download
1 parent 8fa4854 commit fce1ed6

4 files changed

Lines changed: 13 additions & 48 deletions

File tree

Rakefile

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,6 @@ RSpec::Core::RakeTask.new(:spec)
88

99
task default: :spec
1010

11-
namespace :model do
12-
DEFAULT_REPO_ID = 'cuerbot/gliner2-multi-v1'
13-
DEFAULT_MODEL_FILE = 'model_fp16.onnx'
14-
DEFAULT_MODEL_SUBDIR = 'onnx'
15-
16-
desc 'Downloads a test model to tmp/ (REPO_ID=... MODEL_FILE=model_fp16.onnx)'
17-
task :pull do
18-
repo_id = ENV['REPO_ID'] || DEFAULT_REPO_ID
19-
model_file = ENV['MODEL_FILE'] || DEFAULT_MODEL_FILE
20-
model_subdir = ENV['MODEL_SUBDIR'] || DEFAULT_MODEL_SUBDIR
21-
22-
dir = File.expand_path("tmp/models/#{repo_id.tr('/', '__')}", __dir__)
23-
FileUtils.mkdir_p(dir)
24-
25-
base = "https://huggingface.co/#{repo_id}/resolve/main"
26-
base = "#{base}/#{model_subdir}" unless model_subdir.nil? || model_subdir.empty?
27-
files = ['tokenizer.json', 'config.json', model_file]
28-
client = HTTPX.plugin(:follow_redirects).with(max_redirects: 5)
29-
30-
files.each do |file|
31-
dest = File.join(dir, file)
32-
next if File.exist?(dest) && File.size?(dest)
33-
34-
response = client.get("#{base}/#{file}")
35-
raise "Download failed: #{base}/#{file} (status: #{response.status})" unless response.status.between?(200, 299)
36-
37-
File.binwrite(dest, response.body.to_s)
38-
end
39-
40-
puts "Downloaded model to: #{dir}"
41-
puts "Use with: GLINER_MODEL_DIR=#{dir}"
42-
end
43-
end
44-
4511
namespace :spec do
4612
desc 'Runs real-model integration test (downloads ~357MB unless GLINER_MODEL_DIR is set)'
4713
task :integration do

bin/console

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ end
99

1010
require "gliner"
1111
require "irb"
12+
require "debug"
1213

1314
model_dir = ARGV[0] || ENV["GLINER_MODEL_DIR"]
1415
model_file = ENV["GLINER_MODEL_FILE"]

gliner.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
2424
spec.add_development_dependency 'irb', '~> 1.16.0'
2525
spec.add_development_dependency 'rspec', '~> 3.13'
2626
spec.add_development_dependency 'rubocop', '~> 1.50'
27+
spec.add_development_dependency 'debug', '~> 1.11'
2728

2829
spec.metadata['rubygems_mfa_required'] = 'true'
2930
end

lib/gliner.rb

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -141,34 +141,31 @@ def apply_model_source!
141141
config.model = download_default_model
142142
end
143143

144+
def client
145+
@client ||= HTTPX.plugin(:follow_redirects)
146+
end
147+
144148
def download_default_model
145149
model_file = model_file_for_variant(config.variant)
146-
root = File.expand_path('..', __dir__)
147-
dir = File.join(root, '.cache', 'models', HF_REPO.tr('/', '__'))
150+
dir = File.join(Dir.pwd, '.cache', 'gliner', HF_REPO.tr('/', '__'))
148151

149152
FileUtils.mkdir_p(dir)
150153

151154
files = ['tokenizer.json', 'config.json', model_file]
152-
client = HTTPX.plugin(:follow_redirects)
153155

154156
files.each do |file|
155-
dest = File.join(dir, file)
156-
next if File.exist?(dest) && File.size?(dest)
157+
target = File.join(dir, file)
157158

158-
download_file!(client, "#{DEFAULT_MODEL_BASE}/#{file}", dest)
159+
next if File.exist?(target) && File.size?(target)
160+
161+
client
162+
.get("#{DEFAULT_MODEL_BASE}/#{file}")
163+
.copy_to(target)
159164
end
160165

161166
dir
162167
end
163168

164-
def download_file!(client, url, dest)
165-
response = client.get(url)
166-
167-
raise Error, "Download failed: #{url} (status: #{response.error})" if response.error
168-
169-
File.binwrite(dest, response.body.to_s)
170-
end
171-
172169
def env_model_dir
173170
dir = ENV.fetch('GLINER_MODEL_DIR', nil)
174171
return nil if dir.nil? || dir.empty?

0 commit comments

Comments
 (0)