Module: Legion::Extensions::Agentic::Homeostasis::Hourglass::Runners::CognitiveHourglass

Extended by:
CognitiveHourglass
Includes:
Helpers::Lex
Included in:
Client, CognitiveHourglass
Defined in:
lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb

Instance Method Summary collapse

Instance Method Details

#create_grain(grain_type: :attention, domain: nil, content: nil, weight: 1.0, engine: nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 15

def create_grain(grain_type: :attention, domain: nil, content: nil, weight: 1.0,
                 engine: nil, **)
  eng   = engine || hourglass_engine
  grain = eng.create_grain(
    grain_type: grain_type.to_sym,
    domain:     domain,
    content:    content,
    weight:     weight.to_f
  )
  log.debug("[cognitive_hourglass] grain created: type=#{grain_type} domain=#{domain} weight=#{grain.weight}")
  { success: true, grain: grain.to_h }
rescue ArgumentError => e
  log.error("[cognitive_hourglass] create_grain failed: #{e.message}")
  { success: false, error: e.message }
end

#create_hourglass(domain: nil, grain_type: :attention, top_level: 1.0, neck_width: 0.5, bottom_level: 0.0, engine: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 31

def create_hourglass(domain: nil, grain_type: :attention, top_level: 1.0,
                     neck_width: 0.5, bottom_level: 0.0, engine: nil, **)
  eng        = engine || hourglass_engine
  hourglass  = eng.create_hourglass(
    domain:       domain,
    grain_type:   grain_type.to_sym,
    top_level:    top_level.to_f,
    neck_width:   neck_width.to_f,
    bottom_level: bottom_level.to_f
  )
  log.debug("[cognitive_hourglass] hourglass created: id=#{hourglass.id} " \
            "domain=#{domain} grain_type=#{grain_type} top=#{hourglass.top_level}")
  { success: true, hourglass: hourglass.to_h }
rescue ArgumentError => e
  log.error("[cognitive_hourglass] create_hourglass failed: #{e.message}")
  { success: false, error: e.message }
end

#flip(hourglass_id:, engine: nil) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 60

def flip(hourglass_id:, engine: nil, **)
  eng       = engine || hourglass_engine
  hourglass = eng.flip(hourglass_id)
  log.debug("[cognitive_hourglass] flipped: id=#{hourglass_id} top=#{hourglass.top_level}")
  { success: true, hourglass: hourglass.to_h }
rescue ArgumentError => e
  log.error("[cognitive_hourglass] flip failed: #{e.message}")
  { success: false, error: e.message }
end

#flow_tick(rate: Helpers::Constants::FLOW_RATE, engine: nil) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 49

def flow_tick(rate: Helpers::Constants::FLOW_RATE, engine: nil, **)
  eng    = engine || hourglass_engine
  result = eng.flow_tick(rate.to_f)
  log.debug("[cognitive_hourglass] flow_tick: ticked=#{result[:ticked]} " \
            "expired=#{result[:expired]} blocked=#{result[:blocked]}")
  result.merge(success: true)
rescue ArgumentError => e
  log.error("[cognitive_hourglass] flow_tick failed: #{e.message}")
  { success: false, error: e.message }
end

#list_hourglasses(engine: nil) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 70

def list_hourglasses(engine: nil, **)
  eng  = engine || hourglass_engine
  list = eng.hourglasses.values.map(&:to_h)
  log.debug("[cognitive_hourglass] list_hourglasses: count=#{list.size}")
  { success: true, hourglasses: list, count: list.size }
rescue ArgumentError => e
  log.error("[cognitive_hourglass] list_hourglasses failed: #{e.message}")
  { success: false, error: e.message }
end

#time_status(engine: nil) ⇒ Object



80
81
82
83
84
85
86
87
88
89
# File 'lib/legion/extensions/agentic/homeostasis/hourglass/runners/cognitive_hourglass.rb', line 80

def time_status(engine: nil, **)
  eng    = engine || hourglass_engine
  report = eng.flow_report
  log.debug("[cognitive_hourglass] time_status: total=#{report[:total]} " \
            "flowing=#{report[:flowing]} empty=#{report[:empty]}")
  report.merge(success: true)
rescue ArgumentError => e
  log.error("[cognitive_hourglass] time_status failed: #{e.message}")
  { success: false, error: e.message }
end