Class: LittleGhost::Models::Catalog::ModelsDevSource
- Defined in:
- lib/little_ghost/models/catalog/models_dev_source.rb
Overview
Refreshes normalized facts from the public models.dev catalog.
Constant Summary collapse
- URL =
:nodoc:
URI("https://models.dev/api.json")
- NAMESPACES =
:nodoc:
{ # :nodoc: "openai" => "openai", "openrouter" => "openrouter", "anthropic" => "anthropic", "gemini" => "google", "vertex_ai" => "google-vertex", "bedrock" => "amazon-bedrock" }.freeze
Constants inherited from Source
Source::DEFAULT_ATTRIBUTE_MERGE_STRATEGIES
Instance Attribute Summary
Attributes inherited from Source
Instance Method Summary collapse
-
#initialize(provider_adapters:) ⇒ ModelsDevSource
constructor
Creates a source that maps application provider names to adapters.
-
#refresh(target: nil) ⇒ Object
Fetches normalized model facts, optionally for one canonical
target.
Methods inherited from Source
Constructor Details
#initialize(provider_adapters:) ⇒ ModelsDevSource
Creates a source that maps application provider names to adapters.
20 21 22 23 |
# File 'lib/little_ghost/models/catalog/models_dev_source.rb', line 20 def initialize(provider_adapters:) super(name: "models.dev") @provider_adapters = provider_adapters.to_h.transform_keys(&:to_s) end |
Instance Method Details
#refresh(target: nil) ⇒ Object
Fetches normalized model facts, optionally for one canonical target.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/little_ghost/models/catalog/models_dev_source.rb', line 26 def refresh(target: nil) document = JSON.parse( Support::HTTPClient.new(open_timeout: 5, read_timeout: 30, max_response_bytes: MAX_CATALOG_BYTES) .request(uri: URL) ) providers = target ? [target.provider] : @provider_adapters.keys providers.each_with_object({}) do |provider, result| namespace = NAMESPACES[@provider_adapters[provider]] next unless namespace && document[namespace] models = document.fetch(namespace).fetch("models") selected = target ? models.slice(target.model_id) : models selected.each { |id, value| result["#{provider}:#{id}"] = normalize(value) } end rescue JSON::ParserError, KeyError => error raise ProviderError, "models.dev returned an invalid catalog: #{error.}" end |