Class: Legion::Extensions::Llm::Routing::OfferingRegistry

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/legion/extensions/llm/routing/offering_registry.rb

Overview

In-memory index of provider-neutral model offerings.

Instance Method Summary collapse

Constructor Details

#initialize(offerings = []) ⇒ OfferingRegistry

Returns a new instance of OfferingRegistry.



11
12
13
14
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 11

def initialize(offerings = [])
  @offerings = []
  Array(offerings).each { |offering| register(offering) }
end

Instance Method Details

#allObject Also known as: list



27
28
29
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 27

def all
  @offerings.dup
end

#by_capability(capability) ⇒ Object



64
65
66
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 64

def by_capability(capability)
  filter(capability:)
end

#by_model_family(model_family) ⇒ Object



56
57
58
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 56

def by_model_family(model_family)
  filter(model_family:)
end

#by_provider_family(provider_family) ⇒ Object



52
53
54
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 52

def by_provider_family(provider_family)
  filter(provider_family:)
end

#by_provider_instance(provider_instance) ⇒ Object



60
61
62
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 60

def by_provider_instance(provider_instance)
  filter(provider_instance:)
end

#eachObject



23
24
25
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 23

def each(&)
  @offerings.each(&)
end

#filter(**criteria) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 40

def filter(**criteria)
  @offerings.select do |offering|
    matches_symbol?(offering.provider_family, criteria[:provider_family]) &&
      matches_symbol?(offering.model_family, criteria[:model_family]) &&
      matches_symbol?(offering.provider_instance, criteria[:provider_instance]) &&
      matches_capability?(offering, criteria[:capability]) &&
      matches_model_alias?(offering, criteria[:model_alias]) &&
      matches_model?(offering, criteria[:model]) &&
      matches_usage_type?(offering, criteria[:usage_type])
  end
end

#find(offering_id) ⇒ Object



32
33
34
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 32

def find(offering_id)
  @offerings.find { |offering| offering.offering_id == offering_id.to_s }
end

#find_by_model_alias(alias_name) ⇒ Object



36
37
38
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 36

def find_by_model_alias(alias_name)
  @offerings.find { |offering| offering.model_alias?(alias_name) }
end

#register(offering) ⇒ Object



16
17
18
19
20
21
# File 'lib/legion/extensions/llm/routing/offering_registry.rb', line 16

def register(offering)
  normalized = normalize_offering(offering)
  @offerings.reject! { |existing| existing.offering_id == normalized.offering_id }
  @offerings << normalized
  normalized
end