Class: Legion::Extensions::Agentic::Social::Entrainment::Helpers::EntrainmentEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Social::Entrainment::Helpers::EntrainmentEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb
Constant Summary
Constants included
from Constants
Constants::COUPLING_RATE, Constants::DECOUPLING_RATE, Constants::DEFAULT_SYNC, Constants::ENTRAINED_THRESHOLD, Constants::MAX_HISTORY, Constants::MAX_PAIRINGS, Constants::MAX_SIGNALS, Constants::NATURAL_DRIFT, Constants::PARTIAL_THRESHOLD, Constants::SIGNAL_TYPES, Constants::SYNC_CEILING, Constants::SYNC_FLOOR, Constants::SYNC_LABELS
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of EntrainmentEngine.
14
15
16
17
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 14
def initialize
@pairings = {}
@history = []
end
|
Instance Attribute Details
#history ⇒ Object
Returns the value of attribute history.
12
13
14
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 12
def history
@history
end
|
Instance Method Details
#by_domain(domain:) ⇒ Object
63
64
65
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 63
def by_domain(domain:)
@pairings.values.select { |p| p.domain == domain }
end
|
#create_pairing(agent_a:, agent_b:, domain:) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 19
def create_pairing(agent_a:, agent_b:, domain:)
evict_oldest if @pairings.size >= MAX_PAIRINGS
existing = find_pairing(agent_a: agent_a, agent_b: agent_b, domain: domain)
return existing if existing
pairing = Pairing.new(agent_a: agent_a, agent_b: agent_b, domain: domain)
@pairings[pairing.id] = pairing
record_history(:created, pairing.id)
pairing
end
|
#drift_all ⇒ Object
73
74
75
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 73
def drift_all
@pairings.each_value(&:drift!)
end
|
#entrained_pairings ⇒ Object
49
50
51
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 49
def entrained_pairings
@pairings.values.select(&:entrained?)
end
|
#entrained_partners(agent_id:) ⇒ Object
53
54
55
56
57
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 53
def entrained_partners(agent_id:)
pairings_for(agent_id: agent_id)
.select(&:entrained?)
.map { |p| p.partner_of(agent_id) }
end
|
#overall_entrainment ⇒ Object
67
68
69
70
71
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 67
def overall_entrainment
return 0.0 if @pairings.empty?
@pairings.values.sum(&:synchrony) / @pairings.size
end
|
#pairings_for(agent_id:) ⇒ Object
45
46
47
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 45
def pairings_for(agent_id:)
@pairings.values.select { |p| p.involves?(agent_id) }
end
|
#prune_independent ⇒ Object
77
78
79
80
81
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 77
def prune_independent
ids = @pairings.select { |_id, p| p.synchrony <= 0.02 }.keys
ids.each { |id| @pairings.delete(id) }
ids.size
end
|
#record_interaction(pairing_id:, aligned:) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 31
def record_interaction(pairing_id:, aligned:)
pairing = @pairings[pairing_id]
return { success: false, reason: :not_found } unless pairing
pairing.interact!(aligned: aligned)
record_history(:interacted, pairing_id)
{
success: true,
synchrony: pairing.synchrony,
entrained: pairing.entrained?,
sync_label: pairing.sync_label
}
end
|
#strongest_pairings(limit: 5) ⇒ Object
59
60
61
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 59
def strongest_pairings(limit: 5)
@pairings.values.sort_by { |p| -p.synchrony }.first(limit)
end
|
#to_h ⇒ Object
83
84
85
86
87
88
89
90
|
# File 'lib/legion/extensions/agentic/social/entrainment/helpers/entrainment_engine.rb', line 83
def to_h
{
total_pairings: @pairings.size,
entrained_count: entrained_pairings.size,
overall_sync: overall_entrainment,
history_count: @history.size
}
end
|