Class: Legion::Extensions::Llm::Model::Info
- Inherits:
-
Data
- Object
- Data
- Legion::Extensions::Llm::Model::Info
- Defined in:
- lib/legion/extensions/llm/model/info.rb
Instance Attribute Summary collapse
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
-
#context_length ⇒ Object
readonly
Returns the value of attribute context_length.
-
#family ⇒ Object
readonly
Returns the value of attribute family.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#instance ⇒ Object
readonly
Returns the value of attribute instance.
-
#metadata ⇒ Object
readonly
Returns the value of attribute metadata.
-
#modalities_input ⇒ Object
readonly
Returns the value of attribute modalities_input.
-
#modalities_output ⇒ Object
readonly
Returns the value of attribute modalities_output.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#parameter_count ⇒ Object
readonly
Returns the value of attribute parameter_count.
-
#parameter_size ⇒ Object
readonly
Returns the value of attribute parameter_size.
-
#provider ⇒ Object
readonly
Returns the value of attribute provider.
-
#quantization ⇒ Object
readonly
Returns the value of attribute quantization.
-
#size_bytes ⇒ Object
readonly
Returns the value of attribute size_bytes.
Class Method Summary collapse
-
.default(model_id, provider) ⇒ Object
Factory for assumed-to-exist models without full metadata.
-
.from_hash(data) ⇒ Object
Factory that accepts both legacy and new-style hashes and maps them to the new struct fields.
Instance Method Summary collapse
-
#completion? ⇒ Boolean
── Capability predicates ─────────────────────────────────────.
-
#context_window ⇒ Object
── Backward-compatible accessors ───────────────────────────── These bridge the legacy Model::Info class API used by Models, OpenAICompatible, and provider gems.
- #created_at ⇒ Object
- #display_name ⇒ Object
- #embedding? ⇒ Boolean
-
#initialize(id:, name: nil, provider: nil, instance: :default, family: nil, capabilities: [], context_length: nil, parameter_count: nil, parameter_size: nil, quantization: nil, size_bytes: nil, modalities_input: [], modalities_output: [], metadata: {}) ⇒ Info
constructor
rubocop:disable Metrics/ParameterLists, Metrics/PerceivedComplexity.
- #input_price_per_million ⇒ Object
- #knowledge_cutoff ⇒ Object
- #label ⇒ Object
- #max_output_tokens ⇒ Object
- #max_tokens ⇒ Object
- #modalities ⇒ Object
- #output_price_per_million ⇒ Object
- #pricing ⇒ Object
- #supports?(capability) ⇒ Boolean
- #supports_functions? ⇒ Boolean
- #supports_video? ⇒ Boolean
- #supports_vision? ⇒ Boolean
- #thinking? ⇒ Boolean
- #tools? ⇒ Boolean
- #type ⇒ Object
- #vision? ⇒ Boolean
Constructor Details
#initialize(id:, name: nil, provider: nil, instance: :default, family: nil, capabilities: [], context_length: nil, parameter_count: nil, parameter_size: nil, quantization: nil, size_bytes: nil, modalities_input: [], modalities_output: [], metadata: {}) ⇒ Info
rubocop:disable Metrics/ParameterLists, Metrics/PerceivedComplexity
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/legion/extensions/llm/model/info.rb', line 14 def initialize( id:, name: nil, provider: nil, instance: :default, family: nil, capabilities: [], context_length: nil, parameter_count: nil, parameter_size: nil, quantization: nil, size_bytes: nil, modalities_input: [], modalities_output: [], metadata: {} ) normalized_family = family.nil? ? nil : family.to_s.downcase.strip super( id: id.to_s.strip, name: (name || id).to_s.strip, provider: provider.to_s.downcase.to_sym, instance: (instance || :default).to_s.downcase.to_sym, family: normalized_family, capabilities: normalize_symbols(capabilities), context_length: to_int(context_length), parameter_count: to_int(parameter_count), parameter_size: parameter_size&.to_s&.strip, quantization: quantization&.to_s&.strip, size_bytes: to_int(size_bytes), modalities_input: normalize_symbols(modalities_input), modalities_output: normalize_symbols(modalities_output), metadata: .is_a?(Hash) ? : {} ) end |
Instance Attribute Details
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def capabilities @capabilities end |
#context_length ⇒ Object (readonly)
Returns the value of attribute context_length
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def context_length @context_length end |
#family ⇒ Object (readonly)
Returns the value of attribute family
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def family @family end |
#id ⇒ Object (readonly)
Returns the value of attribute id
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def id @id end |
#instance ⇒ Object (readonly)
Returns the value of attribute instance
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def instance @instance end |
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def @metadata end |
#modalities_input ⇒ Object (readonly)
Returns the value of attribute modalities_input
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def modalities_input @modalities_input end |
#modalities_output ⇒ Object (readonly)
Returns the value of attribute modalities_output
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def modalities_output @modalities_output end |
#name ⇒ Object (readonly)
Returns the value of attribute name
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def name @name end |
#parameter_count ⇒ Object (readonly)
Returns the value of attribute parameter_count
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def parameter_count @parameter_count end |
#parameter_size ⇒ Object (readonly)
Returns the value of attribute parameter_size
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def parameter_size @parameter_size end |
#provider ⇒ Object (readonly)
Returns the value of attribute provider
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def provider @provider end |
#quantization ⇒ Object (readonly)
Returns the value of attribute quantization
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def quantization @quantization end |
#size_bytes ⇒ Object (readonly)
Returns the value of attribute size_bytes
7 8 9 |
# File 'lib/legion/extensions/llm/model/info.rb', line 7 def size_bytes @size_bytes end |
Class Method Details
.default(model_id, provider) ⇒ Object
Factory for assumed-to-exist models without full metadata.
134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/legion/extensions/llm/model/info.rb', line 134 def self.default(model_id, provider) new( id: model_id, name: model_id.tr('-', ' ').capitalize, provider: provider, capabilities: %w[function_calling streaming vision structured_output], modalities_input: %w[text image], modalities_output: %w[text], metadata: { warning: 'Assuming model exists, capabilities may not be accurate' } ) end |
.from_hash(data) ⇒ Object
Factory that accepts both legacy and new-style hashes and maps them to the new struct fields. Handles round-tripping through to_h.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/legion/extensions/llm/model/info.rb', line 148 def self.from_hash(data) data = data.transform_keys(&:to_sym) if data.is_a?(Hash) input_mods, output_mods = extract_modalities(data) new( id: data[:id], name: data[:name], provider: data[:provider], instance: data[:instance], family: data[:family], capabilities: data[:capabilities] || [], context_length: data[:context_length] || data[:context_window], parameter_count: data[:parameter_count], parameter_size: data[:parameter_size], quantization: data[:quantization], size_bytes: data[:size_bytes], modalities_input: input_mods, modalities_output: output_mods, metadata: (data) ) end |
Instance Method Details
#completion? ⇒ Boolean
── Capability predicates ─────────────────────────────────────
44 |
# File 'lib/legion/extensions/llm/model/info.rb', line 44 def completion? = capabilities.include?(:completion) |
#context_window ⇒ Object
── Backward-compatible accessors ─────────────────────────────These bridge the legacy Model::Info class API used by Models, OpenAICompatible, and provider gems. They read from metadata where the old fields were stored.
59 60 61 |
# File 'lib/legion/extensions/llm/model/info.rb', line 59 def context_window context_length || [:context_window] end |
#created_at ⇒ Object
71 72 73 |
# File 'lib/legion/extensions/llm/model/info.rb', line 71 def created_at [:created_at] end |
#display_name ⇒ Object
87 88 89 |
# File 'lib/legion/extensions/llm/model/info.rb', line 87 def display_name name end |
#embedding? ⇒ Boolean
45 |
# File 'lib/legion/extensions/llm/model/info.rb', line 45 def = capabilities.include?(:embedding) |
#input_price_per_million ⇒ Object
95 96 97 |
# File 'lib/legion/extensions/llm/model/info.rb', line 95 def input_price_per_million pricing.text_tokens.input end |
#knowledge_cutoff ⇒ Object
75 76 77 |
# File 'lib/legion/extensions/llm/model/info.rb', line 75 def knowledge_cutoff [:knowledge_cutoff] end |
#label ⇒ Object
91 92 93 |
# File 'lib/legion/extensions/llm/model/info.rb', line 91 def label "#{provider} - #{display_name}" end |
#max_output_tokens ⇒ Object
63 64 65 |
# File 'lib/legion/extensions/llm/model/info.rb', line 63 def max_output_tokens [:max_output_tokens] end |
#max_tokens ⇒ Object
67 68 69 |
# File 'lib/legion/extensions/llm/model/info.rb', line 67 def max_tokens max_output_tokens end |
#modalities ⇒ Object
79 80 81 |
# File 'lib/legion/extensions/llm/model/info.rb', line 79 def modalities Modalities.new(input: modalities_input.map(&:to_s), output: modalities_output.map(&:to_s)) end |
#output_price_per_million ⇒ Object
99 100 101 |
# File 'lib/legion/extensions/llm/model/info.rb', line 99 def output_price_per_million pricing.text_tokens.output end |
#pricing ⇒ Object
83 84 85 |
# File 'lib/legion/extensions/llm/model/info.rb', line 83 def pricing Pricing.new([:pricing] || {}) end |
#supports?(capability) ⇒ Boolean
50 51 52 |
# File 'lib/legion/extensions/llm/model/info.rb', line 50 def supports?(capability) capabilities.include?(capability.to_s.downcase.to_sym) end |
#supports_functions? ⇒ Boolean
111 112 113 |
# File 'lib/legion/extensions/llm/model/info.rb', line 111 def supports_functions? tools? || capabilities.include?(:function_calling) end |
#supports_video? ⇒ Boolean
107 108 109 |
# File 'lib/legion/extensions/llm/model/info.rb', line 107 def supports_video? modalities_input.include?(:video) end |
#supports_vision? ⇒ Boolean
103 104 105 |
# File 'lib/legion/extensions/llm/model/info.rb', line 103 def supports_vision? vision? || modalities_input.include?(:image) end |
#thinking? ⇒ Boolean
48 |
# File 'lib/legion/extensions/llm/model/info.rb', line 48 def thinking? = capabilities.include?(:thinking) |
#tools? ⇒ Boolean
47 |
# File 'lib/legion/extensions/llm/model/info.rb', line 47 def tools? = capabilities.include?(:tools) |
#type ⇒ Object
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/legion/extensions/llm/model/info.rb', line 122 def type output = modalities_output.map(&:to_s) return 'embedding' if output.include?('embeddings') || return 'moderation' if output.include?('moderation') return 'image' if output.include?('image') return 'audio' if output.include?('audio') return 'video' if output.include?('video') 'chat' end |
#vision? ⇒ Boolean
46 |
# File 'lib/legion/extensions/llm/model/info.rb', line 46 def vision? = capabilities.include?(:vision) |