Files
chatwoot/lib/llm/models.rb

59 lines
1.4 KiB
Ruby

module Llm::Models
CONFIG = YAML.load_file(Rails.root.join('config/llm.yml')).freeze
class << self
def providers = CONFIG.fetch('providers')
def models = CONFIG.fetch('models')
def features = CONFIG.fetch('features')
def feature_keys = features.keys
def feature?(feature)
features.key?(feature.to_s)
end
def default_model_for(feature)
features.dig(feature.to_s, 'default')
end
def reasoning_effort_for(feature)
features.dig(feature.to_s, 'reasoning_effort')
end
def models_for(feature)
features.dig(feature.to_s, 'models') || []
end
def valid_model_for?(feature, model_name)
models_for(feature).include?(model_name.to_s)
end
def model_config(model_name)
models[model_name.to_s]
end
def provider_for(model_name)
model_config(model_name)&.dig('provider')
end
def feature_config(feature_key)
feature = features[feature_key.to_s]
return nil unless feature
{
models: models_for(feature_key).map do |model_name|
model = model_config(model_name)
{
id: model_name,
display_name: model['display_name'],
provider: model['provider'],
coming_soon: model['coming_soon'],
credit_multiplier: model['credit_multiplier']
}
end,
default: feature['default'],
reasoning_effort: feature['reasoning_effort']
}
end
end
end