Class: Legion::Extensions::Agentic::Defense::ImmuneResponse::Helpers::ImmuneEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Defense::ImmuneResponse::Helpers::ImmuneEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb
Constant Summary
Constants included
from Constants
Constants::ANTIGEN_TYPES, Constants::DEFAULT_THREAT_LEVEL, Constants::HEALTH_LABELS, Constants::IMMUNITY_BOOST, Constants::IMMUNITY_DECAY, Constants::IMMUNITY_LABELS, Constants::MAX_ANTIBODIES, Constants::MAX_ANTIGENS, Constants::MAX_EXPOSURES, Constants::MAX_RESPONSES, Constants::MEMORY_CELL_THRESHOLD, Constants::REJECTION_THRESHOLD, Constants::RESPONSE_LABELS, Constants::RESPONSE_LEVELS, Constants::THREAT_ESCALATION, Constants::THREAT_LABELS, Constants::TOLERANCE_THRESHOLD
Instance Method Summary
collapse
Methods included from Constants
label_for
Constructor Details
Returns a new instance of ImmuneEngine.
12
13
14
15
16
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 12
def initialize
@antigens = {}
@antibodies = {}
@responses = {}
end
|
Instance Method Details
#benign_antigens ⇒ Object
88
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 88
def benign_antigens = @antigens.values.select(&:benign?)
|
#create_antibody(antigen_type:, signature:, immunity_level: 0.3) ⇒ Object
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 42
def create_antibody(antigen_type:, signature:, immunity_level: 0.3)
return nil unless ANTIGEN_TYPES.include?(antigen_type.to_sym)
prune_antibodies
antibody = Antibody.new(
antigen_type: antigen_type, signature: signature, immunity_level: immunity_level
)
@antibodies[antibody.id] = antibody
antibody
end
|
#critical_antigens ⇒ Object
87
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 87
def critical_antigens = @antigens.values.select(&:critical?)
|
#de_escalate_antigen(antigen_id:, amount: THREAT_ESCALATION) ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 72
def de_escalate_antigen(antigen_id:, amount: THREAT_ESCALATION)
antigen = @antigens[antigen_id]
return nil unless antigen
antigen.de_escalate!(amount)
antigen
end
|
#decay_all! ⇒ Object
59
60
61
62
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 59
def decay_all!
@antibodies.each_value(&:decay!)
{ antibodies_decayed: @antibodies.size }
end
|
#effective_antibodies ⇒ Object
90
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 90
def effective_antibodies = @antibodies.values.select(&:effective?)
|
#encounter(antigen_id:) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 29
def encounter(antigen_id:)
antigen = @antigens[antigen_id]
return nil unless antigen
antigen.expose!
antibody = find_matching_antibody(antigen)
response = generate_response(antigen, antibody)
antibody&.strengthen!
@responses[response.id] = response
prune_responses
response
end
|
#escalate_antigen(antigen_id:, amount: THREAT_ESCALATION) ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 64
def escalate_antigen(antigen_id:, amount: THREAT_ESCALATION)
antigen = @antigens[antigen_id]
return nil unless antigen
antigen.escalate!(amount)
antigen
end
|
#immune_report ⇒ Object
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 111
def immune_report
{
total_antigens: @antigens.size,
total_antibodies: @antibodies.size,
total_responses: @responses.size,
critical_count: critical_antigens.size,
memory_cell_count: memory_cells.size,
overall_health: overall_immune_health,
health_label: Constants.label_for(HEALTH_LABELS, overall_immune_health),
threat_by_type: threat_by_type,
most_exposed: most_exposed(limit: 3).map(&:to_h)
}
end
|
#immunity_for(antigen_type:) ⇒ Object
80
81
82
83
84
85
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 80
def immunity_for(antigen_type:)
matching = @antibodies.values.select { |ab| ab.antigen_type == antigen_type.to_sym }
return 0.0 if matching.empty?
matching.map(&:immunity_level).max.round(10)
end
|
#memory_cells ⇒ Object
89
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 89
def memory_cells = @antibodies.values.select(&:memory_cell?)
|
#most_exposed(limit: 5) ⇒ Object
125
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 125
def most_exposed(limit: 5) = @antigens.values.sort_by { |a| -a.exposure_count }.first(limit)
|
#most_threatening(limit: 5) ⇒ Object
126
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 126
def most_threatening(limit: 5) = @antigens.values.sort_by { |a| -a.threat_level }.first(limit)
|
#overall_immune_health ⇒ Object
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 100
def overall_immune_health
return 1.0 if @antigens.empty?
total_immunity = @antibodies.values.sum(&:immunity_level)
total_threat = @antigens.values.sum(&:threat_level)
denominator = total_immunity + total_threat
return 0.5 if denominator.zero?
(total_immunity / denominator).clamp(0.0, 1.0).round(10)
end
|
#register_antigen(pattern:, antigen_type:, threat_level: DEFAULT_THREAT_LEVEL) ⇒ Object
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 18
def register_antigen(pattern:, antigen_type:, threat_level: DEFAULT_THREAT_LEVEL)
return nil unless ANTIGEN_TYPES.include?(antigen_type.to_sym)
prune_antigens
antigen = Antigen.new(
pattern: pattern, antigen_type: antigen_type, threat_level: threat_level
)
@antigens[antigen.id] = antigen
antigen
end
|
#responses_for(antigen_id:) ⇒ Object
91
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 91
def responses_for(antigen_id:) = @responses.values.select { |r| r.antigen_id == antigen_id }
|
#strongest_antibodies(limit: 5) ⇒ Object
127
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 127
def strongest_antibodies(limit: 5) = @antibodies.values.sort_by { |ab| -ab.immunity_level }.first(limit)
|
#threat_by_type ⇒ Object
93
94
95
96
97
98
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 93
def threat_by_type
ANTIGEN_TYPES.each_with_object({}) do |type, hash|
matching = @antigens.values.select { |a| a.antigen_type == type }
hash[type] = matching.empty? ? 0.0 : (matching.sum(&:threat_level) / matching.size).round(10)
end
end
|
#to_h ⇒ Object
129
130
131
132
133
134
135
136
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 129
def to_h
{
antigens: @antigens.size,
antibodies: @antibodies.size,
responses: @responses.size,
overall_health: overall_immune_health
}
end
|
#vaccinate(antigen_type:, signature:) ⇒ Object
53
54
55
56
57
|
# File 'lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb', line 53
def vaccinate(antigen_type:, signature:)
create_antibody(
antigen_type: antigen_type, signature: signature, immunity_level: 0.6
)
end
|