Class: Legion::Extensions::Agentic::Memory::Transfer::Helpers::TransferEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Memory::Transfer::Helpers::TransferEngine
- 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
-
#domains ⇒ Object
readonly
Returns the value of attribute domains.
-
#similarities ⇒ Object
readonly
Returns the value of attribute similarities.
-
#transfer_history ⇒ Object
readonly
Returns the value of attribute transfer_history.
Instance Method Summary collapse
- #attempt_transfer(from_domain:, to_domain:) ⇒ Object
-
#initialize ⇒ TransferEngine
constructor
A new instance of TransferEngine.
- #interference_risks(target_domain:) ⇒ Object
- #learn_domain(domain:, amount:) ⇒ Object
- #most_transferable(target_domain:, limit: 5) ⇒ Object
- #set_similarity(domain_a:, domain_b:, similarity:) ⇒ Object
- #to_h ⇒ Object
- #transfer_effectiveness(from_domain:, to_domain:) ⇒ Object
- #transfer_report ⇒ Object
Constructor Details
#initialize ⇒ TransferEngine
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
#domains ⇒ Object (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 |
#similarities ⇒ Object (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_history ⇒ Object (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_h ⇒ Object
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_report ⇒ Object
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 |