Remove Duo Chat from pages that are outside the group or project
Context and problems to solve
GitLab Duo Chat shows up on pages outside of the group and project, for example: to dos, dashboard, my profile page.
However, the functionality the chat is different when asking questions inside a group/project versus outside of a group or project:
Illustration of functionality differences, what can I ask the chat?
Illustration of functionality differences, what can I ask the chat?
(Not a comprehensive list, just an illustration)
Problem to solve
Admin users
- The admin user may be confused to see the chat on their to-do's if they have turned of AI it in various projects. They could think the setting is broken.
End users
- How would the user know that the chat has different functionality depending on where they are in GitLab? e.g. that I cannot ask about an issue when I am in my to-do's.
Solution
Do not show GitLab Duo Chat button on pages outside of a group or project.
Data supports that most questions come from group or project
Example table describing solution: (Not a comprehensive list)
This table assumes:
- User has a Duo Pro seat (after paid cut off)
- User is an organization that allows Duo features
Page | Before this issue | After this issue |
---|---|---|
MR |
|
|
issue |
|
|
To-Dos |
|
|
My profile |
|
|
GitLab homepage (your work) |
|
|
FYI only (outside of scope of this issue)
The logic of whether the button appears while the user is on a group or project page is described in this issue
Backend context
This logic is determined by the show_breadcrumbs_entry_point
method, which we could update in the following way to implement this change (would also require spec updates):
# ee/lib/gitlab/llm/tanuki_bot.rb
def self.enabled_for?(user:, container: nil)
return false unless Feature.enabled?(:ai_duo_chat_switch, type: :ops)
return false unless user && container
Gitlab::Llm::Chain::Utils::ChatAuthorizer.container(container: container, user: user).allowed?
end
def self.show_breadcrumbs_entry_point?(user:, container: nil)
enabled_for?(user: user, container: container)
end