FEATURE: Continue conversation from Discobot discovery (#1234)

This feature update allows for continuing the conversation with Discobot Discoveries in an AI bot chat. After discoveries gives you a response to your search you can continue with the existing context.
This commit is contained in:
Keegan George
2025-04-01 10:22:39 -07:00
committed by GitHub
parent 5331b6dd8e
commit bf5ccb452c
8 changed files with 192 additions and 0 deletions
@@ -168,4 +168,71 @@ RSpec.describe DiscourseAi::AiBot::BotController do
end
end
end
describe "#discover_continue_convo" do
before { SiteSetting.ai_bot_enabled = true }
fab!(:group)
fab!(:llm_model)
fab!(:ai_persona) do
persona = Fabricate(:ai_persona, allowed_group_ids: [group.id], default_llm_id: llm_model.id)
persona.create_user!
persona
end
let(:query) { "What is Discourse?" }
let(:context) { "Discourse is an open-source discussion platform." }
context "when the user is allowed to discover" do
before do
SiteSetting.ai_bot_discover_persona = ai_persona.id
group.add(user)
end
it "returns a 200 and creates a private message topic" do
expect {
post "/discourse-ai/ai-bot/discover/continue-convo",
params: {
user_id: user.id,
query: query,
context: context,
}
}.to change(Topic, :count).by(1)
expect(response.status).to eq(200)
expect(response.parsed_body["topic_id"]).to be_present
end
it "returns invalid parameters if the user_id is missing" do
post "/discourse-ai/ai-bot/discover/continue-convo",
params: {
query: query,
context: context,
}
expect(response.status).to eq(422)
expect(response.parsed_body["errors"]).to include("user_id")
end
it "returns invalid parameters if the query is missing" do
post "/discourse-ai/ai-bot/discover/continue-convo",
params: {
user_id: user.id,
context: context,
}
expect(response.status).to eq(422)
expect(response.parsed_body["errors"]).to include("query")
end
it "returns invalid parameters if the context is missing" do
post "/discourse-ai/ai-bot/discover/continue-convo",
params: {
user_id: user.id,
query: query,
}
expect(response.status).to eq(422)
expect(response.parsed_body["errors"]).to include("context")
end
end
end
end