Class: SwarmSDK::Models
- Inherits:
-
Object
- Object
- SwarmSDK::Models
- Defined in:
- lib/swarm_sdk/models.rb
Overview
Models provides model validation and suggestion functionality
Uses static JSON files:
- models.json: Curated model list from Parsera
- model_aliases.json: Shortcuts mapping to latest models
This avoids network calls, API key requirements, and RubyLLM registry manipulation.
Defined Under Namespace
Classes: ModelInfo
Constant Summary collapse
- MODELS_JSON_PATH =
File.("models.json", __dir__)
- ALIASES_JSON_PATH =
File.("model_aliases.json", __dir__)
Class Method Summary collapse
-
.aliases ⇒ Hash
Get all aliases.
-
.all ⇒ Array<Hash>
Get all models.
-
.find(model_id) ⇒ ModelInfo?
Find a model by ID or alias.
-
.reload! ⇒ Array<Hash>
Reload models and aliases from JSON files.
-
.resolve_alias(model_id) ⇒ String
Resolve a model alias to full model ID.
-
.suggest_similar(query, limit: 3) ⇒ Array<Hash>
Suggest similar models for a given query.
Class Method Details
.aliases ⇒ Hash
Get all aliases
123 124 125 |
# File 'lib/swarm_sdk/models.rb', line 123 def aliases @aliases ||= load_aliases end |
.all ⇒ Array<Hash>
Get all models
116 117 118 |
# File 'lib/swarm_sdk/models.rb', line 116 def all @models ||= load_models end |
.find(model_id) ⇒ ModelInfo?
Find a model by ID or alias
66 67 68 69 70 71 72 |
# File 'lib/swarm_sdk/models.rb', line 66 def find(model_id) # Check if it's an alias first resolved_id = resolve_alias(model_id) model_hash = all.find { |m| m["id"] == resolved_id || m[:id] == resolved_id } model_hash ? ModelInfo.new(model_hash) : nil end |
.reload! ⇒ Array<Hash>
Reload models and aliases from JSON files
130 131 132 133 134 |
# File 'lib/swarm_sdk/models.rb', line 130 def reload! @models = load_models @aliases = load_aliases @models end |
.resolve_alias(model_id) ⇒ String
Resolve a model alias to full model ID
78 79 80 |
# File 'lib/swarm_sdk/models.rb', line 78 def resolve_alias(model_id) aliases[model_id.to_s] || model_id end |
.suggest_similar(query, limit: 3) ⇒ Array<Hash>
Suggest similar models for a given query
Strips provider prefixes and normalizes for fuzzy matching.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/swarm_sdk/models.rb', line 89 def suggest_similar(query, limit: 3) # Strip provider prefix (e.g., "anthropic:claude-sonnet-4-5" → "claude-sonnet-4-5") query_without_prefix = query.to_s.sub(/^[^:]+:/, "") normalized_query = query_without_prefix.downcase.gsub(/[.\-_]/, "") matches = all.select do |model| model_id = (model["id"] || model[:id]).to_s model_name = (model["name"] || model[:name]).to_s normalized_id = model_id.downcase.gsub(/[.\-_]/, "") normalized_name = model_name.downcase.gsub(/[.\-_]/, "") normalized_id.include?(normalized_query) || normalized_name.include?(normalized_query) end.first(limit) matches.map do |m| { id: m["id"] || m[:id], name: m["name"] || m[:name], context_window: m["context_window"] || m[:context_window], } end end |