Module: Legion::LLM::Call::Registry
- Extended by:
- Legion::Logging::Helper
- Defined in:
- lib/legion/llm/call/registry.rb
Class Method Summary collapse
- .all_instances ⇒ Object
- .all_provider_families ⇒ Object
- .available ⇒ Object
- .deregister_provider(name) ⇒ Object
- .for(name, instance: nil) ⇒ Object
- .instances_for(name) ⇒ Object
- .metadata_for(name, instance = :default) ⇒ Object
- .register(name, extension_module, instance: :default, metadata: {}) ⇒ Object
- .registered?(name, instance: nil) ⇒ Boolean
- .reset! ⇒ Object
- .with_capability(capability) ⇒ Object
Class Method Details
.all_instances ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/legion/llm/call/registry.rb', line 100 def all_instances @mutex.synchronize do results = [] @registry.each do |provider, entries| entries.each do |inst, entry| results << { provider: provider, instance: inst, adapter: entry[:adapter], metadata: entry[:metadata] } end end results end end |
.all_provider_families ⇒ Object
112 113 114 |
# File 'lib/legion/llm/call/registry.rb', line 112 def all_provider_families @mutex.synchronize { @registry.keys.dup } end |
.available ⇒ Object
51 52 53 |
# File 'lib/legion/llm/call/registry.rb', line 51 def available @mutex.synchronize { @registry.keys.dup } end |
.deregister_provider(name) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/legion/llm/call/registry.rb', line 74 def deregister_provider(name) provider = name.to_sym @mutex.synchronize do removed = @registry.delete(provider) count = removed ? removed.size : 0 log.info("[llm][registry] deregister_provider provider=#{provider} count=#{count}") count end end |
.for(name, instance: nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/legion/llm/call/registry.rb', line 28 def for(name, instance: nil) provider = name.to_sym @mutex.synchronize do entries = @registry[provider] return nil unless entries entry = if instance entries[instance.to_sym] else entries[:default] || entries.values.first end entry&.[](:adapter) end end |
.instances_for(name) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/legion/llm/call/registry.rb', line 43 def instances_for(name) provider = name.to_sym @mutex.synchronize do entries = @registry[provider] || {} entries.each_with_object({}) { |(inst, entry), h| h[inst] = entry[:adapter] } end end |
.metadata_for(name, instance = :default) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/legion/llm/call/registry.rb', line 65 def (name, instance = :default) provider = name.to_sym inst = instance.to_sym @mutex.synchronize do entry = @registry.dig(provider, inst) entry ? entry[:metadata] : {} end end |
.register(name, extension_module, instance: :default, metadata: {}) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/legion/llm/call/registry.rb', line 17 def register(name, extension_module, instance: :default, metadata: {}) provider = name.to_sym inst = instance.to_sym @mutex.synchronize do @registry[provider] ||= {} @registry[provider][inst] = { adapter: extension_module, metadata: } end log.info("[llm][registry] registered provider=#{provider} instance=#{inst}") extension_module end |
.registered?(name, instance: nil) ⇒ Boolean
55 56 57 58 59 60 61 62 63 |
# File 'lib/legion/llm/call/registry.rb', line 55 def registered?(name, instance: nil) provider = name.to_sym @mutex.synchronize do return false unless @registry.key?(provider) return true unless instance @registry[provider].key?(instance.to_sym) end end |
.reset! ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/legion/llm/call/registry.rb', line 116 def reset! @mutex.synchronize do count = @registry.values.sum(&:size) @registry.clear log.info("[llm][registry] reset count=#{count}") end end |
.with_capability(capability) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/legion/llm/call/registry.rb', line 84 def with_capability(capability) cap = capability.to_sym @mutex.synchronize do results = [] @registry.each do |provider, entries| entries.each do |inst, entry| caps = entry[:metadata][:capabilities] next unless caps.is_a?(Array) && caps.include?(cap) results << { provider: provider, instance: inst, adapter: entry[:adapter], metadata: entry[:metadata] } end end results end end |