Allow AI Catalog features to be at different maturity levels
About
Currently, the entire AI Catalog is in Experiment
.
We've decided that individual AI Catalog features should independently move from Experiment
-> Beta
-> GA
.
Currently, agents are primed to be the first to move to Beta and then to GA. We expect flows, third party flows, and foundational agents to be maturing at different speeds.
Problem
Customers must opt in to Experimental and Beta AI Features in order to use them. This allows customers control over the maturity-level of the AI features they use.
Otherwise, they should not be able to use those features.
The UX should also clearly differentiate which features are which maturity level.
Proposal
backend Backend
In addition to the existing ai_catalog
feature, add individual entries for each AI Catalog feature into Gitlab::Llm::Utils::AiFeaturesCatalogue
, and Gitlab::Llm::StageCheck
.
ai_catalog_agents
ai_catalog_flows
ai_catalog_third_party_flows
ai_catalog_foundational_agents
When defining in Gitlab::Llm::Utils::AiFeaturesCatalogue
, give them the correct feature maturity.
For example:
`Gitlab::Llm::StageCheck.available?(project, :ai_catalog_agents)`
Update the EE ProjectPolicy
and ItemPolicy
checks to include additional checks that the project supports the feature maturity of those features.
We want to
- Deny mutating AI Catalog items if the project does not pass
StageCheck
- Deny enabling AI Catalog items if the project does not pass
StageCheck
- Deny reading AI Catalog items - unless the item is public.
We also want to make some booleans available to the frontend so they can show/hide AI Catalog features at the project-level, alongside feature flag checks. (See below).
frontend Frontend
We will need the frontend to observe different features at different levels of maturity.
At the project-level, we should hide features that are Experimental/Beta if the project has not opted-in to Experiment/Beta AI features. The backend should make available to the frontend boolean properties it can use to determine if different AI Catalog features should be presented in the UI. This will be similar to how feature flag checks work.
We should signal the maturity level of the different features in the individual tabs:
When viewing an item:
When creating/editing an item:
And when selecting different kinds of flows (if the different flows are at different maturity levels):