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

Commit 799a5a7

Browse files
committed
fix tests
1 parent 542f53c commit 799a5a7

File tree

9 files changed

+94
-26
lines changed

9 files changed

+94
-26
lines changed

app/controllers/discourse_ai/admin/ai_personas_controller.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,20 @@ def ai_persona_params
9696
:temperature,
9797
:default_llm,
9898
:user_id,
99-
:mentionable,
10099
:max_context_posts,
101100
:vision_enabled,
102101
:vision_max_pixels,
103102
:rag_chunk_tokens,
104103
:rag_chunk_overlap_tokens,
105104
:rag_conversation_chunks,
106105
:question_consolidator_llm,
107-
:allow_chat,
106+
:allow_chat_channel_mentions,
107+
:allow_chat_direct_messages,
108+
:allow_topic_mentions,
109+
:allow_personal_messages,
108110
:tool_details,
109111
:forced_tool_count,
112+
:force_default_llm,
110113
allowed_group_ids: [],
111114
rag_uploads: [:id],
112115
)

app/models/ai_persona.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class AiPersona < ActiveRecord::Base
44
# TODO remove this line 01-1-2025
5-
self.ignored_columns = [:commands, :allow_chat, :mentionable]
5+
self.ignored_columns = %i[commands allow_chat mentionable]
66

77
# places a hard limit, so per site we cache a maximum of 500 classes
88
MAX_PERSONAS_PER_SITE = 500
@@ -68,7 +68,7 @@ def self.persona_users(user: nil)
6868
end
6969

7070
if user
71-
persona_users.select { |user| user.in_any_groups?(mentionable[:allowed_group_ids]) }
71+
persona_users.select { |persona_user| user.in_any_groups?(persona_user[:allowed_group_ids]) }
7272
else
7373
persona_users
7474
end
@@ -252,7 +252,10 @@ def regenerate_rag_fragments
252252
private
253253

254254
def chat_preconditions
255-
if (allow_chat_channel_mentions || allow_chat_direct_messages) && !default_llm
255+
if (
256+
allow_chat_channel_mentions || allow_chat_direct_messages || allow_topic_mentions ||
257+
force_default_llm
258+
) && !default_llm
256259
errors.add(:default_llm, I18n.t("discourse_ai.ai_bot.personas.default_llm_required"))
257260
end
258261
end

app/serializers/localized_ai_persona_serializer.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer
1414
:allowed_group_ids,
1515
:temperature,
1616
:top_p,
17-
:mentionable,
1817
:default_llm,
1918
:user_id,
2019
:max_context_posts,
@@ -24,9 +23,13 @@ class LocalizedAiPersonaSerializer < ApplicationSerializer
2423
:rag_chunk_overlap_tokens,
2524
:rag_conversation_chunks,
2625
:question_consolidator_llm,
27-
:allow_chat,
2826
:tool_details,
29-
:forced_tool_count
27+
:forced_tool_count,
28+
:allow_chat_channel_mentions,
29+
:allow_chat_direct_messages,
30+
:allow_topic_mentions,
31+
:allow_personal_messages,
32+
:force_default_llm
3033

3134
has_one :user, serializer: BasicUserSerializer, embed: :object
3235
has_many :rag_uploads, serializer: UploadSerializer, embed: :object

lib/ai_bot/entry_point.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ class EntryPoint
88
Bot = Struct.new(:id, :name, :llm)
99

1010
def self.all_bot_ids
11-
AiPersona.persona_users.map { |persona| persona[:user_id] }
11+
AiPersona.persona_users.map { |persona| persona[:user_id] }.concat(
12+
LlmModel.where(enabled_chat_bot: true).pluck(:user_id),
13+
)
1214
end
1315

1416
def self.find_participant_in(participant_ids)

spec/lib/modules/ai_bot/entry_point_spec.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,16 @@
3535
expect(serializer[:current_user][:can_debug_ai_bot_conversations]).to eq(true)
3636
end
3737

38-
it "adds mentionables to current_user_serializer" do
38+
it "adds information about forcint default llm to current_user_serializer" do
3939
Group.refresh_automatic_groups!
4040

4141
persona =
4242
Fabricate(
4343
:ai_persona,
44-
mentionable: true,
4544
enabled: true,
4645
allowed_group_ids: [bot_allowed_group.id],
46+
default_llm: "claude-2",
47+
force_default_llm: true,
4748
)
4849
persona.create_user!
4950

@@ -54,7 +55,7 @@
5455
persona_bot = bots.find { |bot| bot["id"] == persona.user_id }
5556

5657
expect(persona_bot["username"]).to eq(persona.user.username)
57-
expect(persona_bot["mentionable"]).to eq(true)
58+
expect(persona_bot["force_default_llm"]).to eq(true)
5859
end
5960

6061
it "includes user ids for all personas in the serializer" do
@@ -69,7 +70,7 @@
6970

7071
persona_bot = bots.find { |bot| bot["id"] == persona.user_id }
7172
expect(persona_bot["username"]).to eq(persona.user.username)
72-
expect(persona_bot["mentionable"]).to eq(false)
73+
expect(persona_bot["force_default_llm"]).to eq(false)
7374
end
7475

7576
it "queues a job to generate a reply by the AI" do

spec/models/ai_persona_spec.rb

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,12 @@
7171
forum_helper = AiPersona.find_by(name: "Forum Helper")
7272
forum_helper.update!(
7373
user_id: 1,
74-
mentionable: true,
7574
default_llm: "anthropic:claude-2",
7675
max_context_posts: 3,
76+
allow_topic_mentions: true,
77+
allow_personal_messages: true,
78+
allow_chat_channel_mentions: true,
79+
allow_chat_direct_messages: true,
7780
)
7881

7982
klass = forum_helper.class_instance
@@ -83,9 +86,12 @@
8386
# tl 0 by default
8487
expect(klass.allowed_group_ids).to eq([10])
8588
expect(klass.user_id).to eq(1)
86-
expect(klass.mentionable).to eq(true)
8789
expect(klass.default_llm).to eq("anthropic:claude-2")
8890
expect(klass.max_context_posts).to eq(3)
91+
expect(klass.allow_topic_mentions).to eq(true)
92+
expect(klass.allow_personal_messages).to eq(true)
93+
expect(klass.allow_chat_channel_mentions).to eq(true)
94+
expect(klass.allow_chat_direct_messages).to eq(true)
8995
end
9096

9197
it "defines singleton methods non persona classes" do
@@ -98,7 +104,10 @@
98104
allowed_group_ids: [],
99105
default_llm: "anthropic:claude-2",
100106
max_context_posts: 3,
101-
mentionable: true,
107+
allow_topic_mentions: true,
108+
allow_personal_messages: true,
109+
allow_chat_channel_mentions: true,
110+
allow_chat_direct_messages: true,
102111
user_id: 1,
103112
)
104113

@@ -108,20 +117,53 @@
108117
expect(klass.system).to eq(false)
109118
expect(klass.allowed_group_ids).to eq([])
110119
expect(klass.user_id).to eq(1)
111-
expect(klass.mentionable).to eq(true)
112120
expect(klass.default_llm).to eq("anthropic:claude-2")
113121
expect(klass.max_context_posts).to eq(3)
122+
expect(klass.allow_topic_mentions).to eq(true)
123+
expect(klass.allow_personal_messages).to eq(true)
124+
expect(klass.allow_chat_channel_mentions).to eq(true)
125+
expect(klass.allow_chat_direct_messages).to eq(true)
114126
end
115127

116-
it "does not allow setting allow_chat without a default_llm" do
128+
it "does not allow setting allowing chat without a default_llm" do
117129
persona =
118130
AiPersona.create(
119131
name: "test",
120132
description: "test",
121133
system_prompt: "test",
122134
allowed_group_ids: [],
123135
default_llm: nil,
124-
allow_chat: true,
136+
allow_chat_channel_mentions: true,
137+
)
138+
139+
expect(persona.valid?).to eq(false)
140+
expect(persona.errors[:default_llm].first).to eq(
141+
I18n.t("discourse_ai.ai_bot.personas.default_llm_required"),
142+
)
143+
144+
persona =
145+
AiPersona.create(
146+
name: "test",
147+
description: "test",
148+
system_prompt: "test",
149+
allowed_group_ids: [],
150+
default_llm: nil,
151+
allow_chat_direct_messages: true,
152+
)
153+
154+
expect(persona.valid?).to eq(false)
155+
expect(persona.errors[:default_llm].first).to eq(
156+
I18n.t("discourse_ai.ai_bot.personas.default_llm_required"),
157+
)
158+
159+
persona =
160+
AiPersona.create(
161+
name: "test",
162+
description: "test",
163+
system_prompt: "test",
164+
allowed_group_ids: [],
165+
default_llm: nil,
166+
allow_topic_mentions: true,
125167
)
126168

127169
expect(persona.valid?).to eq(false)

spec/plugin_helper.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
module DiscourseAi::ChatBotHelper
44
def toggle_enabled_bots(bots: [])
5-
LlmModel.update_all(enabled_chat_bot: false)
5+
models = LlmModel.all
6+
models = models.where("id not in (?)", bots.map(&:id)) if bots.present?
7+
models.update_all(enabled_chat_bot: false)
8+
69
bots.each { |b| b.update!(enabled_chat_bot: true) }
710
DiscourseAi::AiBot::SiteSettingsExtension.enable_or_disable_ai_bots
811
end

spec/requests/admin/ai_personas_controller_spec.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@
4040
:ai_persona,
4141
name: "search2",
4242
tools: [["SearchCommand", { base_query: "test" }, true]],
43-
mentionable: true,
43+
allow_topic_mentions: true,
44+
allow_personal_messages: true,
45+
allow_chat_channel_mentions: true,
46+
allow_chat_direct_messages: true,
4447
default_llm: "anthropic:claude-2",
4548
forced_tool_count: 2,
4649
)
@@ -52,7 +55,11 @@
5255
serializer_persona1 = response.parsed_body["ai_personas"].find { |p| p["id"] == persona1.id }
5356
serializer_persona2 = response.parsed_body["ai_personas"].find { |p| p["id"] == persona2.id }
5457

55-
expect(serializer_persona2["mentionable"]).to eq(true)
58+
expect(serializer_persona2["allow_topic_mentions"]).to eq(true)
59+
expect(serializer_persona2["allow_personal_messages"]).to eq(true)
60+
expect(serializer_persona2["allow_chat_channel_mentions"]).to eq(true)
61+
expect(serializer_persona2["allow_chat_direct_messages"]).to eq(true)
62+
5663
expect(serializer_persona2["default_llm"]).to eq("anthropic:claude-2")
5764
expect(serializer_persona2["user_id"]).to eq(persona2.user_id)
5865
expect(serializer_persona2["user"]["id"]).to eq(persona2.user_id)
@@ -167,7 +174,10 @@
167174
tools: [["search", { "base_query" => "test" }, true]],
168175
top_p: 0.1,
169176
temperature: 0.5,
170-
mentionable: true,
177+
allow_topic_mentions: true,
178+
allow_personal_messages: true,
179+
allow_chat_channel_mentions: true,
180+
allow_chat_direct_messages: true,
171181
default_llm: "anthropic:claude-2",
172182
forced_tool_count: 2,
173183
}
@@ -186,9 +196,12 @@
186196
expect(persona_json["name"]).to eq("superbot")
187197
expect(persona_json["top_p"]).to eq(0.1)
188198
expect(persona_json["temperature"]).to eq(0.5)
189-
expect(persona_json["mentionable"]).to eq(true)
190199
expect(persona_json["default_llm"]).to eq("anthropic:claude-2")
191200
expect(persona_json["forced_tool_count"]).to eq(2)
201+
expect(persona_json["allow_topic_mentions"]).to eq(true)
202+
expect(persona_json["allow_personal_messages"]).to eq(true)
203+
expect(persona_json["allow_chat_channel_mentions"]).to eq(true)
204+
expect(persona_json["allow_chat_direct_messages"]).to eq(true)
192205

193206
persona = AiPersona.find(persona_json["id"])
194207

spec/requests/embeddings/embeddings_controller_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ def create_api_key(user)
6363
context "when rate limiting is enabled" do
6464
before { RateLimiter.enable }
6565

66-
use_redis_snapshotting
67-
6866
it "will rate limit correctly" do
6967
stub_const(subject.class, :MAX_HYDE_SEARCHES_PER_MINUTE, 1) do
7068
stub_const(subject.class, :MAX_SEARCHES_PER_MINUTE, 2) do

0 commit comments

Comments
 (0)