Class: Legion::Extensions::Agentic::Language::NarrativeReasoning::Helpers::NarrativeEngine

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeNarrativeEngine

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_narrativesObject



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

#countObject



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_allObject



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_hObject



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_eventsObject



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