41 lines
1.2 KiB
Ruby
41 lines
1.2 KiB
Ruby
module Llm::FeatureRouter
|
|
class UnknownFeatureError < StandardError; end
|
|
|
|
CAPTAIN_V2_ASSISTANT_MODEL = 'gpt-5.6-terra'.freeze
|
|
|
|
class << self
|
|
def resolve(feature:, account: nil)
|
|
feature_key = feature.to_s
|
|
raise UnknownFeatureError, "Unknown LLM feature: #{feature_key}" unless Llm::Models.feature?(feature_key)
|
|
|
|
model = account_model_override(account, feature_key)
|
|
source = model.present? ? :account_override : :default
|
|
model ||= captain_v2_assistant_model(account, feature_key)
|
|
model ||= Llm::Models.default_model_for(feature_key)
|
|
|
|
{
|
|
feature: feature_key,
|
|
provider: Llm::Models.provider_for(model),
|
|
model: model,
|
|
reasoning_effort: Llm::Models.reasoning_effort_for(feature_key),
|
|
source: source
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def account_model_override(account, feature_key)
|
|
model = account&.captain_models&.[](feature_key).presence
|
|
return unless model
|
|
return model if Llm::Models.valid_model_for?(feature_key, model)
|
|
end
|
|
|
|
def captain_v2_assistant_model(account, feature_key)
|
|
return unless feature_key == 'assistant'
|
|
return unless account&.feature_enabled?('captain_integration_v2')
|
|
|
|
CAPTAIN_V2_ASSISTANT_MODEL
|
|
end
|
|
end
|
|
end
|