Class: Legion::Extensions::Agentic::Attention::Focus::Helpers::FocusManager

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFocusManager

Returns a new instance of FocusManager.



12
13
14
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 12

def initialize
  @manual_focus = {}
end

Instance Attribute Details

#manual_focusObject (readonly)

Returns the value of attribute manual_focus.



10
11
12
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 10

def manual_focus
  @manual_focus
end

Instance Method Details

#focus_boost(domain) ⇒ Object



37
38
39
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 37

def focus_boost(domain)
  focused?(domain) ? Constants::FOCUS_BOOST : 0.0
end

#focus_on(domain, reason: nil) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 16

def focus_on(domain, reason: nil)
  domain = domain.to_sym
  return :already_focused if @manual_focus.key?(domain)
  return :capacity_full if @manual_focus.size >= Constants::MAX_MANUAL_FOCUS

  @manual_focus[domain] = { reason: reason, focused_at: Time.now.utc }
  :focused
end

#focused?(domain) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 33

def focused?(domain)
  @manual_focus.key?(domain.to_sym)
end

#goal_relevance(signal, active_wonders: []) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 41

def goal_relevance(signal, active_wonders: [])
  domain = Focus.extract_domain(signal)
  base_relevance = focus_boost(domain)

  wonder_relevance = compute_wonder_relevance(signal, active_wonders)
  [base_relevance + wonder_relevance, 1.0].min
end

#release(domain) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb', line 25

def release(domain)
  domain = domain.to_sym
  return :not_focused unless @manual_focus.key?(domain)

  @manual_focus.delete(domain)
  :released
end