85 lines
2.8 KiB
Ruby
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
|