Class: SwarmSDK::V3::Memory::Embedder
- Inherits:
-
Object
- Object
- SwarmSDK::V3::Memory::Embedder
- Defined in:
- lib/swarm_sdk/v3/memory/embedder.rb
Overview
ONNX-based text embedder using Informers gem
Uses the ‘Informers.pipeline(“embedding”, …)` API to generate sentence embeddings via ONNX inference. Lazy-loads the model on first use to avoid startup cost.
Model name and cache directory are read from Configuration, with environment variable overrides.
The model is automatically downloaded on first use if not cached. Use #preload! to trigger an eager download before first embedding.
Constant Summary collapse
- DIMENSIONS =
384- DEFAULT_MODEL =
Default embedding model (QA-optimized, 384 dimensions)
"sentence-transformers/multi-qa-MiniLM-L6-cos-v1"- MODEL_ENV_VAR =
Environment variable for model override
"SWARM_EMBEDDING_MODEL"
Instance Method Summary collapse
-
#cached? ⇒ Boolean
Check if the embedding model is cached locally.
-
#dimensions ⇒ Integer
Number of dimensions in the embedding vector.
-
#embed(text) ⇒ Array<Float>
Generate an embedding vector for text.
-
#embed_batch(texts) ⇒ Array<Array<Float>>
Generate embeddings for multiple texts.
-
#model_name ⇒ String
The model name used for embeddings.
-
#preload! ⇒ void
Eagerly download and load the embedding model.
Instance Method Details
#cached? ⇒ Boolean
Check if the embedding model is cached locally
Verifies that the model directory exists and contains the required tokenizer and ONNX model files.
121 122 123 124 125 126 127 128 129 130 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 121 def cached? cache_dir = resolve_cache_dir model_dir = File.join(cache_dir, model_name) return false unless File.directory?(model_dir) # Check for required model files tokenizer = File.join(model_dir, "tokenizer.json") onnx_model = File.join(model_dir, "onnx", "model.onnx") File.exist?(tokenizer) && File.exist?(onnx_model) end |
#dimensions ⇒ Integer
Number of dimensions in the embedding vector
42 43 44 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 42 def dimensions DIMENSIONS end |
#embed(text) ⇒ Array<Float>
Generate an embedding vector for text
Lazy-loads the model on first call. The model will be downloaded automatically if not cached locally.
70 71 72 73 74 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 70 def (text) pipeline.call(text) rescue StandardError => e raise MemoryError, "Embedding failed for text (#{text.length} chars): #{e.}" end |
#embed_batch(texts) ⇒ Array<Array<Float>>
Generate embeddings for multiple texts
More efficient than calling embed() in a loop because the pipeline can batch internally.
84 85 86 87 88 89 90 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 84 def (texts) return [] if texts.empty? pipeline.call(texts) rescue StandardError => e raise MemoryError, "Batch embedding failed (#{texts.size} texts): #{e.}" end |
#model_name ⇒ String
The model name used for embeddings
Resolution order:
-
SWARM_EMBEDDING_MODEL environment variable
-
Configuration.instance.embedding_model
-
DEFAULT_MODEL constant
54 55 56 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 54 def model_name ENV[MODEL_ENV_VAR] || Configuration.instance. || DEFAULT_MODEL end |
#preload! ⇒ void
This method returns an undefined value.
Eagerly download and load the embedding model
Triggers model download if not already cached. Useful for ensuring the model is available before first use. This is a one-time download of ~90MB.
104 105 106 107 108 109 |
# File 'lib/swarm_sdk/v3/memory/embedder.rb', line 104 def preload! pipeline nil rescue StandardError => e raise MemoryError, "Failed to preload embedding model '#{model_name}': #{e.}" end |