discourse-ai/lib/features.rb

85 lines
2.8 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Features
def self.feature_config
[
{
id: 1,
name_ref: "summarization",
name_key: "discourse_ai.features.summarization.name",
description_key: "discourse_ai.features.summarization.description",
persona_setting_name: "ai_summarization_persona",
enable_setting_name: "ai_summarization_enabled",
},
{
id: 2,
name_ref: "gists",
name_key: "discourse_ai.features.gists.name",
description_key: "discourse_ai.features.gists.description",
persona_setting_name: "ai_summary_gists_persona",
enable_setting_name: "ai_summary_gists_enabled",
},
{
id: 3,
name_ref: "discoveries",
name_key: "discourse_ai.features.discoveries.name",
description_key: "discourse_ai.features.discoveries.description",
persona_setting_name: "ai_bot_discover_persona",
enable_setting_name: "ai_bot_enabled",
},
{
id: 4,
name_ref: "discord_search",
name_key: "discourse_ai.features.discord_search.name",
description_key: "discourse_ai.features.discord_search.description",
persona_setting_name: "ai_discord_search_persona",
enable_setting_name: "ai_discord_search_enabled",
},
]
end
def self.features
feature_config.map do |feature|
{
id: feature[:id],
ref: feature[:name_ref],
name: I18n.t(feature[:name_key]),
description: I18n.t(feature[:description_key]),
persona: AiPersona.find_by(id: SiteSetting.get(feature[:persona_setting_name])),
persona_setting: {
name: feature[:persona_setting_name],
value: SiteSetting.get(feature[:persona_setting_name]),
type: SiteSetting.type_supervisor.get_type(feature[:persona_setting_name]),
},
enable_setting: {
name: feature[:enable_setting_name],
value: SiteSetting.get(feature[:enable_setting_name]),
type: SiteSetting.type_supervisor.get_type(feature[:enable_setting_name]),
},
}
end
end
def self.find_feature_by_id(id)
lookup = features.index_by { |f| f[:id] }
lookup[id]
end
def self.find_feature_by_ref(name_ref)
lookup = features.index_by { |f| f[:ref] }
lookup[name_ref]
end
def self.find_feature_id_by_ref(name_ref)
find_feature_by_ref(name_ref)&.dig(:id)
end
def self.feature_area(name_ref)
name_ref = name_ref.to_s if name_ref.is_a?(Symbol)
find_feature_by_ref(name_ref) || raise(ArgumentError, "Feature not found: #{name_ref}")
"ai-features/#{name_ref}"
end
end
end