Class: Legion::Extensions::Synapse::Client

Inherits:
Object
  • Object
show all
Includes:
Runners::BlastRadius, Runners::Challenge, Runners::Crystallize, Runners::Dream, Runners::Evaluate, Runners::GaiaReport, Runners::Mutate, Runners::Pain, Runners::Promote, Runners::Propose, Runners::Report, Runners::Retrieve, Runners::Revert
Defined in:
lib/legion/extensions/synapse/client.rb

Constant Summary

Constants included from Runners::BlastRadius

Runners::BlastRadius::BLAST_MULTIPLIERS, Runners::BlastRadius::TIER_CRITICAL, Runners::BlastRadius::TIER_HIGH, Runners::BlastRadius::TIER_LOW, Runners::BlastRadius::TIER_MED

Constants included from Runners::Propose

Runners::Propose::PAIN_CORRELATION_THRESHOLD

Constants included from Runners::Retrieve

Runners::Retrieve::SEED_CONFIDENCE_THRESHOLD

Constants included from Runners::Promote

Runners::Promote::CONFIDENCE_THRESHOLD, Runners::Promote::STABILITY_HOURS

Constants included from Runners::Mutate

Runners::Mutate::VALID_MUTATION_TYPES, Runners::Mutate::VALID_TRIGGERS

Constants included from Runners::Crystallize

Runners::Crystallize::EMERGENCE_THRESHOLD

Constants included from Runners::Pain

Runners::Pain::CONSECUTIVE_FAILURE_THRESHOLD

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Runners::Challenge

#pending_challenges, #resolve_challenge_outcomes, #run_challenge_cycle

Methods included from Runners::BlastRadius

#blast_multiplier_for, #blast_tier, #compute, #requires_llm_review?

Methods included from Runners::Propose

#propose_proactive, #propose_reactive

Methods included from Runners::Retrieve

#retrieve_and_seed

Methods included from Runners::Promote

#promote

Methods included from Runners::Dream

#dream_replay, #dream_simulate

Methods included from Runners::GaiaReport

#gaia_reflection, #gaia_summary

Methods included from Runners::Report

#report

Methods included from Runners::Revert

#revert

Methods included from Runners::Mutate

#mutate

Methods included from Runners::Crystallize

#crystallize

Methods included from Runners::Pain

#handle_pain

Constructor Details

#initialize(conditioner_client: nil, transformer_client: nil) ⇒ Client

Returns a new instance of Client.



39
40
41
42
# File 'lib/legion/extensions/synapse/client.rb', line 39

def initialize(conditioner_client: nil, transformer_client: nil)
  @conditioner_client = conditioner_client
  @transformer_client = transformer_client
end

Instance Attribute Details

#conditioner_clientObject (readonly)

Returns the value of attribute conditioner_client.



37
38
39
# File 'lib/legion/extensions/synapse/client.rb', line 37

def conditioner_client
  @conditioner_client
end

#transformer_clientObject (readonly)

Returns the value of attribute transformer_client.



37
38
39
# File 'lib/legion/extensions/synapse/client.rb', line 37

def transformer_client
  @transformer_client
end

Instance Method Details

#challenge_proposal(proposal_id:) ⇒ Object



87
88
89
# File 'lib/legion/extensions/synapse/client.rb', line 87

def challenge_proposal(proposal_id:)
  super(proposal_id: proposal_id, transformer_client: @transformer_client)
end

#challenger_statsObject



96
97
98
99
100
101
102
103
104
# File 'lib/legion/extensions/synapse/client.rb', line 96

def challenger_stats
  Data::Model.define_synapse_challenge_model
  resolved = Data::Model::SynapseChallenge.exclude(outcome: nil)
  {
    total:   resolved.count,
    correct: resolved.where(outcome: 'correct').count,
    by_type: resolved.group_and_count(:challenger_type).to_h { |r| [r[:challenger_type], r[:count]] }
  }
end

#challenges(proposal_id:) ⇒ Object



91
92
93
94
# File 'lib/legion/extensions/synapse/client.rb', line 91

def challenges(proposal_id:)
  Data::Model.define_synapse_challenge_model
  Data::Model::SynapseChallenge.where(proposal_id: proposal_id).order(Sequel.desc(:id)).all
end

#create(source_function_id:, target_function_id:, attention: nil, transform: nil, routing_strategy: 'direct', origin: 'explicit', relationship_id: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/legion/extensions/synapse/client.rb', line 53

def create(source_function_id:, target_function_id:, attention: nil, transform: nil,
           routing_strategy: 'direct', origin: 'explicit', relationship_id: nil)
  Data::Model.define_synapse_model
  Data::Model::Synapse.create(
    source_function_id: source_function_id,
    target_function_id: target_function_id,
    attention:          attention,
    transform:          transform,
    routing_strategy:   routing_strategy,
    origin:             origin,
    relationship_id:    relationship_id,
    confidence:         Helpers::Confidence.starting_score(origin),
    status:             origin == 'emergent' ? 'observing' : 'active'
  )
end

#evaluate(synapse_id:, payload: {}) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/legion/extensions/synapse/client.rb', line 44

def evaluate(synapse_id:, payload: {})
  super(
    synapse_id:         synapse_id,
    payload:            payload,
    conditioner_client: @conditioner_client,
    transformer_client: @transformer_client
  )
end

#proposals(synapse_id:, status: nil) ⇒ Object



69
70
71
72
73
74
# File 'lib/legion/extensions/synapse/client.rb', line 69

def proposals(synapse_id:, status: nil)
  Data::Model.define_synapse_proposal_model
  dataset = Data::Model::SynapseProposal.where(synapse_id: synapse_id)
  dataset = dataset.where(status: status) if status
  dataset.order(Sequel.desc(:id)).all
end

#review_proposal(proposal_id:, status:) ⇒ Object



76
77
78
79
80
81
82
83
84
85
# File 'lib/legion/extensions/synapse/client.rb', line 76

def review_proposal(proposal_id:, status:)
  Data::Model.define_synapse_proposal_model
  return { success: false, error: "invalid status: #{status}" } unless Helpers::Proposals::VALID_STATUSES.include?(status)

  proposal = Data::Model::SynapseProposal[proposal_id]
  return { success: false, error: 'proposal not found' } unless proposal

  proposal.update(status: status, reviewed_at: Time.now)
  { success: true, proposal_id: proposal_id, status: status }
end