Class: SwarmMemory::Embeddings::InformersEmbedder
- Defined in:
- lib/swarm_memory/embeddings/informers_embedder.rb
Overview
Embedder implementation using Informers gem (fast ONNX inference)
Uses sentence-transformers models via ONNX for fast, local embedding generation. Supports quantized models for even better performance.
Constant Summary collapse
- DEFAULT_MODEL =
"sentence-transformers/multi-qa-MiniLM-L6-cos-v1"- EMBEDDING_DIMENSIONS =
384
Instance Method Summary collapse
-
#cached? ⇒ Boolean
Check if model is already cached locally.
-
#dimensions ⇒ Integer
Get embedding dimensionality.
-
#embed(text) ⇒ Array<Float>
Generate embedding for single text.
-
#embed_batch(texts) ⇒ Array<Array<Float>>
Generate embeddings for multiple texts (batched).
-
#initialize(model: nil, quantized: false, cache_dir: nil) ⇒ InformersEmbedder
constructor
Initialize embedder with model configuration.
-
#preload! ⇒ self
Explicitly pre-load the model (triggers download if not cached).
Constructor Details
#initialize(model: nil, quantized: false, cache_dir: nil) ⇒ InformersEmbedder
Initialize embedder with model configuration
Model can be configured via SWARM_MEMORY_EMBEDDING_MODEL environment variable.
Available models:
- sentence-transformers/all-MiniLM-L6-v2 (default, general purpose, 256 tokens)
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1 (Q&A optimized, 512 tokens)
Note: The original sentence-transformers model uses unquantized ONNX (90MB). For a smaller quantized version (22MB), use model: "Xenova/all-MiniLM-L6-v2", quantized: true
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 33 def initialize(model: nil, quantized: false, cache_dir: nil) super() unless defined?(Informers) raise EmbeddingError, "Informers gem is not available. Install with: gem install informers" end # Use env var if available, otherwise use provided model or default @model_name = model || ENV["SWARM_MEMORY_EMBEDDING_MODEL"] || DEFAULT_MODEL @quantized = quantized @model = nil # Lazy load # Optional: Set custom cache directory Informers.cache_dir = cache_dir if cache_dir end |
Instance Method Details
#cached? ⇒ Boolean
Check if model is already cached locally
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 77 def cached? cache_dir = Informers.cache_dir # Different models have different file names # Original sentence-transformers: model.onnx (unquantized) # Xenova version: model_quantized.onnx (quantized) suffix = @quantized ? "_quantized" : "" # Check for required model files model_file = File.join(cache_dir, @model_name, "onnx", "model#{suffix}.onnx") tokenizer_file = File.join(cache_dir, @model_name, "tokenizer.json") File.exist?(model_file) && File.exist?(tokenizer_file) end |
#dimensions ⇒ Integer
Get embedding dimensionality
130 131 132 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 130 def dimensions EMBEDDING_DIMENSIONS end |
#embed(text) ⇒ Array<Float>
Generate embedding for single text
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 97 def (text) raise ArgumentError, "text is required" if text.nil? || text.to_s.strip.empty? begin ensure_model_loaded # Informers handles single strings directly - returns single embedding array @model.call(text) rescue StandardError => e raise EmbeddingError, "Failed to generate embedding: #{e.message}" end end |
#embed_batch(texts) ⇒ Array<Array<Float>>
Generate embeddings for multiple texts (batched)
114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 114 def (texts) raise ArgumentError, "texts must be an array" unless texts.is_a?(Array) raise ArgumentError, "texts cannot be empty" if texts.empty? begin ensure_model_loaded # Batch call - returns array of embedding arrays @model.call(texts) rescue StandardError => e raise EmbeddingError, "Failed to generate embeddings: #{e.message}" end end |
#preload! ⇒ self
Explicitly pre-load the model (triggers download if not cached)
Call this during initialization to download the model immediately rather than waiting for the first embedding call.
61 62 63 64 |
# File 'lib/swarm_memory/embeddings/informers_embedder.rb', line 61 def preload! ensure_model_loaded self end |