Class: Legion::Extensions::Agentic::Integration::Gestalt::Helpers::PatternStore
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Integration::Gestalt::Helpers::PatternStore
- Defined in:
- lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb
Instance Attribute Summary collapse
-
#patterns ⇒ Object
readonly
Returns the value of attribute patterns.
Instance Method Summary collapse
- #add(name:, elements:, domain: :general) ⇒ Object
- #complete(fragment, domain: nil) ⇒ Object
- #decay_all ⇒ Object
- #find(id) ⇒ Object
- #find_by_name(name) ⇒ Object
- #group_by_proximity(items, threshold: Constants::PROXIMITY_THRESHOLD) ⇒ Object
- #group_by_similarity(items, key: :type) ⇒ Object
- #in_domain(domain) ⇒ Object
-
#initialize ⇒ PatternStore
constructor
A new instance of PatternStore.
- #penalize(id) ⇒ Object
- #reinforce(id) ⇒ Object
- #remove(id) ⇒ Object
- #size ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ PatternStore
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
#patterns ⇒ Object (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_all ⇒ Object
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 |
#size ⇒ Object
91 92 93 |
# File 'lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb', line 91 def size @patterns.size end |
#to_h ⇒ Object
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 |