class Catalog
Read-only view of configured and provider-backed model catalogs.
Definitions
def initialize(routes:, sources:, metadata:)
Build a catalog view over configuration-owned model data.
Signature
-
parameter
routesHash(String, Symbol) Explicit model routes.
-
parameter
sourcesHash(Symbol, Interface(:each, :find)) Provider discovery sources.
-
parameter
metadataHash(String, Hash) Metadata for explicit model routes.
Implementation
def initialize(routes:, sources:, metadata:)
@routes = routes
@sources = sources
@metadata = metadata
end
def empty?
Check whether the catalog contains routes or discovery sources.
Signature
-
returns
Boolean truewhen the catalog is empty.
Implementation
def empty?
@routes.empty? && @sources.empty?
end
def discover?
Check whether the catalog has any provider discovery sources.
Signature
-
returns
Boolean truewhen discovery is configured.
Implementation
def discover?
!@sources.empty?
end
def provider_for(model, default_provider: nil)
Resolve the provider name for a model, using the default as fallback.
Signature
-
parameter
modelString | Nil The model ID to look up.
-
option
:default_providerSymbol | Nil The fallback provider name.
-
returns
Symbol | Nil The selected provider name.
Implementation
def provider_for(model, default_provider: nil)
return @routes[model] if @routes.key?(model)
if model
matches = @sources.filter_map do |provider, source|
provider if source.find(model)
end
return default_provider if matches.include?(default_provider)
return matches.first unless matches.empty?
end
return default_provider
end
def each(default_provider: nil, &block)
Enumerate explicit and discovered models without duplicate IDs.
Signature
-
option
:default_providerSymbol | Nil The preferred owner of duplicate IDs.
-
yields
{|model| ...} Each model entry in OpenAI model-list format.
-
parameter
modelHash A model-list entry.
-
returns
Enumerator | Nil An enumerator without a block, otherwise
nil.
Implementation
def each(default_provider: nil, &block)
return to_enum(__method__, default_provider: default_provider) unless block
models = {}
owners = {}
@routes.each do |id, provider|
models[id] = {
"id" => id,
"object" => "model",
"created" => 0,
"owned_by" => provider.to_s,
}.tap do |entry|
if metadata = @metadata[id]
entry["laiya"] = metadata
end
end
owners[id] = provider
end
@sources.each do |provider, source|
source.each do |model|
id = model["id"]
next unless id.is_a?(String) && !id.empty?
next if @routes.key?(id)
next if owners.key?(id) && provider != default_provider
models[id] = model.merge("owned_by" => provider.to_s)
owners[id] = provider
end
end
models.each_value(&block)
end
def freeze
Freeze the catalog and its shared configuration data.
Signature
-
returns
Laiya::Models::Catalog This frozen catalog.
Implementation
def freeze
return self if frozen?
@routes.freeze
@sources.freeze
@metadata.freeze
super
end