Class: Legion::Extensions::Agentic::Defense::EpistemicVigilance::Helpers::VigilanceEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Defense::EpistemicVigilance::Helpers::VigilanceEngine
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb
Constant Summary
Constants included
from Constants
Constants::CLAIM_VERDICTS, Constants::COHERENCE_WEIGHT, Constants::CONSISTENCY_WEIGHT, Constants::DECAY_RATE, Constants::DEFAULT_SOURCE_RELIABILITY, Constants::MAX_CLAIMS, Constants::MAX_HISTORY, Constants::MAX_SOURCES, Constants::RELIABILITY_BOOST, Constants::RELIABILITY_PENALTY, Constants::SOURCE_RELIABILITY_LABELS, Constants::SOURCE_WEIGHT, Constants::VIGILANCE_LEVELS, Constants::VIGILANCE_THRESHOLDS
Instance Method Summary
collapse
Constructor Details
Returns a new instance of VigilanceEngine.
12
13
14
15
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 12
def initialize
@sources = {}
@claims = {}
end
|
Instance Method Details
#adjudicate_claim(claim_id:, verdict:) ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 76
def adjudicate_claim(claim_id:, verdict:)
return nil unless CLAIM_VERDICTS.include?(verdict.to_sym)
claim = @claims[claim_id]
source = claim && @sources[claim.source_id]
return { error: :claim_not_found } unless claim
claim.adjudicate!(verdict: verdict)
update_source_on_adjudication(source, verdict)
{ claim_id: claim_id, verdict: verdict }
end
|
#assess_claim(claim_id:) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 35
def assess_claim(claim_id:)
claim = @claims[claim_id]
return { error: :claim_not_found } unless claim
source = @sources[claim.source_id]
source_score = build_source_score(source)
consist_score = claim.credibility_ratio * CONSISTENCY_WEIGHT
coher_score = domain_coherence_score(claim.domain, exclude_id: claim_id)
total = source_score + consist_score + coher_score
verdict = recommended_verdict(total)
{
claim_id: claim_id,
source_score: source_score,
consistency_score: consist_score,
coherence_score: coher_score,
total_score: total,
recommended_verdict: verdict
}
end
|
#challenge_claim(claim_id:) ⇒ Object
66
67
68
69
70
71
72
73
74
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 66
def challenge_claim(claim_id:)
claim = @claims[claim_id]
source = claim && @sources[claim.source_id]
return { error: :claim_not_found } unless claim
claim.challenge!
source&.record_refuted!
{ claim_id: claim_id, confidence: claim.confidence, evidence_against: claim.evidence_against }
end
|
#claims_by_domain(domain:) ⇒ Object
103
104
105
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 103
def claims_by_domain(domain:)
@claims.values.select { |c| c.domain == domain }.map(&:to_h)
end
|
#claims_by_source(source_id:) ⇒ Object
99
100
101
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 99
def claims_by_source(source_id:)
@claims.values.select { |c| c.source_id == source_id }.map(&:to_h)
end
|
#contested_claims ⇒ Object
95
96
97
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 95
def contested_claims
@claims.values.select(&:contested?).map(&:to_h)
end
|
#decay_all ⇒ Object
115
116
117
118
119
120
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 115
def decay_all
@claims.each_value do |claim|
claim.confidence = (claim.confidence - DECAY_RATE).clamp(0.0, 1.0)
end
{ decayed: @claims.size }
end
|
#domain_vigilance_level(domain:) ⇒ Object
107
108
109
110
111
112
113
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 107
def domain_vigilance_level(domain:)
domain_claims = @claims.values.select { |c| c.domain == domain }
return :skeptical if domain_claims.empty?
avg = domain_claims.sum(&:confidence) / domain_claims.size.to_f
level_for_score(avg)
end
|
#prune_rejected ⇒ Object
122
123
124
125
126
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 122
def prune_rejected
before = @claims.size
@claims.reject! { |_, c| c.verdict == :rejected && c.confidence < 0.1 }
{ pruned: before - @claims.size, remaining: @claims.size }
end
|
#register_source(name:, domain:) ⇒ Object
17
18
19
20
21
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 17
def register_source(name:, domain:)
source = Source.new(name: name, domain: domain)
@sources[source.id] = source
source.to_h
end
|
#source_reliability(source_id:) ⇒ Object
88
89
90
91
92
93
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 88
def source_reliability(source_id:)
source = @sources[source_id]
return { error: :source_not_found } unless source
{ source_id: source_id, reliability: source.reliability, label: source.reliability_label }
end
|
#submit_claim(content:, source_id:, domain:, initial_confidence: 0.5) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 23
def submit_claim(content:, source_id:, domain:, initial_confidence: 0.5)
source = @sources[source_id]
return { error: :source_not_found } unless source
claim = Claim.new(content: content, source_id: source_id, domain: domain,
confidence: initial_confidence)
source.instance_variable_set(:@claims_made, source.claims_made + 1)
@claims[claim.id] = claim
assessment = assess_claim(claim_id: claim.id)
{ claim: claim.to_h, assessment: assessment }
end
|
#support_claim(claim_id:) ⇒ Object
56
57
58
59
60
61
62
63
64
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 56
def support_claim(claim_id:)
claim = @claims[claim_id]
source = claim && @sources[claim.source_id]
return { error: :claim_not_found } unless claim
claim.support!
source&.record_verified!
{ claim_id: claim_id, confidence: claim.confidence, evidence_for: claim.evidence_for }
end
|
#to_h ⇒ Object
128
129
130
131
132
133
134
135
|
# File 'lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb', line 128
def to_h
{
sources_count: @sources.size,
claims_count: @claims.size,
contested: contested_claims.size,
by_verdict: verdict_counts
}
end
|