Files
moreminimore-chat/lib/llm/models.rb
Aakash Bakhle 13de83d1dc refactor(captain): route conversation completion by feature (#15317)
Conversation completion evaluations now use a dedicated internal LLM
feature with GPT 4.1 as the default. The internal route keeps the
completion model separate from the installation wide Captain model
override and from the assistant route, which can use GPT 5.2 for Captain
V2 accounts. Evaluations continue to use the installation API key and do
not consume Captain response credits.

## What changed

Added an internal `conversation_completion` feature to the LLM model
config and excluded internal features from account preferences, the
Captain settings API, and Super Admin model overrides.

Updated `Captain::ConversationCompletionService` to resolve its model
through `Llm::FeatureRouter`.

Added focused service and request coverage for model routing and
settings visibility.
2026-08-13 13:54:35 +05:30

58 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.reject { |_key, config| config['internal'] }.keys
def internal_feature?(feature)
features.dig(feature.to_s, 'internal') == true
end
def feature?(feature)
features.key?(feature.to_s)
end
def default_model_for(feature)
features.dig(feature.to_s, 'default')
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']
}
end
end
end