Module: Legion::Extensions::Agentic::Social::JointAttention::Runners::JointAttention

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

Instance Method Summary collapse

Instance Method Details

#attention_targets_for(agent_id:) ⇒ Object



58
59
60
61
62
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 58

def attention_targets_for(agent_id:, **)
  targets = joint_focus_manager.targets_for_agent(agent_id: agent_id)
  log.debug "[joint_attention] targets_for: agent_id=#{agent_id} count=#{targets.size}"
  { success: true, agent_id: agent_id, targets: targets.map(&:to_h), count: targets.size }
end

#create_attention_target(name:, domain:, creator:, priority: 0.5) ⇒ Object



13
14
15
16
17
18
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 13

def create_attention_target(name:, domain:, creator:, priority: 0.5, **)
  target = joint_focus_manager.create_target(name: name, domain: domain, priority: priority, creator: creator)
  log.debug "[joint_attention] create_target: name=#{name} domain=#{domain} priority=#{priority} " \
            "creator=#{creator} id=#{target.id}"
  { success: true, target: target.to_h }
end

#direct_attention(from_agent:, to_agent:, target_id:) ⇒ Object



32
33
34
35
36
37
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 32

def direct_attention(from_agent:, to_agent:, target_id:, **)
  result = joint_focus_manager.direct_attention(from_agent: from_agent, to_agent: to_agent, target_id: target_id)
  log.debug "[joint_attention] direct: from=#{from_agent} to=#{to_agent} target_id=#{target_id} result=#{result}"
  { success: %i[directed already_attending].include?(result), result: result, target_id: target_id,
    from_agent: from_agent, to_agent: to_agent }
end

#establish_mutual_awareness(target_id:, agent_a:, agent_b:) ⇒ Object



39
40
41
42
43
44
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 39

def establish_mutual_awareness(target_id:, agent_a:, agent_b:, **)
  result = joint_focus_manager.establish_shared(target_id: target_id, agent_a: agent_a, agent_b: agent_b)
  log.debug "[joint_attention] mutual_awareness: target_id=#{target_id} " \
            "agent_a=#{agent_a} agent_b=#{agent_b} result=#{result}"
  { success: result == :established, result: result, target_id: target_id, agent_a: agent_a, agent_b: agent_b }
end

#join_attention(target_id:, agent_id:, gaze: nil) ⇒ Object



20
21
22
23
24
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 20

def join_attention(target_id:, agent_id:, gaze: nil, **)
  result = joint_focus_manager.join_target(target_id: target_id, agent_id: agent_id, gaze: gaze)
  log.debug "[joint_attention] join: target_id=#{target_id} agent_id=#{agent_id} gaze=#{gaze} result=#{result}"
  { success: %i[joined already_attending].include?(result), result: result, target_id: target_id, agent_id: agent_id }
end

#joint_attention_statsObject



71
72
73
74
75
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 71

def joint_attention_stats(**)
  stats = joint_focus_manager.to_h
  log.debug "[joint_attention] stats: targets=#{stats[:target_count]} agents=#{stats[:agent_count]}"
  { success: true, stats: stats }
end

#leave_attention(target_id:, agent_id:) ⇒ Object



26
27
28
29
30
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 26

def leave_attention(target_id:, agent_id:, **)
  result = joint_focus_manager.leave_target(target_id: target_id, agent_id: agent_id)
  log.debug "[joint_attention] leave: target_id=#{target_id} agent_id=#{agent_id} result=#{result}"
  { success: result == :removed, result: result, target_id: target_id, agent_id: agent_id }
end

#shared_focus(agent_a:, agent_b:) ⇒ Object



52
53
54
55
56
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 52

def shared_focus(agent_a:, agent_b:, **)
  targets = joint_focus_manager.shared_targets(agent_a: agent_a, agent_b: agent_b)
  log.debug "[joint_attention] shared_focus: agent_a=#{agent_a} agent_b=#{agent_b} count=#{targets.size}"
  { success: true, agent_a: agent_a, agent_b: agent_b, shared_targets: targets.map(&:to_h), count: targets.size }
end

#update_gaze(target_id:, agent_id:, gaze:) ⇒ Object



46
47
48
49
50
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 46

def update_gaze(target_id:, agent_id:, gaze:, **)
  result = joint_focus_manager.update_gaze(target_id: target_id, agent_id: agent_id, gaze: gaze)
  log.debug "[joint_attention] update_gaze: target_id=#{target_id} agent_id=#{agent_id} gaze=#{gaze} result=#{result}"
  { success: result == :updated, result: result, target_id: target_id, agent_id: agent_id, gaze: gaze }
end

#update_joint_attentionObject



64
65
66
67
68
69
# File 'lib/legion/extensions/agentic/social/joint_attention/runners/joint_attention.rb', line 64

def update_joint_attention(**)
  joint_focus_manager.decay_all
  stats = joint_focus_manager.to_h
  log.debug "[joint_attention] decay_tick: targets=#{stats[:target_count]} agents=#{stats[:agent_count]}"
  { success: true, targets: stats[:target_count], agents: stats[:agent_count], history: stats[:history_size] }
end