Class: Legion::Extensions::Agentic::Integration::SituationModel::Helpers::SituationEngine

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb

Constant Summary

Constants included from Constants

Constants::COHERENCE_CEILING, Constants::COHERENCE_FLOOR, Constants::CONTINUITY_LABELS, Constants::DECAY_RATE, Constants::DEFAULT_DIMENSION_VALUE, Constants::DIMENSIONS, Constants::MAX_EVENTS_PER_MODEL, Constants::MAX_HISTORY, Constants::MAX_MODELS, Constants::MODEL_HEALTH_LABELS

Instance Method Summary collapse

Constructor Details

#initializeSituationEngine

Returns a new instance of SituationEngine.



12
13
14
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 12

def initialize
  @models = {}
end

Instance Method Details

#add_event_to_model(model_id:, content:, dimension_values: {}) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 22

def add_event_to_model(model_id:, content:, dimension_values: {})
  model = @models[model_id]
  return nil unless model

  event = SituationEvent.new(content: content, dimension_values: dimension_values)
  model.add_event(event)
  event
end

#create_model(label:) ⇒ Object



16
17
18
19
20
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 16

def create_model(label:)
  model = SituationModel.new(label: label)
  @models[model.id] = model
  model
end

#decay_allObject



53
54
55
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 53

def decay_all
  @models.each_value(&:decay!)
end

#dimension_trajectory(model_id:, dimension:) ⇒ Object



39
40
41
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 39

def dimension_trajectory(model_id:, dimension:)
  @models[model_id]&.dimension_trajectory(dimension)
end

#find_boundaries(model_id:, threshold: 0.3) ⇒ Object



35
36
37
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 35

def find_boundaries(model_id:, threshold: 0.3)
  @models[model_id]&.event_boundaries(threshold: threshold)
end

#model_coherence(model_id:) ⇒ Object



31
32
33
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 31

def model_coherence(model_id:)
  @models[model_id]&.coherence
end

#models_by_label(label:) ⇒ Object



49
50
51
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 49

def models_by_label(label:)
  @models.values.select { |m| m.label == label }
end

#most_coherent(limit: 5) ⇒ Object



43
44
45
46
47
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 43

def most_coherent(limit: 5)
  @models.values
         .sort_by { |m| -m.coherence }
         .first(limit)
end

#prune_collapsedObject



57
58
59
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 57

def prune_collapsed
  @models.delete_if { |_, m| m.coherence <= 0.1 }
end

#to_hObject



61
62
63
64
65
66
# File 'lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb', line 61

def to_h
  {
    model_count: @models.size,
    models:      @models.values.map(&:to_h)
  }
end