Module: Legion::Extensions::Agentic::Integration::Gestalt::Runners::Gestalt

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb

Instance Method Summary collapse

Instance Method Details

#complete_pattern(fragment:, domain: nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 22

def complete_pattern(fragment:, domain: nil, **)
  completions = store.complete(fragment, domain: domain)
  log.debug("[gestalt] complete: #{completions.size} candidates for #{fragment.size} elements")
  {
    success:     true,
    completions: completions,
    count:       completions.size,
    best:        completions.first
  }
end

#confirm_completion(pattern_id:, correct: true) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 33

def confirm_completion(pattern_id:, correct: true, **)
  result = if correct
             store.reinforce(pattern_id)
           else
             store.penalize(pattern_id)
           end
  return { success: false, reason: :not_found } unless result

  log.debug("[gestalt] #{correct ? 'reinforced' : 'penalized'} pattern=#{pattern_id}")
  { success: true, pattern: result.to_h }
end

#gestalt_statsObject



73
74
75
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 73

def gestalt_stats(**)
  { success: true, stats: store.to_h }
end

#group_items(items:, principle: :proximity) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 45

def group_items(items:, principle: :proximity, **)
  groups = case principle
           when :proximity
             store.group_by_proximity(items)
           when :similarity
             store.group_by_similarity(items)
           else
             [items]
           end
  { success: true, groups: groups, group_count: groups.size, principle: principle }
end

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



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

def learn_pattern(name:, elements:, domain: :general, **)
  pattern = store.add(name: name, elements: elements, domain: domain)
  log.debug("[gestalt] learned pattern=#{name} domain=#{domain} size=#{elements.size}")
  { success: true, pattern: pattern.to_h }
end

#patterns_in_domain(domain:) ⇒ Object



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

def patterns_in_domain(domain:, **)
  patterns = store.in_domain(domain)
  { success: true, patterns: patterns.map(&:to_h), count: patterns.size }
end

#remove_pattern(id:) ⇒ Object



68
69
70
71
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 68

def remove_pattern(id:, **)
  store.remove(id)
  { success: true }
end

#storeObject



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

def store
  @store ||= Helpers::PatternStore.new
end

#update_gestaltObject



57
58
59
60
61
# File 'lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb', line 57

def update_gestalt(**)
  store.decay_all
  log.debug("[gestalt] tick: patterns=#{store.size}")
  { success: true, pattern_count: store.size }
end