11
12
13
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/legion/extensions/synapse/runners/revert.rb', line 11
def revert(synapse_id:, to_version: nil, trigger: 'pain')
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
mutation_version = to_version || synapse.version
return { success: false, error: 'no previous version' } if mutation_version < 2
mutation = Data::Model::SynapseMutation.where(
synapse_id: synapse.id,
version: mutation_version
).first
return { success: false, error: "mutation version #{mutation_version} not found" } unless mutation
restored_version = mutation_version - 1
before_state = Legion::JSON.load(mutation.before_state)
synapse.update(
attention: before_state[:attention],
transform: before_state[:transform],
routing_strategy: before_state[:routing_strategy],
confidence: before_state[:confidence] || synapse.confidence,
status: before_state[:status] || synapse.status,
version: restored_version
)
mutation.update(outcome: 'reverted')
Data::Model::SynapseMutation.create(
synapse_id: synapse.id,
version: restored_version,
mutation_type: 'confidence_changed',
before_state: mutation.after_state,
after_state: mutation.before_state,
trigger: trigger,
outcome: 'reverted'
)
{ success: true, reverted_to: restored_version, synapse_id: synapse.id }
end
|