Module: Legion::Extensions::Agentic::Inference::Bayesian::Runners::BayesianBelief
- Includes:
- Helpers::Lex
- Included in:
- Client
- Defined in:
- lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb
Instance Method Summary collapse
- #add_bayesian_belief(content:, domain:, prior: nil) ⇒ Object
- #batch_bayesian_update(evidence_id:, likelihoods:) ⇒ Object
- #bayesian_belief_stats ⇒ Object
- #belief_entropy(domain: nil) ⇒ Object
- #information_gain(belief_id:, evidence_id:, likelihood:) ⇒ Object
- #least_probable_beliefs(domain: nil, limit: 5) ⇒ Object
- #most_probable_beliefs(domain: nil, limit: 5) ⇒ Object
- #posterior_distribution(domain: nil) ⇒ Object
- #update_bayesian_belief(belief_id:, evidence_id:, likelihood:) ⇒ Object
- #update_bayesian_beliefs ⇒ Object
Instance Method Details
#add_bayesian_belief(content:, domain:, prior: nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 13 def add_bayesian_belief(content:, domain:, prior: nil, **) pri = (prior || Helpers::Constants::DEFAULT_PRIOR).clamp( Helpers::Constants::PRIOR_FLOOR, Helpers::Constants::PRIOR_CEILING ) belief = belief_network.add_belief(content: content, domain: domain, prior: pri) unless belief log.warn "[bayesian_belief] add failed: network at capacity (#{Helpers::Constants::MAX_HYPOTHESES})" return { success: false, reason: :capacity_exceeded, max: Helpers::Constants::MAX_HYPOTHESES } end log.debug "[bayesian_belief] add: id=#{belief.id[0..7]} domain=#{domain} prior=#{pri.round(3)}" { success: true, belief_id: belief.id, domain: domain, prior: belief.prior, posterior: belief.posterior } end |
#batch_bayesian_update(evidence_id:, likelihoods:) ⇒ Object
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 49 def batch_bayesian_update(evidence_id:, likelihoods:, **) if likelihoods.nil? || likelihoods.empty? log.debug '[bayesian_belief] batch_update: empty likelihoods, skipping' return { success: true, updated: 0, posteriors: {} } end posteriors = belief_network.batch_update(evidence_id: evidence_id, likelihoods: likelihoods) log.debug "[bayesian_belief] batch_update: evidence=#{evidence_id} updated=#{posteriors.size}" { success: true, evidence_id: evidence_id, updated: posteriors.size, posteriors: posteriors } end |
#bayesian_belief_stats ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 97 def bayesian_belief_stats(**) total = belief_network.count ent = belief_network.entropy most = belief_network.most_probable(limit: 1).first least = belief_network.least_probable(limit: 1).first log.debug "[bayesian_belief] stats: total=#{total} entropy=#{ent.round(4)}" { success: true, total_beliefs: total, entropy: ent, most_probable: most&.to_h, least_probable: least&.to_h, capacity: Helpers::Constants::MAX_HYPOTHESES } end |
#belief_entropy(domain: nil) ⇒ Object
85 86 87 88 89 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 85 def belief_entropy(domain: nil, **) ent = belief_network.entropy(domain: domain) log.debug "[bayesian_belief] entropy: domain=#{domain.inspect} entropy=#{ent.round(4)}" { success: true, domain: domain, entropy: ent } end |
#information_gain(belief_id:, evidence_id:, likelihood:) ⇒ Object
78 79 80 81 82 83 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 78 def information_gain(belief_id:, evidence_id:, likelihood:, **) clamped = likelihood.clamp(Helpers::Constants::LIKELIHOOD_FLOOR, Helpers::Constants::LIKELIHOOD_CEILING) gain = belief_network.information_gain(belief_id: belief_id, evidence_id: evidence_id, likelihood: clamped) log.debug "[bayesian_belief] information_gain: id=#{belief_id[0..7]} likelihood=#{clamped.round(3)} gain=#{gain.round(4)}" { success: true, belief_id: belief_id, evidence_id: evidence_id, likelihood: clamped, information_gain: gain } end |
#least_probable_beliefs(domain: nil, limit: 5) ⇒ Object
66 67 68 69 70 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 66 def least_probable_beliefs(domain: nil, limit: 5, **) beliefs = belief_network.least_probable(domain: domain, limit: limit) log.debug "[bayesian_belief] least_probable: domain=#{domain.inspect} count=#{beliefs.size}" { success: true, beliefs: beliefs.map(&:to_h), count: beliefs.size } end |
#most_probable_beliefs(domain: nil, limit: 5) ⇒ Object
60 61 62 63 64 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 60 def most_probable_beliefs(domain: nil, limit: 5, **) beliefs = belief_network.most_probable(domain: domain, limit: limit) log.debug "[bayesian_belief] most_probable: domain=#{domain.inspect} count=#{beliefs.size}" { success: true, beliefs: beliefs.map(&:to_h), count: beliefs.size } end |
#posterior_distribution(domain: nil) ⇒ Object
72 73 74 75 76 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 72 def posterior_distribution(domain: nil, **) dist = belief_network.posterior_distribution(domain: domain) log.debug "[bayesian_belief] posterior_distribution: domain=#{domain.inspect} size=#{dist.size}" { success: true, distribution: dist, size: dist.size } end |
#update_bayesian_belief(belief_id:, evidence_id:, likelihood:) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 28 def update_bayesian_belief(belief_id:, evidence_id:, likelihood:, **) clamped = likelihood.clamp(Helpers::Constants::LIKELIHOOD_FLOOR, Helpers::Constants::LIKELIHOOD_CEILING) belief = belief_network.update_belief(belief_id: belief_id, evidence_id: evidence_id, likelihood: clamped) unless belief log.debug "[bayesian_belief] update failed: belief_id=#{belief_id} not found" return { success: false, reason: :not_found, belief_id: belief_id } end log.debug "[bayesian_belief] update: id=#{belief_id[0..7]} evidence=#{evidence_id} " \ "likelihood=#{clamped.round(3)} posterior=#{belief.posterior.round(3)}" { success: true, belief_id: belief_id, evidence_id: evidence_id, likelihood: clamped, posterior: belief.posterior, confidence_label: belief.confidence_label, update_count: belief.update_count } end |
#update_bayesian_beliefs ⇒ Object
91 92 93 94 95 |
# File 'lib/legion/extensions/agentic/inference/bayesian/runners/bayesian_belief.rb', line 91 def update_bayesian_beliefs(**) decayed = belief_network.decay_all log.debug "[bayesian_belief] decay cycle: beliefs_updated=#{decayed}" { success: true, decayed: decayed } end |