Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit a4194d3

Browse files
authored
FIX: AI preferences tab button not appearing unless Helper enabled (#1452)
This update fixes an issue where the AI user preferences tab was not appearing unless `SiteSetting.ai_helper_enabled` was `true`. This is because we previously checked for it's presence when user preferences only had a single setting related to Helper. However, since then, we've also added search discoveries setting there too. As such, we don't want it to depend on Helper. We also sneak in this update a modernization of converting the preferences template from `.hbs` to `.gjs`.
1 parent eab6dd3 commit a4194d3

File tree

5 files changed

+121
-69
lines changed

5 files changed

+121
-69
lines changed

assets/javascripts/discourse/connectors/user-preferences-nav/ai-preferences.gjs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,9 @@ import { LinkTo } from "@ember/routing";
33
import dIcon from "discourse/helpers/d-icon";
44
import { i18n } from "discourse-i18n";
55

6-
function showAiPreferences(user, settings) {
7-
// Since we only have one AI related user setting we don't show
8-
// AI preferences if these conditions aren't met.
9-
// If we add more user settings in the future we can move this
10-
// logic to the the specific settings and conditionally show it in the template.
11-
const aiHelperEnabledFeatures =
12-
settings.ai_helper_enabled_features.split("|");
13-
14-
return (
15-
user?.user_allowed_ai_auto_image_captions &&
16-
aiHelperEnabledFeatures.includes("image_caption") &&
17-
settings.ai_helper_enabled
18-
);
19-
}
20-
216
export default class AutoImageCaptionSetting extends Component {
227
static shouldRender(outletArgs, helper) {
23-
return (
24-
helper.siteSettings.discourse_ai_enabled &&
25-
showAiPreferences(outletArgs.model, helper.siteSettings)
26-
);
8+
return helper.siteSettings.discourse_ai_enabled;
279
}
2810

2911
<template>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { get } from "@ember/helper";
2+
import RouteTemplate from "ember-route-template";
3+
import { eq } from "truth-helpers";
4+
import PreferenceCheckbox from "discourse/components/preference-checkbox";
5+
import SaveControls from "discourse/components/save-controls";
6+
import { i18n } from "discourse-i18n";
7+
8+
export default RouteTemplate(
9+
<template>
10+
<div class="ai-user-preferences">
11+
<legend class="control-label">{{i18n "discourse_ai.title"}}</legend>
12+
13+
{{#each @controller.booleanSettings as |setting|}}
14+
{{#if setting.isIncluded}}
15+
<div class="control-group ai-setting">
16+
<PreferenceCheckbox
17+
@labelKey={{setting.label}}
18+
@checked={{get @controller.model.user_option setting.key}}
19+
data-setting-name={{setting.settingName}}
20+
class="pref-{{setting.settingName}}"
21+
/>
22+
</div>
23+
{{/if}}
24+
{{/each}}
25+
26+
{{#if (eq @controller.userSettingAttributes.length 0)}}
27+
{{i18n "discourse_ai.user_preferences.empty"}}
28+
{{/if}}
29+
30+
{{#unless (eq @controller.userSettingAttributes.length 0)}}
31+
<SaveControls
32+
@id="user_ai_preference_save"
33+
@model={{@controller.model}}
34+
@action={{@controller.save}}
35+
@saved={{@controller.saved}}
36+
/>
37+
{{/unless}}
38+
</div>
39+
</template>
40+
);

assets/javascripts/discourse/templates/preferences/ai.hbs

Lines changed: 0 additions & 29 deletions
This file was deleted.

spec/system/ai_helper/ai_image_caption_spec.rb

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -91,27 +91,6 @@
9191
end
9292

9393
describe "automatic image captioning" do
94-
context "when ai helper is disabled" do
95-
before { SiteSetting.ai_helper_enabled = false }
96-
97-
it "should not have the setting present in the user preferences page" do
98-
user_preferences_ai_page.visit(user)
99-
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
100-
end
101-
end
102-
103-
context "when toggling the setting from the user preferences page" do
104-
before { user.user_option.update!(auto_image_caption: false) }
105-
106-
it "should update the preference to enabled" do
107-
user_preferences_ai_page.visit(user)
108-
user_preferences_ai_page.toggle_setting("pref-auto-image-caption")
109-
user_preferences_ai_page.save_changes
110-
wait_for(timeout: 5) { user.reload.user_option.auto_image_caption }
111-
expect(user.reload.user_option.auto_image_caption).to eq(true)
112-
end
113-
end
114-
11594
context "when the user preference is disabled" do
11695
before { user.user_option.update!(auto_image_caption: false) }
11796

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# frozen_string_literal: true
2+
3+
RSpec.describe "User AI preferences", type: :system, js: true do
4+
fab!(:user) { Fabricate(:admin, refresh_auto_groups: true) }
5+
fab!(:llm_model)
6+
let(:user_preferences_ai_page) { PageObjects::Pages::UserPreferencesAi.new }
7+
fab!(:discovery_persona) do
8+
Fabricate(:ai_persona, allowed_group_ids: [Group::AUTO_GROUPS[:admins]])
9+
end
10+
11+
before do
12+
SiteSetting.discourse_ai_enabled = true
13+
SiteSetting.ai_bot_discover_persona = discovery_persona.id
14+
Group.find_by(id: Group::AUTO_GROUPS[:admins]).add(user)
15+
assign_fake_provider_to(:ai_helper_model)
16+
assign_fake_provider_to(:ai_helper_image_caption_model)
17+
sign_in(user)
18+
end
19+
20+
describe "automatic image caption setting" do
21+
context "when ai helper is disabled" do
22+
before { SiteSetting.ai_helper_enabled = false }
23+
24+
it "should not have the setting present in the user preferences page" do
25+
user_preferences_ai_page.visit(user)
26+
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
27+
end
28+
end
29+
30+
context "when toggling the setting from the user preferences page" do
31+
before do
32+
SiteSetting.ai_helper_enabled = true
33+
SiteSetting.ai_helper_enabled_features = "image_caption"
34+
user.user_option.update!(auto_image_caption: false)
35+
end
36+
37+
it "should update the preference to enabled" do
38+
user_preferences_ai_page.visit(user)
39+
user_preferences_ai_page.toggle_setting("pref-auto-image-caption")
40+
user_preferences_ai_page.save_changes
41+
wait_for(timeout: 5) { user.reload.user_option.auto_image_caption }
42+
expect(user.reload.user_option.auto_image_caption).to eq(true)
43+
end
44+
end
45+
end
46+
47+
describe "search discoveries setting" do
48+
context "when discoveries are enabled" do
49+
before { SiteSetting.ai_bot_enabled = true }
50+
it "should have the setting present in the user preferences page" do
51+
user_preferences_ai_page.visit(user)
52+
expect(user_preferences_ai_page).to have_ai_preference("pref-ai-search-discoveries")
53+
end
54+
end
55+
56+
context "when discoveries are disabled" do
57+
SiteSetting.ai_bot_enabled = false
58+
SiteSetting.ai_bot_discover_persona = nil
59+
60+
it "should not have the setting present in the user preferences page" do
61+
user_preferences_ai_page.visit(user)
62+
expect(user_preferences_ai_page).to have_no_ai_preference("pref-ai-search-discoveries")
63+
end
64+
end
65+
end
66+
67+
describe "when no settings are available" do
68+
before do
69+
SiteSetting.ai_helper_enabled = false
70+
SiteSetting.ai_bot_enabled = false
71+
end
72+
73+
it "should not have any AI preferences and should show a message" do
74+
user_preferences_ai_page.visit(user)
75+
expect(user_preferences_ai_page).to have_no_ai_preference("pref-auto-image-caption")
76+
expect(user_preferences_ai_page).to have_no_ai_preference("pref-ai-search-discoveries")
77+
expect(page).to have_content(I18n.t("js.discourse_ai.user_preferences.empty"))
78+
end
79+
end
80+
end

0 commit comments

Comments
 (0)