Rename connector compatibility for Generative AI so it is split between security and o11y (#174000)

In this PR, I'm renaming `Generative AI` to `Generative AI for Security`
in the connectors comatibility list so we have a split on Gen AI for
Security and Observability (follow up from
https://github.com/elastic/kibana/pull/173826).

## Screenshots
<img width="419" alt="Screenshot 2024-01-03 at 11 53 00 AM"
src="cb53c304-c96e-42c9-bce2-94b130040907">
<img width="542" alt="Screenshot 2024-01-03 at 11 53 32 AM"
src="6185010a-4b99-4dc7-bf62-9915c7b75a88">
<img width="1008" alt="Screenshot 2024-01-03 at 11 53 39 AM"
src="26301ee6-a50f-40ac-b898-91bf3e67c719">

## To verify

**Connectors**
1. Startup Kibana in trial mode
2. Open the create Bedrock connector flyout from the connectors page
3. Notice the compatibility is only for Security
4. Create a Bedrock connector (input random text in all fields to pass
validation)
5. Open the create OpenAI connector from the connectors page
6. Notice the compatibility is for Security and Observability
7. Create an OpenAI connector (input random text in all fields to pass
validation)

**Security Solution**
9. Navigate to the Security solution (`/app/security/get_started`)
10. Open the AI Assistant on the top right
11. Open the `Conversation Settings`
12. See OpenAI and Bedrock connectors displaying

**Observability**
13. Navigate to the Observability app (`/app/observability/overview`)
14. Open the AI Assistant on the top right
15. Select the actions menu on the top right of the flyout and open `AI
Assistant Settings`
16. Open the default connector dropdown
17. Notice only OpenAI connectors displaying
This commit is contained in:
Mike Côté 2024-01-05 08:01:59 -05:00 committed by GitHub
parent 71db3d93e7
commit c39fac616b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 21 additions and 24 deletions

View file

@ -37,7 +37,7 @@ describe('useLoadActionTypes', () => {
await waitForNextUpdate();
expect(defaultProps.http.get).toHaveBeenCalledWith('/api/actions/connector_types', {
query: { feature_id: 'generativeAI' },
query: { feature_id: 'generativeAIForSecurity' },
});
expect(toasts.addError).not.toHaveBeenCalled();
});

View file

@ -15,7 +15,7 @@ import type { IHttpFetchError } from '@kbn/core-http-browser';
import type { ActionType } from '@kbn/actions-plugin/common';
import { HttpSetup } from '@kbn/core-http-browser';
import { IToasts } from '@kbn/core-notifications-browser';
import { GenerativeAIConnectorFeatureId } from '@kbn/actions-plugin/common';
import { GenerativeAIForSecurityConnectorFeatureId } from '@kbn/actions-plugin/common';
import * as i18n from '../translations';
/**
@ -39,7 +39,7 @@ export const useLoadActionTypes = ({
async () => {
const queryResult = await loadActionTypes({
http,
featureId: GenerativeAIConnectorFeatureId,
featureId: GenerativeAIForSecurityConnectorFeatureId,
});
const sortedData = queryResult.sort((a, b) => a.name.localeCompare(b.name));

View file

@ -13,7 +13,7 @@ import {
describe('areValidFeatures', () => {
it('returns true when all inputs are valid features', () => {
expect(areValidFeatures(['alerting', 'cases', 'generativeAI'])).toBeTruthy();
expect(areValidFeatures(['alerting', 'cases', 'generativeAIForSecurity'])).toBeTruthy();
});
it('returns true when only one input and it is a valid feature', () => {
@ -43,8 +43,8 @@ describe('getConnectorFeatureName', () => {
describe('getConnectorCompatibility', () => {
it('returns the compatibility list for valid feature ids', () => {
expect(
getConnectorCompatibility(['alerting', 'cases', 'uptime', 'siem', 'generativeAI'])
).toEqual(['Alerting Rules', 'Cases', 'Generative AI']);
getConnectorCompatibility(['alerting', 'cases', 'uptime', 'siem', 'generativeAIForSecurity'])
).toEqual(['Alerting Rules', 'Cases', 'Generative AI for Security']);
});
it('skips invalid feature ids', () => {

View file

@ -25,20 +25,20 @@ export const AlertingConnectorFeatureId = 'alerting';
export const CasesConnectorFeatureId = 'cases';
export const UptimeConnectorFeatureId = 'uptime';
export const SecurityConnectorFeatureId = 'siem';
export const GenerativeAIConnectorFeatureId = 'generativeAI';
export const GenerativeAIForSecurityConnectorFeatureId = 'generativeAIForSecurity';
export const GenerativeAIForObservabilityConnectorFeatureId = 'generativeAIForObservability';
const compatibilityGenerativeAI = i18n.translate(
'xpack.actions.availableConnectorFeatures.compatibility.generativeAI',
const compatibilityGenerativeAIForSecurity = i18n.translate(
'xpack.actions.availableConnectorFeatures.compatibility.generativeAIForSecurity',
{
defaultMessage: 'Generative AI',
defaultMessage: 'Generative AI for Security',
}
);
const compatibilityGenerativeAIForObservability = i18n.translate(
'xpack.actions.availableConnectorFeatures.compatibility.generativeAIForObservability',
{
defaultMessage: 'Generative AI For Observability',
defaultMessage: 'Generative AI for Observability',
}
);
@ -88,10 +88,10 @@ export const SecuritySolutionFeature: ConnectorFeatureConfig = {
compatibility: compatibilityAlertingRules,
};
export const GenerativeAIFeature: ConnectorFeatureConfig = {
id: GenerativeAIConnectorFeatureId,
name: compatibilityGenerativeAI,
compatibility: compatibilityGenerativeAI,
export const GenerativeAIForSecurityFeature: ConnectorFeatureConfig = {
id: GenerativeAIForSecurityConnectorFeatureId,
name: compatibilityGenerativeAIForSecurity,
compatibility: compatibilityGenerativeAIForSecurity,
};
export const GenerativeAIForObservabilityFeature: ConnectorFeatureConfig = {
@ -105,7 +105,7 @@ const AllAvailableConnectorFeatures = {
[CasesConnectorFeature.id]: CasesConnectorFeature,
[UptimeConnectorFeature.id]: UptimeConnectorFeature,
[SecuritySolutionFeature.id]: SecuritySolutionFeature,
[GenerativeAIFeature.id]: GenerativeAIFeature,
[GenerativeAIForSecurityFeature.id]: GenerativeAIForSecurityFeature,
[GenerativeAIForObservabilityFeature.id]: GenerativeAIForObservabilityFeature,
};

View file

@ -13,7 +13,7 @@ export {
CasesConnectorFeatureId,
UptimeConnectorFeatureId,
SecurityConnectorFeatureId,
GenerativeAIConnectorFeatureId,
GenerativeAIForSecurityConnectorFeatureId,
} from './connector_feature_config';
export interface ActionType {
id: string;

View file

@ -10,7 +10,7 @@ import {
SubActionConnectorType,
ValidatorType,
} from '@kbn/actions-plugin/server/sub_action_framework/types';
import { GenerativeAIConnectorFeatureId } from '@kbn/actions-plugin/common';
import { GenerativeAIForSecurityConnectorFeatureId } from '@kbn/actions-plugin/common';
import { urlAllowListValidator } from '@kbn/actions-plugin/server';
import { ValidatorServices } from '@kbn/actions-plugin/server/types';
import { assertURL } from '@kbn/actions-plugin/server/sub_action_framework/helpers/validators';
@ -29,7 +29,7 @@ export const getConnectorType = (): SubActionConnectorType<Config, Secrets> => (
secrets: SecretsSchema,
},
validators: [{ type: ValidatorType.CONFIG, validator: configValidator }],
supportedFeatureIds: [GenerativeAIConnectorFeatureId],
supportedFeatureIds: [GenerativeAIForSecurityConnectorFeatureId],
minimumLicenseRequired: 'enterprise' as const,
renderParameterTemplates,
});

View file

@ -11,7 +11,7 @@ import {
ValidatorType,
} from '@kbn/actions-plugin/server/sub_action_framework/types';
import {
GenerativeAIConnectorFeatureId,
GenerativeAIForSecurityConnectorFeatureId,
GenerativeAIForObservabilityConnectorFeatureId,
} from '@kbn/actions-plugin/common';
import { urlAllowListValidator } from '@kbn/actions-plugin/server';
@ -37,7 +37,7 @@ export const getConnectorType = (): SubActionConnectorType<Config, Secrets> => (
},
validators: [{ type: ValidatorType.CONFIG, validator: configValidator }],
supportedFeatureIds: [
GenerativeAIConnectorFeatureId,
GenerativeAIForSecurityConnectorFeatureId,
GenerativeAIForObservabilityConnectorFeatureId,
],
minimumLicenseRequired: 'enterprise' as const,

View file

@ -7621,7 +7621,6 @@
"xpack.actions.availableConnectorFeatures.cases": "Cas",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "Règles d'alerting",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "Cas",
"xpack.actions.availableConnectorFeatures.compatibility.generativeAI": "IA générative",
"xpack.actions.availableConnectorFeatures.securitySolution": "Solution de sécurité",
"xpack.actions.availableConnectorFeatures.uptime": "Uptime",
"xpack.actions.builtin.cases.jiraTitle": "Jira",

View file

@ -7636,7 +7636,6 @@
"xpack.actions.availableConnectorFeatures.cases": "ケース",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "アラートルール",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "ケース",
"xpack.actions.availableConnectorFeatures.compatibility.generativeAI": "生成AI",
"xpack.actions.availableConnectorFeatures.securitySolution": "セキュリティソリューション",
"xpack.actions.availableConnectorFeatures.uptime": "アップタイム",
"xpack.actions.builtin.cases.jiraTitle": "Jira",

View file

@ -7702,7 +7702,6 @@
"xpack.actions.availableConnectorFeatures.cases": "案例",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "告警规则",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "案例",
"xpack.actions.availableConnectorFeatures.compatibility.generativeAI": "生成式 AI",
"xpack.actions.availableConnectorFeatures.securitySolution": "安全解决方案",
"xpack.actions.availableConnectorFeatures.uptime": "运行时间",
"xpack.actions.builtin.cases.jiraTitle": "Jira",