Class: Legion::Extensions::Agentic::Language::FrameSemantics::Helpers::FrameEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Language::FrameSemantics::Helpers::FrameEngine
- Defined in:
- lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb
Instance Method Summary collapse
- #activate_frame(frame_id:) ⇒ Object
- #active_frames ⇒ Object
- #add_frame_relation(frame_id:, relation:, target_frame_id:) ⇒ Object
- #complete_frames ⇒ Object
- #create_frame(name:, domain:, slots: {}) ⇒ Object
- #decay_all ⇒ Object
- #define_slot(frame_id:, name:, slot_type: :core, required: true) ⇒ Object
- #fill_slot(frame_id:, slot_name:, filler:) ⇒ Object
- #frames_by_domain(domain:) ⇒ Object
-
#initialize ⇒ FrameEngine
constructor
A new instance of FrameEngine.
- #instances_for_frame(frame_id:) ⇒ Object
- #instantiate_frame(frame_id:, context:, confidence: 0.7) ⇒ Object
- #most_activated(limit: 5) ⇒ Object
- #prune_inactive ⇒ Object
- #related_frames(frame_id:) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize ⇒ FrameEngine
Returns a new instance of FrameEngine.
10 11 12 13 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 10 def initialize @frames = {} @instances = [] end |
Instance Method Details
#activate_frame(frame_id:) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 72 def activate_frame(frame_id:) frame = @frames[frame_id] return false unless frame frame.activate! true end |
#active_frames ⇒ Object
80 81 82 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 80 def active_frames @frames.values.select { |f| f.activation > 0.5 } end |
#add_frame_relation(frame_id:, relation:, target_frame_id:) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 63 def add_frame_relation(frame_id:, relation:, target_frame_id:) frame = @frames[frame_id] return false unless frame return false unless FRAME_RELATIONS.include?(relation) frame.add_relation(relation: relation, target_frame_id: target_frame_id) true end |
#complete_frames ⇒ Object
103 104 105 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 103 def complete_frames @frames.values.select(&:complete?) end |
#create_frame(name:, domain:, slots: {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 15 def create_frame(name:, domain:, slots: {}) frame = Frame.new(name: name, domain: domain) slots.each do |slot_name, opts| frame.add_slot( name: slot_name, slot_type: opts.fetch(:type, :core), required: opts.fetch(:required, true) ) end prune_frames_if_full @frames[frame.id] = frame frame end |
#decay_all ⇒ Object
107 108 109 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 107 def decay_all @frames.each_value(&:decay!) end |
#define_slot(frame_id:, name:, slot_type: :core, required: true) ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 29 def define_slot(frame_id:, name:, slot_type: :core, required: true) frame = @frames[frame_id] return nil unless frame frame.add_slot(name: name, slot_type: slot_type, required: required) frame end |
#fill_slot(frame_id:, slot_name:, filler:) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 37 def fill_slot(frame_id:, slot_name:, filler:) frame = @frames[frame_id] return false unless frame result = frame.fill_slot(name: slot_name, filler: filler) frame.activate! if result result end |
#frames_by_domain(domain:) ⇒ Object
84 85 86 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 84 def frames_by_domain(domain:) @frames.values.select { |f| f.domain == domain } end |
#instances_for_frame(frame_id:) ⇒ Object
99 100 101 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 99 def instances_for_frame(frame_id:) @instances.select { |i| i.frame_id == frame_id } end |
#instantiate_frame(frame_id:, context:, confidence: 0.7) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 46 def instantiate_frame(frame_id:, context:, confidence: 0.7) frame = @frames[frame_id] return nil unless frame fillers = frame.slots.transform_values { |v| v[:filler] } instance = FrameInstance.new( frame_id: frame_id, frame_name: frame.name, slot_fillers: fillers, context: context, confidence: confidence ) @instances << instance @instances.shift while @instances.size > MAX_INSTANCES instance end |
#most_activated(limit: 5) ⇒ Object
95 96 97 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 95 def most_activated(limit: 5) @frames.values.sort_by { |f| -f.activation }.first(limit) end |
#prune_inactive ⇒ Object
111 112 113 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 111 def prune_inactive @frames.reject! { |_id, f| f.activation <= 0.05 } end |
#related_frames(frame_id:) ⇒ Object
88 89 90 91 92 93 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 88 def (frame_id:) frame = @frames[frame_id] return [] unless frame frame.relations.filter_map { |rel| @frames[rel[:target_frame_id]] } end |
#to_h ⇒ Object
115 116 117 118 119 120 121 122 123 |
# File 'lib/legion/extensions/agentic/language/frame_semantics/helpers/frame_engine.rb', line 115 def to_h { frame_count: @frames.size, instance_count: @instances.size, active_count: active_frames.size, complete_count: complete_frames.size, domains: @frames.values.map(&:domain).uniq.sort } end |