From 9edb9d5734ee6eeadd6b2d8362a063cfc8ab3c8f Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Tue, 30 Apr 2024 10:29:31 +0200 Subject: [PATCH] [Discover][Obs ai assistant] Set the index pattern on the context api to generate correct ES|QL queries etc (#181001) ## Summary Sets the index pattern correctly in the obs ai assistant. The Obs ai assistant is part of Discover in serverless Oblt project and can also be set up everywhere from the Observability AI Assistant scope advanced setting. It is a very useful tool for the Discover users and for moving from KQL to ES|QL world. This is important for prompts such as: - Transform the KQL and filters to ES|QL ![meow](https://github.com/elastic/kibana/assets/17003240/e9b1be13-667a-4fdb-addb-fb77e485b99e) - More image Other interesting prompts: - Equivalent of KQL of where filters image - Explain the ES|QL query image - Run questions on your dataset and unified search bar selection image --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- src/plugins/discover/kibana.jsonc | 3 ++- .../main/components/layout/discover_layout.tsx | 11 +++++++++++ src/plugins/discover/public/build_services.ts | 3 +++ src/plugins/discover/public/plugin.tsx | 6 ++++++ src/plugins/discover/tsconfig.json | 3 ++- 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/plugins/discover/kibana.jsonc b/src/plugins/discover/kibana.jsonc index 17693545dd6d0..9b892ee79fe16 100644 --- a/src/plugins/discover/kibana.jsonc +++ b/src/plugins/discover/kibana.jsonc @@ -37,7 +37,8 @@ "savedObjectsTaggingOss", "lens", "noDataPage", - "globalSearch" + "globalSearch", + "observabilityAIAssistant" ], "requiredBundles": ["kibanaUtils", "kibanaReact", "unifiedSearch", "savedObjects"], "extraPublicDirs": ["common"] diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 344e0b36c9d0e..a104dc3c9d73b 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -71,6 +71,7 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { filterManager, history, spaces, + observabilityAIAssistant, } = useDiscoverServices(); const pageBackgroundColor = useEuiBackgroundColor('plain'); const globalQueryState = data.query.getState(); @@ -132,6 +133,16 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { sort, }); + // The assistant is getting the state from the url correctly + // expect from the index pattern where we have only the dataview id + useEffect(() => { + return observabilityAIAssistant?.service.setScreenContext({ + screenDescription: `The user is looking at the Discover view on the ${ + isPlainRecord ? 'ES|QL' : 'dataView' + } mode. The index pattern is the ${dataView.getIndexPattern()}`, + }); + }, [dataView, isPlainRecord, observabilityAIAssistant?.service]); + const onAddFilter = useCallback( (field: DataViewField | string, values: unknown, operation: '+' | '-') => { const fieldName = typeof field === 'string' ? field : field.name; diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts index fc599bd59620e..7f7bcdee2154b 100644 --- a/src/plugins/discover/public/build_services.ts +++ b/src/plugins/discover/public/build_services.ts @@ -54,6 +54,7 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import type { ContentClient } from '@kbn/content-management-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { memoize, noop } from 'lodash'; import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; import { DiscoverStartPlugins } from './plugin'; @@ -123,6 +124,7 @@ export interface DiscoverServices { uiActions: UiActionsStart; contentClient: ContentClient; noDataPage?: NoDataPagePluginStart; + observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; } export const buildServices = memoize( @@ -203,6 +205,7 @@ export const buildServices = memoize( uiActions: plugins.uiActions, contentClient: plugins.contentManagement.client, noDataPage: plugins.noDataPage, + observabilityAIAssistant: plugins.observabilityAIAssistant, }; } ); diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index 46cbf95d299b1..902cc0a38e717 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -46,6 +46,10 @@ import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; import { TRUNCATE_MAX_HEIGHT, ENABLE_ESQL } from '@kbn/discover-utils'; import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; +import type { + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, +} from '@kbn/observability-ai-assistant-plugin/public'; import { PLUGIN_ID } from '../common'; import { registerFeature } from './register_feature'; import { buildServices, UrlTracker } from './build_services'; @@ -166,6 +170,7 @@ export interface DiscoverSetupPlugins { data: DataPublicPluginSetup; expressions: ExpressionsSetup; globalSearch?: GlobalSearchPluginSetup; + observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup; } /** @@ -196,6 +201,7 @@ export interface DiscoverStartPlugins { lens: LensPublicStart; contentManagement: ContentManagementPublicStart; noDataPage?: NoDataPagePluginStart; + observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; } export type StartRenderServices = Pick; diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index b10dee36e3fb7..6b576f3a08c1a 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -83,7 +83,8 @@ "@kbn/deeplinks-analytics", "@kbn/shared-ux-markdown", "@kbn/data-view-utils", - "@kbn/presentation-publishing" + "@kbn/presentation-publishing", + "@kbn/observability-ai-assistant-plugin" ], "exclude": ["target/**/*"] }