Class: Legion::Extensions::Agentic::Integration::Gestalt::Helpers::PatternStore

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePatternStore

Returns a new instance of PatternStore.



12
13
14
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 12

def initialize
  @patterns = []
end

Instance Attribute Details

#patternsObject (readonly)

Returns the value of attribute patterns.



10
11
12
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 10

def patterns
  @patterns
end

Instance Method Details

#add(name:, elements:, domain: :general) ⇒ Object



16
17
18
19
20
21
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 16

def add(name:, elements:, domain: :general)
  pattern = Pattern.new(name: name, elements: elements, domain: domain)
  @patterns << pattern
  trim
  pattern
end

#complete(fragment, domain: nil) ⇒ Object



35
36
37
38
39
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 35

def complete(fragment, domain: nil)
  candidates = domain ? in_domain(domain) : @patterns
  completions = candidates.filter_map { |p| p.complete(fragment) }
  completions.sort_by { |c| -c[:confidence] }.first(Constants::MAX_COMPLETIONS)
end

#decay_allObject



83
84
85
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 83

def decay_all
  @patterns.each(&:decay)
end

#find(id) ⇒ Object



23
24
25
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 23

def find(id)
  @patterns.find { |p| p.id == id }
end

#find_by_name(name) ⇒ Object



27
28
29
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 27

def find_by_name(name)
  @patterns.select { |p| p.name == name }
end

#group_by_proximity(items, threshold: Constants::PROXIMITY_THRESHOLD) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 41

def group_by_proximity(items, threshold: Constants::PROXIMITY_THRESHOLD)
  return [items] if items.size <= 1

  groups = []
  remaining = items.dup

  until remaining.empty?
    seed = remaining.shift
    group = [seed]
    remaining.reject! do |item|
      if proximity(seed, item) <= threshold
        group << item
        true
      else
        false
      end
    end
    groups << group
  end
  groups
end

#group_by_similarity(items, key: :type) ⇒ Object



63
64
65
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 63

def group_by_similarity(items, key: :type, **)
  items.group_by { |item| item.is_a?(Hash) ? item[key] : item }.values
end

#in_domain(domain) ⇒ Object



31
32
33
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 31

def in_domain(domain)
  @patterns.select { |p| p.domain == domain }
end

#penalize(id) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 75

def penalize(id)
  pattern = find(id)
  return nil unless pattern

  pattern.penalize
  pattern
end

#reinforce(id) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 67

def reinforce(id)
  pattern = find(id)
  return nil unless pattern

  pattern.reinforce
  pattern
end

#remove(id) ⇒ Object



87
88
89
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 87

def remove(id)
  @patterns.reject! { |p| p.id == id }
end

#sizeObject



91
92
93
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 91

def size
  @patterns.size
end

#to_hObject



95
96
97
98
99
100
101
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 95

def to_h
  {
    pattern_count: @patterns.size,
    by_domain:     @patterns.group_by(&:domain).transform_values(&:size),
    total_matches: @patterns.sum(&:match_count)
  }
end