Class: Legion::Extensions::Agentic::Learning::EpistemicCuriosity::Helpers::CuriosityEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Learning::EpistemicCuriosity::Helpers::CuriosityEngine
- Defined in:
- lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb
Instance Method Summary collapse
- #by_domain(domain) ⇒ Object
- #by_type(gap_type) ⇒ Object
- #create_gap(question:, domain:, gap_type: :factual, urgency: Constants::DEFAULT_URGENCY) ⇒ Object
- #curiosity_report ⇒ Object
- #decay_all ⇒ Object
- #exploration_efficiency ⇒ Object
- #explore_gap(gap_id:) ⇒ Object
- #information_debt ⇒ Object
-
#initialize ⇒ CuriosityEngine
constructor
A new instance of CuriosityEngine.
- #most_urgent(limit: 5) ⇒ Object
- #open_gaps ⇒ Object
- #prune_resolved ⇒ Object
- #resolve_gap(gap_id:) ⇒ Object
- #resolved_gaps ⇒ Object
- #satisfy_gap(gap_id:, amount: 0.3) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ CuriosityEngine
Returns a new instance of CuriosityEngine.
10 11 12 13 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 10 def initialize @gaps = {} @counter = 0 end |
Instance Method Details
#by_domain(domain) ⇒ Object
63 64 65 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 63 def by_domain(domain) @gaps.values.select { |g| g.domain == domain } end |
#by_type(gap_type) ⇒ Object
67 68 69 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 67 def by_type(gap_type) @gaps.values.select { |g| g.gap_type == gap_type } end |
#create_gap(question:, domain:, gap_type: :factual, urgency: Constants::DEFAULT_URGENCY) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 15 def create_gap(question:, domain:, gap_type: :factual, urgency: Constants::DEFAULT_URGENCY) prune_resolved if @gaps.size >= Constants::MAX_GAPS return { created: false, reason: :at_capacity } if @gaps.size >= Constants::MAX_GAPS gap_type = :factual unless Constants::GAP_TYPES.include?(gap_type) id = next_id gap = KnowledgeGap.new(id: id, question: question, domain: domain, gap_type: gap_type, urgency: urgency) @gaps[id] = gap { created: true, gap: gap.to_h } end |
#curiosity_report ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 91 def curiosity_report { total_gaps: @gaps.size, open_gaps: open_gaps.size, resolved_gaps: resolved_gaps.size, information_debt: information_debt, exploration_efficiency: exploration_efficiency, most_urgent: most_urgent(limit: 3).map(&:to_h) } end |
#decay_all ⇒ Object
82 83 84 85 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 82 def decay_all @gaps.each_value(&:decay!) @gaps.size end |
#exploration_efficiency ⇒ Object
75 76 77 78 79 80 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 75 def exploration_efficiency total = @gaps.size return 0.0 if total.zero? (resolved_gaps.size.to_f / total).round(4) end |
#explore_gap(gap_id:) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 26 def explore_gap(gap_id:) gap = @gaps[gap_id] return { found: false, gap_id: gap_id } unless gap gap.explore! { found: true, gap: gap.to_h } end |
#information_debt ⇒ Object
71 72 73 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 71 def information_debt open_gaps.sum(&:urgency).round(4) end |
#most_urgent(limit: 5) ⇒ Object
59 60 61 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 59 def most_urgent(limit: 5) open_gaps.sort_by { |g| -g.urgency }.first(limit) end |
#open_gaps ⇒ Object
51 52 53 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 51 def open_gaps @gaps.values.reject(&:resolved?) end |
#prune_resolved ⇒ Object
87 88 89 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 87 def prune_resolved @gaps.delete_if { |_id, gap| gap.resolved? } end |
#resolve_gap(gap_id:) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 42 def resolve_gap(gap_id:) gap = @gaps[gap_id] return { found: false, gap_id: gap_id } unless gap gap.satisfaction = 1.0 gap.resolved_at = Time.now.utc { found: true, resolved: true, gap: gap.to_h } end |
#resolved_gaps ⇒ Object
55 56 57 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 55 def resolved_gaps @gaps.values.select(&:resolved?) end |
#satisfy_gap(gap_id:, amount: 0.3) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 34 def satisfy_gap(gap_id:, amount: 0.3) gap = @gaps[gap_id] return { found: false, gap_id: gap_id } unless gap gap.satisfy!(amount: amount) { found: true, gap: gap.to_h } end |
#to_h ⇒ Object
102 103 104 105 106 107 108 |
# File 'lib/legion/extensions/agentic/learning/epistemic_curiosity/helpers/curiosity_engine.rb', line 102 def to_h { gaps: @gaps.transform_values(&:to_h), information_debt: information_debt, exploration_efficiency: exploration_efficiency } end |