Class: RerankerRuby::Batch
- Inherits:
-
Object
- Object
- RerankerRuby::Batch
- Defined in:
- lib/reranker_ruby/batch.rb
Overview
Batch reranking — run multiple queries against the same document set concurrently.
Usage:
results = RerankerRuby::Batch.rerank(reranker, queries, documents, top_k: 5, threads: 4)
results[0] # => results for queries[0]
results[1] # => results for queries[1]
Class Method Summary collapse
-
.rerank(reranker, queries, documents, top_k: 10, threads: 4) ⇒ Array<Array<Result>>
Results per query.
Class Method Details
.rerank(reranker, queries, documents, top_k: 10, threads: 4) ⇒ Array<Array<Result>>
Returns results per query.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/reranker_ruby/batch.rb', line 18 def self.rerank(reranker, queries, documents, top_k: 10, threads: 4) if threads <= 1 return queries.map { |q| reranker.rerank(q, documents, top_k: top_k) } end results = Array.new(queries.length) errors = [] mutex = Mutex.new queue = Queue.new queries.each_with_index { |q, i| queue << [q, i] } threads.times { queue << nil } # sentinel values workers = threads.times.map do Thread.new do while (item = queue.pop) begin query, idx = item result = reranker.rerank(query, documents, top_k: top_k) mutex.synchronize { results[idx] = result } rescue => e mutex.synchronize { errors << e } end end end end workers.each(&:join) raise errors.first if errors.any? results end |