Module: Legion::Extensions::Agentic::Inference::CausalAttribution::Runners::CausalAttribution

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

Instance Method Summary collapse

Instance Method Details

#attribution_bias_assessmentObject



70
71
72
73
74
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 70

def attribution_bias_assessment(**)
  bias = engine.attribution_bias
  log.debug "[causal_attribution] bias_assessment self_serving=#{bias[:self_serving_bias_detected]}"
  { success: true, bias: bias }
end

#attributions_by_pattern(locus: nil, stability: nil, controllability: nil) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 48

def attributions_by_pattern(locus: nil, stability: nil, controllability: nil, **)
  results = engine.by_pattern(
    locus:           locus&.to_sym,
    stability:       stability&.to_sym,
    controllability: controllability&.to_sym
  )
  log.debug "[causal_attribution] by_pattern count=#{results.size}"
  { success: true, attributions: results.map(&:to_h), count: results.size }
end

#causal_attribution_statsObject



94
95
96
97
98
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 94

def causal_attribution_stats(**)
  stats = engine.to_h
  log.debug "[causal_attribution] stats total=#{stats[:total_attributions]}"
  { success: true, stats: stats }
end

#create_causal_attribution(event:, outcome:, domain:, locus:, stability:, controllability:, confidence: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 13

def create_causal_attribution(event:, outcome:, domain:, locus:, stability:, controllability:,
                              confidence: nil, **)
  conf = (confidence || Helpers::Attribution::DEFAULT_CONFIDENCE)
         .clamp(Helpers::Attribution::CONFIDENCE_FLOOR, Helpers::Attribution::CONFIDENCE_CEILING)
  attr = engine.create_attribution(
    event:           event,
    outcome:         outcome,
    domain:          domain,
    locus:           locus.to_sym,
    stability:       stability.to_sym,
    controllability: controllability.to_sym,
    confidence:      conf
  )
  log.info "[causal_attribution] create id=#{attr.id} event=#{event} " \
           "outcome=#{outcome} locus=#{locus} emotion=#{attr.emotional_response}"
  { success: true, attribution: attr.to_h }
end

#domain_attributions(domain:) ⇒ Object



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

def domain_attributions(domain:, **)
  results = engine.by_domain(domain: domain.to_sym)
  log.debug "[causal_attribution] by_domain domain=#{domain} count=#{results.size}"
  { success: true, attributions: results.map(&:to_h), count: results.size }
end

#emotional_attribution_profileObject



76
77
78
79
80
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 76

def emotional_attribution_profile(**)
  profile = engine.emotional_profile
  log.debug "[causal_attribution] emotional_profile dominant=#{profile[:dominant]} total=#{profile[:total]}"
  { success: true, profile: profile }
end

#most_common_attributionObject



82
83
84
85
86
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 82

def most_common_attribution(**)
  result = engine.most_common_pattern
  log.debug "[causal_attribution] most_common pattern=#{result[:pattern].inspect} count=#{result[:count]}"
  { success: true, pattern: result[:pattern], count: result[:count] }
end

#outcome_attributions(outcome:) ⇒ Object



64
65
66
67
68
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 64

def outcome_attributions(outcome:, **)
  results = engine.by_outcome(outcome: outcome.to_sym)
  log.debug "[causal_attribution] by_outcome outcome=#{outcome} count=#{results.size}"
  { success: true, attributions: results.map(&:to_h), count: results.size }
end

#reattribute_cause(attribution_id:, locus: nil, stability: nil, controllability: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 31

def reattribute_cause(attribution_id:, locus: nil, stability: nil, controllability: nil, **)
  result = engine.reattribute(
    attribution_id:  attribution_id,
    locus:           locus&.to_sym,
    stability:       stability&.to_sym,
    controllability: controllability&.to_sym
  )
  if result.is_a?(Hash) && result[:found] == false
    log.warn "[causal_attribution] reattribute not_found id=#{attribution_id}"
    return { success: false, attribution_id: attribution_id, found: false }
  end

  log.debug "[causal_attribution] reattribute id=#{attribution_id} " \
            "locus=#{result.locus} emotion=#{result.emotional_response}"
  { success: true, attribution: result.to_h }
end

#update_causal_attributionObject



88
89
90
91
92
# File 'lib/legion/extensions/agentic/inference/causal_attribution/runners/causal_attribution.rb', line 88

def update_causal_attribution(**)
  decayed = engine.decay_all
  log.debug "[causal_attribution] decay cycle entries=#{decayed}"
  { success: true, decayed: decayed }
end