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
# File 'lib/engram/consolidators/heuristic_consolidator.rb', line 16

def reconcile_all(candidates:, scope:)
  Array(candidates).map do |candidate|
    nearest = @store.search(embedding: candidate.embedding, 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