Class: Legion::Extensions::Agentic::Language::NarrativeReasoning::Helpers::NarrativeEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Language::NarrativeReasoning::Helpers::NarrativeEngine
- Defined in:
- lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb
Constant Summary collapse
- MAX_NARRATIVES =
100- MAX_EVENTS =
500- MAX_CHARACTERS =
200- MAX_HISTORY =
300- EVENT_TYPES =
%i[action discovery conflict resolution revelation].freeze
Instance Method Summary collapse
- #add_narrative_event(narrative_id:, content:, event_type:, characters: [], causes: []) ⇒ Object
- #add_narrative_theme(narrative_id:, theme:) ⇒ Object
- #advance_narrative(narrative_id:) ⇒ Object
- #by_domain(domain:) ⇒ Object
- #complete_narratives ⇒ Object
- #count ⇒ Object
- #create_narrative(title:, domain: nil) ⇒ Object
- #decay_all ⇒ Object
- #get(narrative_id) ⇒ Object
-
#initialize ⇒ NarrativeEngine
constructor
A new instance of NarrativeEngine.
- #most_coherent(limit: 5) ⇒ Object
- #to_h ⇒ Object
- #total_events ⇒ Object
- #trace_causal_chain(narrative_id:) ⇒ Object
Constructor Details
#initialize ⇒ NarrativeEngine
Returns a new instance of NarrativeEngine.
17 18 19 20 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 17 def initialize @narratives = {} @event_count = 0 end |
Instance Method Details
#add_narrative_event(narrative_id:, content:, event_type:, characters: [], causes: []) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 29 def add_narrative_event(narrative_id:, content:, event_type:, characters: [], causes: []) narrative = @narratives[narrative_id] return nil unless narrative return nil unless EVENT_TYPES.include?(event_type) domain = narrative.domain event = NarrativeEvent.new( content: content, event_type: event_type, characters: characters, causes: causes, domain: domain ) @event_count += 1 evict_oldest_events(narrative) if narrative.events.size >= MAX_EVENTS narrative.add_event(event) end |
#add_narrative_theme(narrative_id:, theme:) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 47 def add_narrative_theme(narrative_id:, theme:) narrative = @narratives[narrative_id] return nil unless narrative narrative.add_theme(theme) end |
#advance_narrative(narrative_id:) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 54 def advance_narrative(narrative_id:) narrative = @narratives[narrative_id] return nil unless narrative narrative.advance_arc! end |
#by_domain(domain:) ⇒ Object
72 73 74 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 72 def by_domain(domain:) @narratives.values.select { |n| n.domain == domain } end |
#complete_narratives ⇒ Object
68 69 70 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 68 def complete_narratives @narratives.values.select(&:complete?) end |
#count ⇒ Object
90 91 92 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 90 def count @narratives.size end |
#create_narrative(title:, domain: nil) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 22 def create_narrative(title:, domain: nil) evict_oldest_narrative if @narratives.size >= MAX_NARRATIVES narrative = Narrative.new(title: title, domain: domain) @narratives[narrative.id] = narrative narrative end |
#decay_all ⇒ Object
86 87 88 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 86 def decay_all @narratives.each_value(&:decay_coherence) end |
#get(narrative_id) ⇒ Object
82 83 84 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 82 def get(narrative_id) @narratives[narrative_id] end |
#most_coherent(limit: 5) ⇒ Object
76 77 78 79 80 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 76 def most_coherent(limit: 5) @narratives.values .sort_by { |n| -n.coherence } .first(limit) end |
#to_h ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 98 def to_h { narratives: @narratives.values.map(&:to_h), count: @narratives.size, total_events: @event_count } end |
#total_events ⇒ Object
94 95 96 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 94 def total_events @event_count end |
#trace_causal_chain(narrative_id:) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/legion/extensions/agentic/language/narrative_reasoning/helpers/narrative_engine.rb', line 61 def trace_causal_chain(narrative_id:) narrative = @narratives[narrative_id] return [] unless narrative narrative.causal_chain end |