Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,9 @@ import { LinkTo } from "@ember/routing";
import dIcon from "discourse/helpers/d-icon";
import { i18n } from "discourse-i18n";

function showAiPreferences(user, settings) {
// Since we only have one AI related user setting we don't show
// AI preferences if these conditions aren't met.
// If we add more user settings in the future we can move this
// logic to the the specific settings and conditionally show it in the template.
const aiHelperEnabledFeatures =
settings.ai_helper_enabled_features.split("|");

return (
user?.user_allowed_ai_auto_image_captions &&
aiHelperEnabledFeatures.includes("image_caption") &&
settings.ai_helper_enabled
);
}

export default class AutoImageCaptionSetting extends Component {
static shouldRender(outletArgs, helper) {
return (
helper.siteSettings.discourse_ai_enabled &&
showAiPreferences(outletArgs.model, helper.siteSettings)
);
return helper.siteSettings.discourse_ai_enabled;
}

<template>
Expand Down
40 changes: 40 additions & 0 deletions assets/javascripts/discourse/templates/preferences/ai.gjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { get } from "@ember/helper";
import RouteTemplate from "ember-route-template";
import { eq } from "truth-helpers";
import PreferenceCheckbox from "discourse/components/preference-checkbox";
import SaveControls from "discourse/components/save-controls";
import { i18n } from "discourse-i18n";

export default RouteTemplate(
<template>
<div class="ai-user-preferences">
<legend class="control-label">{{i18n "discourse_ai.title"}}</legend>

{{#each @controller.booleanSettings as |setting|}}
{{#if setting.isIncluded}}
<div class="control-group ai-setting">
<PreferenceCheckbox
@labelKey={{setting.label}}
@checked={{get @controller.model.user_option setting.key}}
data-setting-name={{setting.settingName}}
class="pref-{{setting.settingName}}"
/>
</div>
{{/if}}
{{/each}}

{{#if (eq @controller.userSettingAttributes.length 0)}}
{{i18n "discourse_ai.user_preferences.empty"}}
{{/if}}

{{#unless (eq @controller.userSettingAttributes.length 0)}}
<SaveControls
@id="user_ai_preference_save"
@model={{@controller.model}}
@action={{@controller.save}}
@saved={{@controller.saved}}
/>
{{/unless}}
</div>
</template>
);
29 changes: 0 additions & 29 deletions assets/javascripts/discourse/templates/preferences/ai.hbs

This file was deleted.

21 changes: 0 additions & 21 deletions spec/system/ai_helper/ai_image_caption_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,27 +91,6 @@
end

describe "automatic image captioning" do
context "when ai helper is disabled" do
before { SiteSetting.ai_helper_enabled = false }

it "should not have the setting present in the user preferences page" do
user_preferences_ai_page.visit(user)
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
end
end

context "when toggling the setting from the user preferences page" do
before { user.user_option.update!(auto_image_caption: false) }

it "should update the preference to enabled" do
user_preferences_ai_page.visit(user)
user_preferences_ai_page.toggle_setting("pref-auto-image-caption")
user_preferences_ai_page.save_changes
wait_for(timeout: 5) { user.reload.user_option.auto_image_caption }
expect(user.reload.user_option.auto_image_caption).to eq(true)
end
end

context "when the user preference is disabled" do
before { user.user_option.update!(auto_image_caption: false) }

Expand Down
80 changes: 80 additions & 0 deletions spec/system/ai_user_preferences_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# frozen_string_literal: true

RSpec.describe "User AI preferences", type: :system, js: true do
fab!(:user) { Fabricate(:admin, refresh_auto_groups: true) }
fab!(:llm_model)
let(:user_preferences_ai_page) { PageObjects::Pages::UserPreferencesAi.new }
fab!(:discovery_persona) do
Fabricate(:ai_persona, allowed_group_ids: [Group::AUTO_GROUPS[:admins]])
end

before do
SiteSetting.discourse_ai_enabled = true
SiteSetting.ai_bot_discover_persona = discovery_persona.id
Group.find_by(id: Group::AUTO_GROUPS[:admins]).add(user)
assign_fake_provider_to(:ai_helper_model)
assign_fake_provider_to(:ai_helper_image_caption_model)
sign_in(user)
end

describe "automatic image caption setting" do
context "when ai helper is disabled" do
before { SiteSetting.ai_helper_enabled = false }

it "should not have the setting present in the user preferences page" do
user_preferences_ai_page.visit(user)
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
end
end

context "when toggling the setting from the user preferences page" do
before do
SiteSetting.ai_helper_enabled = true
SiteSetting.ai_helper_enabled_features = "image_caption"
user.user_option.update!(auto_image_caption: false)
end

it "should update the preference to enabled" do
user_preferences_ai_page.visit(user)
user_preferences_ai_page.toggle_setting("pref-auto-image-caption")
user_preferences_ai_page.save_changes
wait_for(timeout: 5) { user.reload.user_option.auto_image_caption }
expect(user.reload.user_option.auto_image_caption).to eq(true)
end
end
end

describe "search discoveries setting" do
context "when discoveries are enabled" do
before { SiteSetting.ai_bot_enabled = true }
it "should have the setting present in the user preferences page" do
user_preferences_ai_page.visit(user)
expect(user_preferences_ai_page).to have_ai_preference("pref-ai-search-discoveries")
end
end

context "when discoveries are disabled" do
SiteSetting.ai_bot_enabled = false
SiteSetting.ai_bot_discover_persona = nil

it "should not have the setting present in the user preferences page" do
user_preferences_ai_page.visit(user)
expect(user_preferences_ai_page).to have_no_ai_preference("pref-ai-search-discoveries")
end
end
end

describe "when no settings are available" do
before do
SiteSetting.ai_helper_enabled = false
SiteSetting.ai_bot_enabled = false
end

it "should not have any AI preferences and should show a message" do
user_preferences_ai_page.visit(user)
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
expect(user_preferences_ai_page).to have_no_ai_preference("pref-ai-search-discoveries")
expect(page).to have_content(I18n.t("js.discourse_ai.user_preferences.empty"))
end
end
end
Loading