Class: Llmemory::LongTerm::GraphBased::ConflictResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/llmemory/long_term/graph_based/conflict_resolver.rb

Constant Summary collapse

EXCLUSIVE_PREDICATES =
%w[works_at lives_in current_job current_city employer residence].freeze

Instance Method Summary collapse

Constructor Details

#initialize(knowledge_graph) ⇒ ConflictResolver

Returns a new instance of ConflictResolver.



11
12
13
# File 'lib/llmemory/long_term/graph_based/conflict_resolver.rb', line 11

def initialize(knowledge_graph)
  @graph = knowledge_graph
end

Instance Method Details

#exclusive_predicate?(predicate) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/llmemory/long_term/graph_based/conflict_resolver.rb', line 27

def exclusive_predicate?(predicate)
  EXCLUSIVE_PREDICATES.include?(predicate.to_s.downcase)
end

#resolve(new_edge) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/llmemory/long_term/graph_based/conflict_resolver.rb', line 15

def resolve(new_edge)
  return [] unless exclusive_predicate?(new_edge.predicate)

  subject_id = new_edge.subject_id
  existing = @graph.find_edges(subject: subject_id, predicate: new_edge.predicate, include_archived: false)
  to_archive = existing.reject { |e| e.target_id == new_edge.target_id }
  to_archive.each do |e|
    @graph.archive_edge(e.id, reason: "replaced by #{new_edge.target_id}")
  end
  to_archive.map(&:id)
end