Module: Legion::Extensions::Agentic::Inference::FreeEnergy::Runners::FreeEnergy

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

Constant Summary

Constants included from Helpers::Constants

Helpers::Constants::DEFAULT_PRECISION, Helpers::Constants::FREE_ENERGY_THRESHOLD, Helpers::Constants::INFERENCE_MODES, Helpers::Constants::LEARNING_RATE, Helpers::Constants::MAX_ACTIONS, Helpers::Constants::MAX_BELIEFS, Helpers::Constants::MAX_HISTORY, Helpers::Constants::PRECISION_CEILING, Helpers::Constants::PRECISION_DECAY, Helpers::Constants::PRECISION_FLOOR, Helpers::Constants::PRECISION_UPDATE_RATE, Helpers::Constants::STALE_THRESHOLD, Helpers::Constants::SURPRISE_LABELS

Instance Method Summary collapse

Instance Method Details

#add_generative_belief(content:, domain: :general, prediction: {}, precision: DEFAULT_PRECISION) ⇒ Object



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

def add_generative_belief(content:, domain: :general, prediction: {}, precision: DEFAULT_PRECISION, **)
  belief = engine.add_belief(content: content, domain: domain, prediction: prediction, precision: precision)
  return { success: false, reason: :limit_reached } unless belief

  { success: true, belief_id: belief.id, precision: belief.precision }
end

#compute_free_energyObject



45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 45

def compute_free_energy(**)
  {
    success:             true,
    total_free_energy:   engine.total_free_energy.round(4),
    surprise_level:      engine.surprise_level,
    high_surprise_count: engine.high_surprise_beliefs.size
  }
end

#domain_free_energy(domain:) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 68

def domain_free_energy(domain:, **)
  {
    success:      true,
    domain:       domain,
    free_energy:  engine.domain_free_energy(domain: domain).round(4),
    belief_count: engine.domain_beliefs(domain: domain).size
  }
end

#free_energy_statsObject



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

def free_energy_stats(**)
  { success: true }.merge(engine.to_h)
end

#high_surprise_beliefsObject



63
64
65
66
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 63

def high_surprise_beliefs(**)
  beliefs = engine.high_surprise_beliefs
  { success: true, beliefs: beliefs, count: beliefs.size }
end

#minimize_free_energy(belief_id:, mode: :perceptual) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 34

def minimize_free_energy(belief_id:, mode: :perceptual, **)
  result = engine.minimize(belief_id: belief_id, mode: mode)
  return { success: false, reason: :not_found } unless result

  if mode == :active
    { success: true, mode: :active }.merge(result)
  else
    { success: true, mode: :perceptual, belief_id: result.id, prediction: result.prediction }
  end
end

#observe_outcome(belief_id:, observation:) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 20

def observe_outcome(belief_id:, observation:, **)
  belief = engine.observe(belief_id: belief_id, observation: observation)
  return { success: false, reason: :not_found } unless belief

  {
    success:          true,
    belief_id:        belief_id,
    prediction_error: belief.prediction_error.round(4),
    free_energy:      belief.free_energy.round(4),
    surprising:       belief.surprising?,
    surprise_label:   belief.surprise_label
  }
end

#surprise_assessmentObject



54
55
56
57
58
59
60
61
# File 'lib/legion/extensions/agentic/inference/free_energy/runners/free_energy.rb', line 54

def surprise_assessment(**)
  {
    success:         true,
    surprise_level:  engine.surprise_level,
    most_surprising: engine.most_surprising,
    most_precise:    engine.most_precise
  }
end

#update_free_energyObject



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

def update_free_energy(**)
  engine.decay_stale
  { success: true }.merge(engine.to_h)
end