Module: Legion::Extensions::Synapse::Runners::Mutate

Included in:
Client
Defined in:
lib/legion/extensions/synapse/runners/mutate.rb

Constant Summary collapse

VALID_MUTATION_TYPES =
%w[attention_adjusted transform_adjusted route_changed confidence_changed].freeze
VALID_TRIGGERS =
%w[hebbian pain dream gaia manual].freeze

Instance Method Summary collapse

Instance Method Details

#mutate(synapse_id:, mutation_type:, changes:, trigger:) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/legion/extensions/synapse/runners/mutate.rb', line 14

def mutate(synapse_id:, mutation_type:, changes:, trigger:)
  Data::Model.define_synapse_model
  Data::Model.define_synapse_mutation_model
  synapse = Data::Model::Synapse[synapse_id]
  return { success: false, error: 'synapse not found' } unless synapse
  return { success: false, error: "invalid mutation_type: #{mutation_type}" } unless VALID_MUTATION_TYPES.include?(mutation_type)
  return { success: false, error: "invalid trigger: #{trigger}" } unless VALID_TRIGGERS.include?(trigger)

  before_state = snapshot(synapse)
  apply_changes(synapse, mutation_type, changes)
  after_state = snapshot(synapse)

  new_version = synapse.version + 1
  synapse.update(version: new_version)

  Data::Model::SynapseMutation.create(
    synapse_id:    synapse.id,
    version:       new_version,
    mutation_type: mutation_type,
    before_state:  Legion::JSON.dump(before_state),
    after_state:   Legion::JSON.dump(after_state),
    trigger:       trigger
  )

  { success: true, version: new_version, synapse_id: synapse.id }
end