Class: Engram::Consolidators::HeuristicConsolidator

Inherits:
Object
  • Object
show all
Includes:
Ports::Consolidator
Defined in:
lib/engram/consolidators/heuristic_consolidator.rb

Overview

Deterministic, no-LLM consolidation. ADDs a candidate unless a near-duplicate already exists (then NOOP). It cannot detect contradictions or updates — that is the LLMConsolidator's job. Useful as the default in tests and as a zero-cost fallback.

Instance Method Summary collapse

Constructor Details

#initialize(store:, similarity_threshold: 0.97) ⇒ HeuristicConsolidator

Returns a new instance of HeuristicConsolidator.



11
12
13
14
# File 'lib/engram/consolidators/heuristic_consolidator.rb', line 11

def initialize(store:, similarity_threshold: 0.97)
  @store = store
  @similarity_threshold = similarity_threshold
end

Instance Method Details

#reconcile_all(candidates:, scope:) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/engram/consolidators/heuristic_consolidator.rb', line 16

def reconcile_all(candidates:, scope:)
  Array(candidates).map do |candidate|
    nearest = Engram::EmbeddingMetadata.search(
      @store,
      embedding: candidate.embedding,
      embedding_metadata: Engram::EmbeddingMetadata.extract(candidate.),
      scope: scope,
      limit: 1
    ).first
    similarity = nearest ? Engram::Math.cosine_similarity(candidate.embedding, nearest.embedding) : 0.0

    if nearest && similarity >= @similarity_threshold
      Engram::Decision.new(action: :noop, candidate: candidate,
        reason: "near-duplicate (sim=#{similarity.round(3)})")
    else
      Engram::Decision.new(action: :add, candidate: candidate)
    end
  end
end