Module: Legion::Extensions::MindGrowth::Runners::Composer

Extended by:
Composer
Includes:
Helpers::Lex
Included in:
Composer
Defined in:
lib/legion/extensions/mind_growth/runners/composer.rb

Constant Summary collapse

CATEGORY_FLOW =

Category adjacency used for heuristic suggestions

[
  %i[perception cognition],
  %i[cognition memory],
  %i[cognition introspection],
  %i[memory cognition],
  %i[introspection safety],
  %i[motivation cognition],
  %i[cognition communication],
  %i[communication coordination]
].freeze

Instance Method Summary collapse

Instance Method Details

#add_composition(source_extension:, output_key:, target_extension:, target_method:, transform: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 25

def add_composition(source_extension:, output_key:, target_extension:, target_method:,
                    transform: nil, **)
  Helpers::CompositionMap.add_rule(
    source_extension: source_extension,
    output_key:       output_key,
    target_extension: target_extension,
    target_method:    target_method,
    transform:        transform
  )
end

#composition_statsObject



60
61
62
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 60

def composition_stats(**)
  { success: true, **Helpers::CompositionMap.stats }
end

#evaluate_output(source_extension:, output:) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 41

def evaluate_output(source_extension:, output:, **)
  matches = Helpers::CompositionMap.match_output(
    source_extension: source_extension,
    output:           output
  )

  dispatches = matches.map do |match|
    rule  = match[:rule]
    value = match[:matched_value]
    input = rule[:transform] ? rule[:transform].call(value) : value

    { target_extension: rule[:target_extension],
      target_method:    rule[:target_method],
      input:            input }
  end

  { success: true, dispatches: dispatches, count: dispatches.size }
end

#list_compositionsObject



73
74
75
76
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 73

def list_compositions(**)
  rules = Helpers::CompositionMap.all_rules
  { success: true, rules: rules, count: rules.size }
end

#remove_composition(rule_id:) ⇒ Object



36
37
38
39
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 36

def remove_composition(rule_id:, **)
  result = Helpers::CompositionMap.remove_rule(rule_id: rule_id)
  { success: result[:success] }
end

#suggest_compositions(extensions:) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/legion/extensions/mind_growth/runners/composer.rb', line 64

def suggest_compositions(extensions:, **)
  exts = Array(extensions)

  return suggest_with_llm(exts) if defined?(Legion::LLM) && Legion::LLM.respond_to?(:started?) && Legion::LLM.started?

  suggestions = heuristic_suggestions(exts)
  { success: true, suggestions: suggestions, count: suggestions.size }
end