Class: Legion::Extensions::Agentic::Memory::Transfer::Helpers::TransferEngine

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb

Constant Summary

Constants included from Constants

Constants::DISTANCE_LABELS, Constants::INTERFERENCE_PENALTY, Constants::MAX_DOMAINS, Constants::NEGATIVE_TRANSFER_THRESHOLD, Constants::POSITIVE_TRANSFER_THRESHOLD, Constants::TRANSFER_BOOST, Constants::TRANSFER_LABELS

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTransferEngine

Returns a new instance of TransferEngine.



14
15
16
17
18
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 14

def initialize
  @domains          = {}
  @similarities     = {}
  @transfer_history = []
end

Instance Attribute Details

#domainsObject (readonly)

Returns the value of attribute domains.



12
13
14
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 12

def domains
  @domains
end

#similaritiesObject (readonly)

Returns the value of attribute similarities.



12
13
14
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 12

def similarities
  @similarities
end

#transfer_historyObject (readonly)

Returns the value of attribute transfer_history.



12
13
14
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 12

def transfer_history
  @transfer_history
end

Instance Method Details

#attempt_transfer(from_domain:, to_domain:) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 33

def attempt_transfer(from_domain:, to_domain:)
  source = @domains[from_domain]
  return { status: :source_not_found, from_domain: from_domain } unless source

  check_domain_limit!
  target   = get_or_create_domain(to_domain)
  sim      = similarity_between(from_domain, to_domain)
  type     = transfer_type(sim)
  distance = transfer_distance(sim)
  effect   = apply_transfer_effect!(target, source, type)
  source.record_transfer!
  record_history!(from_domain, to_domain, sim, type, distance, effect)
  build_transfer_result(from_domain, to_domain, sim, type, distance, effect, target)
end

#interference_risks(target_domain:) ⇒ Object



61
62
63
64
65
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 61

def interference_risks(target_domain:)
  candidate_rows(target_domain)
    .select { |r| r[:type] == :interference }
    .sort_by { |r| -r[:similarity] }
end

#learn_domain(domain:, amount:) ⇒ Object



26
27
28
29
30
31
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 26

def learn_domain(domain:, amount:)
  check_domain_limit!
  entry = get_or_create_domain(domain)
  entry.learn!(amount: amount.clamp(0.0, 1.0))
  entry.to_h
end

#most_transferable(target_domain:, limit: 5) ⇒ Object



54
55
56
57
58
59
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 54

def most_transferable(target_domain:, limit: 5)
  candidates = candidate_rows(target_domain)
  candidates.select { |r| r[:type] == :positive }
            .sort_by { |r| -r[:similarity] }
            .first(limit)
end

#set_similarity(domain_a:, domain_b:, similarity:) ⇒ Object



20
21
22
23
24
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 20

def set_similarity(domain_a:, domain_b:, similarity:)
  sim = similarity.clamp(0.0, 1.0).round(10)
  @similarities[similarity_key(domain_a, domain_b)] = sim
  sim
end

#to_hObject



79
80
81
82
83
84
85
86
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 79

def to_h
  {
    domains:          @domains.transform_values(&:to_h),
    similarities:     @similarities.dup,
    transfer_history: @transfer_history.dup,
    report:           transfer_report
  }
end

#transfer_effectiveness(from_domain:, to_domain:) ⇒ Object



48
49
50
51
52
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 48

def transfer_effectiveness(from_domain:, to_domain:)
  sim = similarity_between(from_domain, to_domain)
  build_effectiveness(from_domain, to_domain, sim, transfer_type(sim),
                      @domains[from_domain], @domains[to_domain])
end

#transfer_reportObject



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/legion/extensions/agentic/memory/transfer/helpers/transfer_engine.rb', line 67

def transfer_report
  {
    total_transfers:     @transfer_history.size,
    positive_transfers:  @transfer_history.count { |h| h[:type] == :positive },
    negative_transfers:  @transfer_history.count { |h| h[:type] == :negative },
    neutral_transfers:   @transfer_history.count { |h| h[:type] == :neutral },
    interference_events: @transfer_history.count { |h| h[:type] == :interference },
    domain_count:        @domains.size,
    similarity_pairs:    @similarities.size
  }
end