Class: Engram::Adapters::NullEmbedder

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

Overview

Deterministic, network-free embedder for tests and the zero-config default. NOT semantic — equal text yields equal vectors, but unrelated text is not meaningfully close. Good enough to exercise the pipeline; useless for quality.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dimensions: 16) ⇒ NullEmbedder

Returns a new instance of NullEmbedder.



13
14
15
# File 'lib/engram/adapters/null_embedder.rb', line 13

def initialize(dimensions: 16)
  @dimensions = dimensions
end

Instance Attribute Details

#dimensionsObject (readonly)

Returns the value of attribute dimensions.



17
18
19
# File 'lib/engram/adapters/null_embedder.rb', line 17

def dimensions
  @dimensions
end

Instance Method Details

#embed(text) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/engram/adapters/null_embedder.rb', line 28

def embed(text)
  seed = Digest::SHA256.hexdigest(text.to_s)
  Array.new(@dimensions) do |i|
    byte = seed[(i * 2) % seed.length, 2].to_i(16)
    (byte / 255.0) * 2 - 1 # map 0..255 -> -1.0..1.0
  end
end

#embedding_metadataObject



19
20
21
22
23
24
25
26
# File 'lib/engram/adapters/null_embedder.rb', line 19

def 
  Engram::EmbeddingMetadata.build(
    adapter: self.class.name,
    provider: "null",
    model: "null-embedder-v1",
    dimensions: dimensions
  )
end