Skip to content
Kward Search API index

Class: Kward::ModelSources

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/model/sources.rb

Overview

Combines live, cached, and curated provider models for selection UIs.

Constant Summary collapse

CURATED_MODELS =
{
  "anthropic" => %w[claude-sonnet-5 claude-opus-4-8 claude-haiku-4-5],
  "azure_openai" => [],
  "cerebras" => [],
  "deepseek" => %w[deepseek-chat deepseek-reasoner],
  "fireworks" => [],
  "gemini" => %w[gemini-2.5-pro gemini-2.5-flash],
  "groq" => [],
  "mistral" => %w[mistral-large-latest],
  "nvidia" => [],
  "openai" => ModelInfo::OPENAI_MODEL_CHOICES,
  "openrouter" => [],
  "together" => [],
  "xai" => %w[grok-3 grok-3-mini],
  "copilot" => ModelInfo::COPILOT_MODEL_CHOICES
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(provider_id:, api_key: nil, catalog: nil) ⇒ ModelSources

Returns a new instance of ModelSources.



26
27
28
29
# File 'lib/kward/model/sources.rb', line 26

def initialize(provider_id:, api_key: nil, catalog: nil)
  @provider = ProviderCatalog.fetch(provider_id)
  @catalog = catalog || ModelCatalog.new(provider_id: @provider.id, api_key: api_key)
end

Instance Method Details

#manual(id) ⇒ Object

Raises:

  • (ArgumentError)


41
42
43
44
45
46
# File 'lib/kward/model/sources.rb', line 41

def manual(id)
  value = id.to_s.strip
  raise ArgumentError, "Model ID must be a non-empty string" if value.empty?

  { "provider" => @provider.id, "id" => value, "name" => value, "source" => "manual" }
end

#modelsObject



31
32
33
# File 'lib/kward/model/sources.rb', line 31

def models
  merge(cached_models, curated_models)
end

#refreshObject



35
36
37
38
39
# File 'lib/kward/model/sources.rb', line 35

def refresh
  merge(live_models, curated_models)
rescue StandardError
  models
end