Module: Legion::LLM::Call::Registry

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/call/registry.rb

Class Method Summary collapse

Class Method Details

.all_instancesObject



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_familiesObject



112
113
114
# File 'lib/legion/llm/call/registry.rb', line 112

def all_provider_families
  @mutex.synchronize { @registry.keys.dup }
end

.availableObject



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

Returns:

  • (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