diff --git a/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts b/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts index 8ab94b821b59f..c45d372fbcba7 100644 --- a/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts +++ b/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts @@ -172,7 +172,6 @@ export const SECURITY_SOLUTION_ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING = 'securitySolution:enableVisualizationsInFlyout' as const; export const SECURITY_SOLUTION_ENABLE_GRAPH_VISUALIZATION_SETTING = 'securitySolution:enableGraphVisualization' as const; - // Timelion settings export const TIMELION_ES_DEFAULT_INDEX_ID = 'timelion:es.default_index'; export const TIMELION_ES_TIME_FIELD_ID = 'timelion:es.timefield'; diff --git a/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.test.tsx b/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.test.tsx index 062db8c53dce9..f99943f96d2bf 100644 --- a/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.test.tsx +++ b/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.test.tsx @@ -6,10 +6,7 @@ */ import '@testing-library/jest-dom'; import { act, render, screen } from '@testing-library/react'; -import { - AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED, - DefaultAIConnector, -} from './default_ai_connector'; +import { DefaultAIConnector } from './default_ai_connector'; import { QueryClient, QueryClientProvider } from '@kbn/react-query'; import { I18nProvider } from '@kbn/i18n-react'; import userEvent from '@testing-library/user-event'; @@ -86,16 +83,7 @@ function setupTest({ } as unknown as ApplicationStart } docLinks={{} as DocLinksStart} - featureFlags={ - { - getBooleanValue: jest.fn().mockImplementation((flag) => { - if (flag === AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED && enabled) { - return true; - } - return false; - }), - } as unknown as FeatureFlagsStart - } + featureFlags={{} as unknown as FeatureFlagsStart} toast={{} as IToasts} > {children} diff --git a/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.tsx b/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.tsx index 8e7a975b56ec7..900ef75123fe2 100644 --- a/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.tsx +++ b/x-pack/platform/packages/shared/ai-assistant-default-llm-setting/src/components/default_ai_connector.tsx @@ -33,13 +33,6 @@ import { i18n } from '@kbn/i18n'; import { NO_DEFAULT_CONNECTOR } from '../lib/constants'; import { useDefaultAiConnectorSettingContext } from '../context/default_ai_connector_context'; -/** Feature flag for the default AI connector setting */ -export const AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED = - 'aiAssistant.defaultLlmSettingEnabled' as const; - -/** The default value for the default AI connector setting */ -export const AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED_VALUE = true as const; - interface ConnectorData { connectors?: Array<{ id: string; @@ -146,7 +139,7 @@ const getOptionsByValues = ( }; export const DefaultAIConnector: React.FC = ({ connectors, settings }) => { - const { toast, application, docLinks, featureFlags } = useDefaultAiConnectorSettingContext(); + const { toast, application, docLinks } = useDefaultAiConnectorSettingContext(); const options = useMemo(() => getOptions(connectors), [connectors]); const { handleFieldChange, fields, unsavedChanges } = settings; @@ -276,15 +269,6 @@ export const DefaultAIConnector: React.FC = ({ connectors, settings }) => ); }, [elasticManagedLlmExists, application, docLinks]); - if ( - !featureFlags.getBooleanValue( - AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED, - AI_ASSISTANT_DEFAULT_LLM_SETTING_ENABLED_VALUE - ) - ) { - return null; - } - return ( <> { }); useKibanaMock.mockReturnValue({ services: { - featureFlags: { - getBooleanValue: jest.fn().mockImplementation((flag) => { - if (flag === 'aiAssistant.defaultLlmSettingEnabled') { - return true; - } - return false; - }), - }, application: { getUrlForApp: getUrlForAppMock, capabilities: { diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.test.tsx index e3b09c8fef8fc..8369d5d5c5990 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.test.tsx @@ -15,6 +15,11 @@ import { import { useNavigateTo } from '@kbn/security-solution-navigation'; jest.mock('@kbn/security-solution-navigation'); +jest.mock('../../../common/lib/kibana', () => { + return { + ...jest.requireActual('../../../common/lib/kibana'), + }; +}); describe('ConnectorMissingCallout', () => { it('should render component', () => { @@ -45,7 +50,7 @@ describe('ConnectorMissingCallout', () => { expect(navigateTo).toHaveBeenCalledWith({ appId: 'management', - path: '/kibana/settings?query=defaultAIConnector', + path: '/ai/genAiSettings', }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.tsx index 7406169fd1b79..ba51a65df62f4 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/ai_for_soc/components/connector_missing_callout.tsx @@ -53,7 +53,11 @@ export const ConnectorMissingCallout = memo( ({ canSeeAdvancedSettings }: ConnectorMissingCalloutProps) => { const { navigateTo } = useNavigateTo(); const goToKibanaSettings = useCallback( - () => navigateTo({ appId: 'management', path: '/kibana/settings?query=defaultAIConnector' }), + () => + navigateTo({ + appId: 'management', + path: '/ai/genAiSettings', + }), [navigateTo] ); diff --git a/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts b/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts index ed2c20628ba3b..94fce7eecd1bb 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import { schema } from '@kbn/config-schema'; import type { CoreSetup, UiSettingsParams } from '@kbn/core/server'; -import type { Connector } from '@kbn/actions-plugin/server/application/connector/types'; import { APP_ID, DEFAULT_ANOMALY_SCORE, @@ -41,7 +40,6 @@ import { EXCLUDED_DATA_TIERS_FOR_RULE_EXECUTION, ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING, ENABLE_GRAPH_VISUALIZATION_SETTING, - DEFAULT_AI_CONNECTOR, } from '../common/constants'; import type { ExperimentalFeatures } from '../common/experimental_features'; import { LogLevelSetting } from '../common/api/detection_engine/rule_monitoring'; @@ -496,30 +494,3 @@ export const initUiSettings = ( uiSettings.register(orderSettings(securityUiSettings)); }; -export const getDefaultAIConnectorSetting = (connectors: Connector[]): SettingsConfig | null => - connectors.length > 0 - ? { - [DEFAULT_AI_CONNECTOR]: { - name: i18n.translate('xpack.securitySolution.uiSettings.defaultAIConnectorLabel', { - defaultMessage: 'Default AI Connector', - }), - // TODO, make Elastic LLM the default value once fully available in serverless - value: connectors[0].id, - description: i18n.translate( - 'xpack.securitySolution.uiSettings.defaultAIConnectorDescription', - { - // TODO update this copy, waiting on James Spiteri's input - defaultMessage: - 'Default AI connector for serverless AI features (Elastic AI SOC Engine)', - } - ), - type: 'select', - options: connectors.map(({ id }) => id), - optionLabels: Object.fromEntries(connectors.map(({ id, name }) => [id, name])), - category: [APP_ID], - requiresPageReload: true, - schema: schema.string(), - solution: 'security', - }, - } - : null; diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/server/plugin.ts b/x-pack/solutions/security/plugins/security_solution_serverless/server/plugin.ts index 1ff3b29af4422..623885b5df7bf 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/server/plugin.ts +++ b/x-pack/solutions/security/plugins/security_solution_serverless/server/plugin.ts @@ -14,9 +14,6 @@ import type { } from '@kbn/core/server'; import { SECURITY_PROJECT_SETTINGS } from '@kbn/serverless-security-settings'; -import { isSupportedConnector } from '@kbn/inference-common'; -import { getDefaultAIConnectorSetting } from '@kbn/security-solution-plugin/server/ui_settings'; -import type { Connector } from '@kbn/actions-plugin/server/application/connector/types'; import { getEnabledProductFeatures } from '../common/pli/pli_features'; import type { ServerlessSecurityConfig } from './config'; @@ -90,29 +87,6 @@ export class SecuritySolutionServerlessPlugin // Setup project uiSettings whitelisting pluginsSetup.serverless.setupProjectSettings(SECURITY_PROJECT_SETTINGS); - // use metering check which verifies AI4SOC is enabled - if (ai4SocMeteringService.shouldMeter(this.config)) { - // Serverless Advanced Settings setup - coreSetup - .getStartServices() - .then(async ([_, depsStart]) => { - try { - const unsecuredActionsClient = depsStart.actions.getUnsecuredActionsClient(); - // using "default" space actually forces the api to use undefined space (see getAllUnsecured) - const aiConnectors = (await unsecuredActionsClient.getAll('default')).filter( - (connector: Connector) => isSupportedConnector(connector) - ); - const defaultAIConnectorSetting = getDefaultAIConnectorSetting(aiConnectors); - if (defaultAIConnectorSetting !== null) { - coreSetup.uiSettings.register(defaultAIConnectorSetting); - } - } catch (error) { - this.logger.error(`Error registering default AI connector: ${error}`); - } - }) - .catch(() => {}); // it shouldn't reject, but just in case - } - // Tasks this.cloudSecurityUsageReportingTask = new SecurityUsageReportingTask({ core: coreSetup, diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/tsconfig.json b/x-pack/solutions/security/plugins/security_solution_serverless/tsconfig.json index 8a84cef351206..9582d2825c116 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/tsconfig.json +++ b/x-pack/solutions/security/plugins/security_solution_serverless/tsconfig.json @@ -49,7 +49,6 @@ "@kbn/integration-assistant-plugin", "@kbn/cloud-security-posture-common", "@kbn/core-application-browser", - "@kbn/inference-common", "@kbn/dev-utils" ] }