Module: Legion::LLM::Skills::Registry
- Extended by:
- Legion::Logging::Helper
- Defined in:
- lib/legion/llm/skills/registry.rb
Constant Summary collapse
- MUTEX =
Mutex.new
Class Method Summary collapse
- .all ⇒ Object
- .by_trigger(type) ⇒ Object
- .chain_for(skill_key) ⇒ Object
- .file_trigger_skills ⇒ Object
- .find(key) ⇒ Object
- .register(skill_class) ⇒ Object
- .reset! ⇒ Object
- .trigger_word_index ⇒ Object
Class Method Details
.all ⇒ Object
32 33 34 |
# File 'lib/legion/llm/skills/registry.rb', line 32 def all MUTEX.synchronize { (@ordered || []).filter_map { |k| (@by_key || {})[k] } } end |
.by_trigger(type) ⇒ Object
40 41 42 |
# File 'lib/legion/llm/skills/registry.rb', line 40 def by_trigger(type) all.select { |c| c.trigger == type } end |
.chain_for(skill_key) ⇒ Object
44 45 46 |
# File 'lib/legion/llm/skills/registry.rb', line 44 def chain_for(skill_key) MUTEX.synchronize { (@chain_index || {})[skill_key] } end |
.file_trigger_skills ⇒ Object
56 57 58 |
# File 'lib/legion/llm/skills/registry.rb', line 56 def file_trigger_skills MUTEX.synchronize { (@file_trigger_skills || []).dup } end |
.find(key) ⇒ Object
36 37 38 |
# File 'lib/legion/llm/skills/registry.rb', line 36 def find(key) MUTEX.synchronize { (@by_key || {})[key] } end |
.register(skill_class) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/legion/llm/skills/registry.rb', line 14 def register(skill_class) MUTEX.synchronize do validate!(skill_class) key = registry_key(skill_class) if (@by_key ||= {}).key?(key) log.warn("[skills][registry] duplicate: #{key} replaced") remove_from_indexes(@by_key[key], key) end @ordered ||= [] @ordered.reject! { |k| k == key } @by_key[key] = skill_class @ordered << key index_trigger_words(key, skill_class) index_file_triggers(skill_class) index_chain(skill_class) end end |
.reset! ⇒ Object
60 61 62 63 64 65 66 67 68 |
# File 'lib/legion/llm/skills/registry.rb', line 60 def reset! MUTEX.synchronize do @by_key = {} @ordered = [] @chain_index = {} @trigger_word_index = {} @file_trigger_skills = [] end end |
.trigger_word_index ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/legion/llm/skills/registry.rb', line 48 def trigger_word_index MUTEX.synchronize do (@trigger_word_index || {}).each_with_object({}) do |(word, keys), copy| copy[word] = keys.dup end end end |