Class: Engram::Adapters::RubyLLMEmbedder

Inherits:
Object
  • Object
show all
Includes:
Ports::Embedder
Defined in:
lib/engram/adapters/ruby_llm_embedder.rb

Overview

Embedder backed by RubyLLM. Requires the host app to add the ruby_llm gem and configure its credentials. Referenced only at call time, so engram loads without it.

Constant Summary collapse

DEFAULT_MODEL =
"text-embedding-3-small"
DEFAULT_DIMENSIONS =
1536

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model: DEFAULT_MODEL, dimensions: nil) ⇒ RubyLLMEmbedder

Returns a new instance of RubyLLMEmbedder.



13
14
15
16
17
18
19
20
21
# File 'lib/engram/adapters/ruby_llm_embedder.rb', line 13

def initialize(model: DEFAULT_MODEL, dimensions: nil)
  if dimensions && (!dimensions.is_a?(Integer) || !dimensions.positive?)
    raise ArgumentError, "dimensions must be a positive integer"
  end

  @model = model
  @requested_dimensions = dimensions
  @dimensions = dimensions || DEFAULT_DIMENSIONS
end

Instance Attribute Details

#dimensionsObject (readonly)

Returns the value of attribute dimensions.



23
24
25
# File 'lib/engram/adapters/ruby_llm_embedder.rb', line 23

def dimensions
  @dimensions
end

#modelObject (readonly)

Returns the value of attribute model.



23
24
25
# File 'lib/engram/adapters/ruby_llm_embedder.rb', line 23

def model
  @model
end

Instance Method Details

#embed(text) ⇒ Object



34
35
36
37
38
39
# File 'lib/engram/adapters/ruby_llm_embedder.rb', line 34

def embed(text)
  ensure_ruby_llm!
  vectors = request_embedding(text)
  validate_dimensions!(vectors)
  vectors
end

#embedding_metadataObject



25
26
27
28
29
30
31
32
# File 'lib/engram/adapters/ruby_llm_embedder.rb', line 25

def 
  Engram::EmbeddingMetadata.build(
    adapter: self.class.name,
    provider: "ruby_llm",
    model: model,
    dimensions: dimensions
  )
end