mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-06-30 19:42:17 +00:00
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
|