mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
[Obs AI Assistant] Disable plugin in Serverless ES, Security (#179623)
Disable the Obs AI Assistant plugin in Serverless Search & Serverless Security. Some work was done to move `observabilityAIAssistant` from `requiredPlugins` to `optionalPlugins` in upstream dependencies. Closes https://github.com/elastic/kibana/issues/166999 Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
314d27f178
commit
deaafca381
47 changed files with 140 additions and 153 deletions
|
@ -11,6 +11,7 @@ xpack.securitySolution.enabled: false
|
|||
xpack.serverless.observability.enabled: false
|
||||
enterpriseSearch.enabled: false
|
||||
xpack.fleet.enabled: false
|
||||
xpack.observabilityAIAssistant.enabled: false
|
||||
|
||||
## Cloud settings
|
||||
xpack.cloud.serverless.project_type: search
|
||||
|
|
|
@ -6,6 +6,7 @@ xpack.apm.enabled: false
|
|||
xpack.infra.enabled: false
|
||||
xpack.observabilityLogsExplorer.enabled: false
|
||||
xpack.observability.enabled: false
|
||||
xpack.observabilityAIAssistant.enabled: false
|
||||
|
||||
## Cloud settings
|
||||
xpack.cloud.serverless.project_type: security
|
||||
|
|
|
@ -29,8 +29,7 @@
|
|||
"dataViews",
|
||||
"lens",
|
||||
"maps",
|
||||
"uiActions",
|
||||
"observabilityAIAssistant"
|
||||
"uiActions"
|
||||
],
|
||||
"optionalPlugins": [
|
||||
"actions",
|
||||
|
@ -49,7 +48,8 @@
|
|||
"customIntegrations", // Move this to requiredPlugins after completely migrating from the Tutorials Home App
|
||||
"licenseManagement",
|
||||
"profilingDataAccess",
|
||||
"cases"
|
||||
"cases",
|
||||
"observabilityAIAssistant"
|
||||
],
|
||||
"requiredBundles": [
|
||||
"fleet",
|
||||
|
|
|
@ -21,24 +21,19 @@ export function ErrorSampleContextualInsight({
|
|||
error: APMError;
|
||||
transaction?: Transaction;
|
||||
}) {
|
||||
const {
|
||||
observabilityAIAssistant: {
|
||||
ObservabilityAIAssistantContextualInsight,
|
||||
getContextualInsightMessages,
|
||||
},
|
||||
} = useApmPluginContext();
|
||||
const { observabilityAIAssistant } = useApmPluginContext();
|
||||
|
||||
const [logStacktrace, setLogStacktrace] = useState('');
|
||||
const [exceptionStacktrace, setExceptionStacktrace] = useState('');
|
||||
|
||||
const messages = useMemo<Message[]>(() => {
|
||||
const messages = useMemo<Message[] | undefined>(() => {
|
||||
const serviceName = error.service.name;
|
||||
const languageName = error.service.language?.name ?? '';
|
||||
const runtimeName = error.service.runtime?.name ?? '';
|
||||
const runtimeVersion = error.service.runtime?.version ?? '';
|
||||
const transactionName = transaction?.transaction.name ?? '';
|
||||
|
||||
return getContextualInsightMessages({
|
||||
return observabilityAIAssistant?.getContextualInsightMessages({
|
||||
message: `I'm looking at an exception and trying to understand what it means`,
|
||||
instructions: `I'm an SRE. I am looking at an exception and trying to understand what it means.
|
||||
|
||||
|
@ -68,13 +63,14 @@ export function ErrorSampleContextualInsight({
|
|||
transaction,
|
||||
logStacktrace,
|
||||
exceptionStacktrace,
|
||||
getContextualInsightMessages,
|
||||
observabilityAIAssistant,
|
||||
]);
|
||||
|
||||
return ObservabilityAIAssistantContextualInsight && messages ? (
|
||||
return observabilityAIAssistant?.ObservabilityAIAssistantContextualInsight &&
|
||||
messages ? (
|
||||
<>
|
||||
<EuiFlexItem>
|
||||
<ObservabilityAIAssistantContextualInsight
|
||||
<observabilityAIAssistant.ObservabilityAIAssistantContextualInsight
|
||||
messages={messages}
|
||||
title={i18n.translate(
|
||||
'xpack.apm.errorGroupContextualInsight.explainErrorTitle',
|
||||
|
|
|
@ -268,10 +268,14 @@ export function ServiceInventory() {
|
|||
[tiebreakerField]
|
||||
);
|
||||
|
||||
const { setScreenContext } =
|
||||
useApmPluginContext().observabilityAIAssistant.service;
|
||||
const setScreenContext =
|
||||
useApmPluginContext().observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
useEffect(() => {
|
||||
if (!setScreenContext) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isFailure(mainStatisticsStatus)) {
|
||||
return setScreenContext({
|
||||
screenDescription: 'The services have failed to load',
|
||||
|
|
|
@ -53,11 +53,11 @@ export function ServiceOverview() {
|
|||
const { serviceName, fallbackToTransactions, agentName, serverlessType } =
|
||||
useApmServiceContext();
|
||||
|
||||
const { setScreenContext } =
|
||||
useApmPluginContext().observabilityAIAssistant.service;
|
||||
const setScreenContext =
|
||||
useApmPluginContext().observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
useEffect(() => {
|
||||
return setScreenContext({
|
||||
return setScreenContext?.({
|
||||
screenDescription: `The user is looking at the service overview page for ${serviceName}.`,
|
||||
data: [
|
||||
{
|
||||
|
|
|
@ -154,11 +154,11 @@ export function ServiceOverviewThroughputChart({
|
|||
: []),
|
||||
];
|
||||
|
||||
const { setScreenContext } =
|
||||
useApmPluginContext().observabilityAIAssistant.service;
|
||||
const setScreenContext =
|
||||
useApmPluginContext().observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
useEffect(() => {
|
||||
return setScreenContext(
|
||||
return setScreenContext?.(
|
||||
getThroughputScreenContext({
|
||||
serviceName,
|
||||
transactionName,
|
||||
|
|
|
@ -56,11 +56,11 @@ export function TransactionOverview() {
|
|||
false
|
||||
);
|
||||
|
||||
const { setScreenContext } =
|
||||
useApmPluginContext().observabilityAIAssistant.service;
|
||||
const setScreenContext =
|
||||
useApmPluginContext().observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
useEffect(() => {
|
||||
return setScreenContext({
|
||||
return setScreenContext?.({
|
||||
screenDescription: `The user is looking at the transactions overview for ${serviceName}, and the transaction type is ${transactionType}`,
|
||||
});
|
||||
}, [setScreenContext, serviceName, transactionType]);
|
||||
|
|
|
@ -119,7 +119,7 @@ export function ApmMainTemplate({
|
|||
});
|
||||
|
||||
useEffect(() => {
|
||||
return aiAssistant.service.setScreenContext({
|
||||
return aiAssistant?.service.setScreenContext({
|
||||
screenDescription: [
|
||||
hasApmData
|
||||
? 'The user has APM data.'
|
||||
|
|
|
@ -101,11 +101,11 @@ export function LatencyChart({ height, kuery }: Props) {
|
|||
const latencyMaxY = getMaxY(timeseries);
|
||||
const latencyFormatter = getDurationFormatter(latencyMaxY);
|
||||
|
||||
const { setScreenContext } =
|
||||
useApmPluginContext().observabilityAIAssistant.service;
|
||||
const setScreenContext =
|
||||
useApmPluginContext().observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
useEffect(() => {
|
||||
return setScreenContext(
|
||||
return setScreenContext?.(
|
||||
getLatencyChartScreenContext({
|
||||
serviceName,
|
||||
transactionName: transactionName ?? undefined,
|
||||
|
|
|
@ -153,7 +153,7 @@ export function TransactionsTable({
|
|||
]);
|
||||
|
||||
const { core, observabilityAIAssistant } = useApmPluginContext();
|
||||
const { setScreenContext } = observabilityAIAssistant.service;
|
||||
const setScreenContext = observabilityAIAssistant?.service.setScreenContext;
|
||||
|
||||
const isTableSearchBarEnabled = core.uiSettings.get<boolean>(
|
||||
apmEnableTableSearchBar,
|
||||
|
@ -179,7 +179,7 @@ export function TransactionsTable({
|
|||
]);
|
||||
|
||||
useEffect(() => {
|
||||
return setScreenContext({
|
||||
return setScreenContext?.({
|
||||
data: [
|
||||
{
|
||||
name: 'top_transactions',
|
||||
|
|
|
@ -33,7 +33,7 @@ export interface ApmPluginContextValue {
|
|||
data: DataPublicPluginStart;
|
||||
unifiedSearch: UnifiedSearchPublicPluginStart;
|
||||
uiActions: UiActionsStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
share: SharePluginSetup;
|
||||
kibanaEnvironment: KibanaEnvContext;
|
||||
}
|
||||
|
|
|
@ -137,7 +137,7 @@ export interface ApmPluginStartDeps {
|
|||
lens: LensPublicStart;
|
||||
uiActions: UiActionsStart;
|
||||
profiling?: ProfilingPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
dashboard: DashboardStart;
|
||||
metricsDataAccess: MetricsDataPluginStart;
|
||||
uiSettings: IUiSettingsClient;
|
||||
|
@ -436,7 +436,7 @@ export class ApmPlugin implements Plugin<ApmPluginSetup, ApmPluginStart> {
|
|||
public start(core: CoreStart, plugins: ApmPluginStartDeps) {
|
||||
const { fleet } = plugins;
|
||||
|
||||
plugins.observabilityAIAssistant.service.register(
|
||||
plugins.observabilityAIAssistant?.service.register(
|
||||
async ({ registerRenderFunction }) => {
|
||||
const mod = await import('./assistant_functions');
|
||||
|
||||
|
|
|
@ -233,7 +233,7 @@ export class APMPlugin
|
|||
this.logger?.error(e);
|
||||
});
|
||||
|
||||
plugins.observabilityAIAssistant.service.register(
|
||||
plugins.observabilityAIAssistant?.service.register(
|
||||
registerAssistantFunctions({
|
||||
config: this.currentConfig!,
|
||||
coreSetup: core,
|
||||
|
|
|
@ -86,7 +86,7 @@ export interface APMPluginSetupDependencies {
|
|||
metricsDataAccess: MetricsDataPluginSetup;
|
||||
dataViews: {};
|
||||
share: SharePluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantServerSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantServerSetup;
|
||||
// optional dependencies
|
||||
actions?: ActionsPlugin['setup'];
|
||||
alerting?: AlertingPlugin['setup'];
|
||||
|
@ -112,7 +112,7 @@ export interface APMPluginStartDependencies {
|
|||
metricsDataAccess: MetricsDataPluginSetup;
|
||||
dataViews: DataViewsServerPluginStart;
|
||||
share: undefined;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantServerStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantServerStart;
|
||||
// optional dependencies
|
||||
actions?: ActionsPlugin['start'];
|
||||
alerting?: AlertingPlugin['start'];
|
||||
|
|
|
@ -21,10 +21,9 @@
|
|||
"security",
|
||||
"share",
|
||||
"triggersActionsUi",
|
||||
"unifiedSearch",
|
||||
"observabilityAIAssistant"
|
||||
"unifiedSearch"
|
||||
],
|
||||
"optionalPlugins": ["discover", "embeddable", "home", "licensing", "spaces", "usageCollection"],
|
||||
"optionalPlugins": ["discover", "embeddable", "home", "licensing", "spaces", "usageCollection", "observabilityAIAssistant"],
|
||||
"requiredBundles": [
|
||||
"dataViews",
|
||||
"embeddable",
|
||||
|
|
|
@ -68,7 +68,7 @@ export interface ExploratoryViewPublicPluginsStart {
|
|||
usageCollection: UsageCollectionSetup;
|
||||
unifiedSearch: UnifiedSearchPublicPluginStart;
|
||||
home?: HomePublicPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
}
|
||||
|
||||
export type ExploratoryViewPublicSetup = ReturnType<Plugin['setup']>;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
"logsShared",
|
||||
"metricsDataAccess",
|
||||
"observability",
|
||||
"observabilityAIAssistant",
|
||||
"observabilityShared",
|
||||
"ruleRegistry",
|
||||
"security",
|
||||
|
@ -44,6 +43,7 @@
|
|||
"osquery",
|
||||
"cloud",
|
||||
"profilingDataAccess",
|
||||
"observabilityAIAssistant",
|
||||
"licenseManagement",
|
||||
"serverless"
|
||||
],
|
||||
|
|
|
@ -49,14 +49,7 @@ interface SignificantFieldValue {
|
|||
|
||||
export const LogRateAnalysis: FC<AlertDetailsLogRateAnalysisSectionProps> = ({ rule, alert }) => {
|
||||
const { services } = useKibanaContextForPlugin();
|
||||
const {
|
||||
dataViews,
|
||||
logsShared,
|
||||
observabilityAIAssistant: {
|
||||
ObservabilityAIAssistantContextualInsight,
|
||||
getContextualInsightMessages,
|
||||
},
|
||||
} = services;
|
||||
const { dataViews, logsShared, observabilityAIAssistant } = services;
|
||||
const [dataView, setDataView] = useState<DataView | undefined>();
|
||||
const [esSearchQuery, setEsSearchQuery] = useState<QueryDslQueryContainer | undefined>();
|
||||
const [logRateAnalysisParams, setLogRateAnalysisParams] = useState<
|
||||
|
@ -186,7 +179,7 @@ export const LogRateAnalysis: FC<AlertDetailsLogRateAnalysisSectionProps> = ({ r
|
|||
const hasLogRateAnalysisParams =
|
||||
logRateAnalysisParams && logRateAnalysisParams.significantFieldValues?.length > 0;
|
||||
|
||||
if (!hasLogRateAnalysisParams) {
|
||||
if (!hasLogRateAnalysisParams || !observabilityAIAssistant) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
@ -197,7 +190,7 @@ export const LogRateAnalysis: FC<AlertDetailsLogRateAnalysisSectionProps> = ({ r
|
|||
.map((item) => Object.values(item).join(','))
|
||||
.join('\n');
|
||||
|
||||
return getContextualInsightMessages({
|
||||
return observabilityAIAssistant.getContextualInsightMessages({
|
||||
message:
|
||||
'Can you identify possible causes and remediations for these log rate analysis results',
|
||||
instructions: `You are an observability expert using Elastic Observability Suite on call being consulted about a log threshold alert that got triggered by a ${logRateAnalysisType} in log messages. Your job is to take immediate action and proceed with both urgency and precision.
|
||||
|
@ -235,7 +228,7 @@ export const LogRateAnalysis: FC<AlertDetailsLogRateAnalysisSectionProps> = ({ r
|
|||
Do not repeat the full list of field names and field values back to the user.
|
||||
Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`,
|
||||
});
|
||||
}, [logRateAnalysisParams, getContextualInsightMessages]);
|
||||
}, [logRateAnalysisParams, observabilityAIAssistant]);
|
||||
|
||||
if (!dataView || !esSearchQuery) return null;
|
||||
|
||||
|
@ -283,9 +276,9 @@ export const LogRateAnalysis: FC<AlertDetailsLogRateAnalysisSectionProps> = ({ r
|
|||
</EuiFlexItem>
|
||||
</EuiFlexGroup>
|
||||
<EuiFlexGroup direction="column" gutterSize="m">
|
||||
{ObservabilityAIAssistantContextualInsight && messages ? (
|
||||
{observabilityAIAssistant?.ObservabilityAIAssistantContextualInsight && messages ? (
|
||||
<EuiFlexItem grow={false}>
|
||||
<ObservabilityAIAssistantContextualInsight
|
||||
<observabilityAIAssistant.ObservabilityAIAssistantContextualInsight
|
||||
title={logRateAnalysisTitle}
|
||||
messages={messages}
|
||||
/>
|
||||
|
|
|
@ -9,7 +9,6 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public';
|
|||
import React from 'react';
|
||||
import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common';
|
||||
import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
|
||||
import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public';
|
||||
import { Storage } from '@kbn/kibana-utils-plugin/public';
|
||||
import { NavigationWarningPromptProvider } from '@kbn/observability-shared-plugin/public';
|
||||
import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public';
|
||||
|
@ -28,18 +27,9 @@ export const CommonInfraProviders: React.FC<{
|
|||
appName: string;
|
||||
storage: Storage;
|
||||
triggersActionsUI: TriggersAndActionsUIPublicPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
setHeaderActionMenu: AppMountParameters['setHeaderActionMenu'];
|
||||
theme$: AppMountParameters['theme$'];
|
||||
}> = ({
|
||||
children,
|
||||
triggersActionsUI,
|
||||
observabilityAIAssistant: { service: observabilityAIAssistantService },
|
||||
setHeaderActionMenu,
|
||||
appName,
|
||||
storage,
|
||||
theme$,
|
||||
}) => {
|
||||
}> = ({ children, triggersActionsUI, setHeaderActionMenu, appName, storage, theme$ }) => {
|
||||
const darkMode = useIsDarkMode();
|
||||
|
||||
return (
|
||||
|
|
|
@ -66,7 +66,6 @@ const LogsApp: React.FC<{
|
|||
storage={storage}
|
||||
theme$={theme$}
|
||||
triggersActionsUI={plugins.triggersActionsUi}
|
||||
observabilityAIAssistant={plugins.observabilityAIAssistant}
|
||||
>
|
||||
<Router history={history}>
|
||||
<KbnUrlStateStorageFromRouterProvider
|
||||
|
|
|
@ -95,7 +95,6 @@ const MetricsApp: React.FC<{
|
|||
storage={storage}
|
||||
theme$={theme$}
|
||||
triggersActionsUI={plugins.triggersActionsUi}
|
||||
observabilityAIAssistant={plugins.observabilityAIAssistant}
|
||||
>
|
||||
<SourceProvider sourceId="default">
|
||||
<PluginConfigProvider value={pluginConfig}>
|
||||
|
|
|
@ -34,19 +34,14 @@ interface Props {
|
|||
supportAIAssistant?: boolean;
|
||||
}
|
||||
export const ContextualInsightProcessRow = ({ command }: { command: string }) => {
|
||||
const {
|
||||
observabilityAIAssistant: {
|
||||
ObservabilityAIAssistantContextualInsight,
|
||||
getContextualInsightMessages,
|
||||
},
|
||||
} = useKibanaContextForPlugin().services;
|
||||
const { observabilityAIAssistant } = useKibanaContextForPlugin().services;
|
||||
|
||||
const explainProcessMessages = useMemo<Message[] | undefined>(() => {
|
||||
if (!command) {
|
||||
if (!command || !observabilityAIAssistant) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return getContextualInsightMessages({
|
||||
return observabilityAIAssistant.getContextualInsightMessages({
|
||||
message: `I am a software engineer. I am trying to understand what this process running on my
|
||||
machine does.`,
|
||||
instructions: `Your task is to first describe what the process is and what its general use cases are. If I also provide you
|
||||
|
@ -88,14 +83,15 @@ export const ContextualInsightProcessRow = ({ command }: { command: string }) =>
|
|||
Process: ${command}
|
||||
Explanation:`,
|
||||
});
|
||||
}, [command, getContextualInsightMessages]);
|
||||
}, [command, observabilityAIAssistant]);
|
||||
return (
|
||||
<>
|
||||
{ObservabilityAIAssistantContextualInsight && explainProcessMessages ? (
|
||||
{observabilityAIAssistant?.ObservabilityAIAssistantContextualInsight &&
|
||||
explainProcessMessages ? (
|
||||
<EuiFlexGroup>
|
||||
<EuiFlexItem>
|
||||
<EuiFlexItem grow={false}>
|
||||
<ObservabilityAIAssistantContextualInsight
|
||||
<observabilityAIAssistant.ObservabilityAIAssistantContextualInsight
|
||||
title={explainProcessMessageTitle}
|
||||
messages={explainProcessMessages}
|
||||
/>
|
||||
|
|
|
@ -96,7 +96,7 @@ export interface InfraClientStartDeps {
|
|||
ml: MlPluginStart;
|
||||
observability: ObservabilityPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
osquery?: unknown; // OsqueryPluginStart - can't be imported due to cyclic dependency;
|
||||
share: SharePluginStart;
|
||||
spaces: SpacesPluginStart;
|
||||
|
|
|
@ -13,9 +13,11 @@
|
|||
"dataViews",
|
||||
"usageCollection",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"share"
|
||||
],
|
||||
"optionalPlugins": [
|
||||
"observabilityAIAssistant",
|
||||
],
|
||||
"requiredBundles": ["kibanaUtils", "kibanaReact"],
|
||||
"extraPublicDirs": ["common"]
|
||||
}
|
||||
|
|
|
@ -181,9 +181,14 @@ export const LogEntryFlyout = ({
|
|||
}
|
||||
>
|
||||
<EuiFlexGroup direction="column" gutterSize="m">
|
||||
<EuiFlexItem grow={false}>
|
||||
<LogAIAssistant observabilityAIAssistant={observabilityAIAssistant} doc={logEntry} />
|
||||
</EuiFlexItem>
|
||||
{observabilityAIAssistant && (
|
||||
<EuiFlexItem grow={false}>
|
||||
<LogAIAssistant
|
||||
observabilityAIAssistant={observabilityAIAssistant}
|
||||
doc={logEntry}
|
||||
/>
|
||||
</EuiFlexItem>
|
||||
)}
|
||||
<EuiFlexItem grow={false}>
|
||||
<LogEntryFieldsTable logEntry={logEntry} onSetFieldFilter={onSetFieldFilter} />
|
||||
</EuiFlexItem>
|
||||
|
|
|
@ -60,6 +60,12 @@ export class LogsSharedPlugin implements LogsSharedClientPluginClass {
|
|||
search: data.search,
|
||||
});
|
||||
|
||||
if (!observabilityAIAssistant) {
|
||||
return {
|
||||
logViews,
|
||||
};
|
||||
}
|
||||
|
||||
const LogAIAssistant = createLogAIAssistant({ observabilityAIAssistant });
|
||||
|
||||
return {
|
||||
|
|
|
@ -25,7 +25,7 @@ export interface LogsSharedClientSetupExports {
|
|||
|
||||
export interface LogsSharedClientStartExports {
|
||||
logViews: LogViewsServiceStart;
|
||||
LogAIAssistant: (props: Omit<LogAIAssistantProps, 'observabilityAIAssistant'>) => JSX.Element;
|
||||
LogAIAssistant?: (props: Omit<LogAIAssistantProps, 'observabilityAIAssistant'>) => JSX.Element;
|
||||
}
|
||||
|
||||
export interface LogsSharedClientSetupDeps {
|
||||
|
@ -35,7 +35,7 @@ export interface LogsSharedClientSetupDeps {
|
|||
export interface LogsSharedClientStartDeps {
|
||||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
uiActions: UiActionsStart;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
"inspector",
|
||||
"lens",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"ruleRegistry",
|
||||
"triggersActionsUi",
|
||||
"security",
|
||||
|
@ -48,7 +47,8 @@
|
|||
"cloud",
|
||||
"spaces",
|
||||
"serverless",
|
||||
"guidedOnboarding"
|
||||
"guidedOnboarding",
|
||||
"observabilityAIAssistant",
|
||||
],
|
||||
"requiredBundles": [
|
||||
"data",
|
||||
|
|
|
@ -66,9 +66,7 @@ export function AlertDetails() {
|
|||
},
|
||||
http,
|
||||
triggersActionsUi: { ruleTypeRegistry },
|
||||
observabilityAIAssistant: {
|
||||
service: { setScreenContext },
|
||||
},
|
||||
observabilityAIAssistant,
|
||||
uiSettings,
|
||||
} = useKibana().services;
|
||||
|
||||
|
@ -86,7 +84,7 @@ export function AlertDetails() {
|
|||
const { euiTheme } = useEuiTheme();
|
||||
|
||||
useEffect(() => {
|
||||
if (!alertDetail) {
|
||||
if (!alertDetail || !observabilityAIAssistant) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -106,7 +104,7 @@ export function AlertDetails() {
|
|||
}
|
||||
`);
|
||||
|
||||
return setScreenContext({
|
||||
return observabilityAIAssistant.service.setScreenContext({
|
||||
screenDescription,
|
||||
data: [
|
||||
{
|
||||
|
@ -116,7 +114,7 @@ export function AlertDetails() {
|
|||
},
|
||||
],
|
||||
});
|
||||
}, [setScreenContext, alertDetail]);
|
||||
}, [observabilityAIAssistant, alertDetail]);
|
||||
|
||||
useEffect(() => {
|
||||
if (alertDetail) {
|
||||
|
|
|
@ -116,7 +116,7 @@ export interface ObservabilityPublicPluginsSetup {
|
|||
data: DataPublicPluginSetup;
|
||||
fieldFormats: FieldFormatsSetup;
|
||||
observabilityShared: ObservabilitySharedPluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
share: SharePluginSetup;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
|
||||
home?: HomePublicPluginSetup;
|
||||
|
@ -143,7 +143,7 @@ export interface ObservabilityPublicPluginsStart {
|
|||
lens: LensPublicStart;
|
||||
licensing: LicensingPluginStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
ruleTypeRegistry: RuleTypeRegistryContract;
|
||||
security: SecurityPluginStart;
|
||||
share: SharePluginStart;
|
||||
|
@ -357,7 +357,7 @@ export class Plugin
|
|||
: [];
|
||||
|
||||
const isAiAssistantEnabled =
|
||||
pluginsStart.observabilityAIAssistant.service.isEnabled();
|
||||
pluginsStart.observabilityAIAssistant?.service.isEnabled();
|
||||
|
||||
const aiAssistantLink =
|
||||
isAiAssistantEnabled &&
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
"discover",
|
||||
"logsExplorer",
|
||||
"logsShared",
|
||||
"observabilityAIAssistant",
|
||||
"observabilityShared",
|
||||
"slo",
|
||||
"share",
|
||||
|
@ -29,7 +28,8 @@
|
|||
"unifiedSearch",
|
||||
"dataViews",
|
||||
"dataViewEditor",
|
||||
"lens"
|
||||
"lens",
|
||||
"observabilityAIAssistant"
|
||||
],
|
||||
"requiredBundles": [
|
||||
"kibanaReact",
|
||||
|
@ -39,4 +39,4 @@
|
|||
"common",
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,17 +9,22 @@ import {
|
|||
LogsExplorerCustomizations,
|
||||
LogsExplorerFlyoutContentProps,
|
||||
} from '@kbn/logs-explorer-plugin/public';
|
||||
import type { LogAIAssistantDocument } from '@kbn/logs-shared-plugin/public';
|
||||
import type {
|
||||
LogAIAssistantDocument,
|
||||
LogsSharedClientStartExports,
|
||||
} from '@kbn/logs-shared-plugin/public';
|
||||
import React, { useMemo } from 'react';
|
||||
import { useKibanaContextForPlugin } from '../utils/use_kibana';
|
||||
|
||||
type RenderFlyoutContentCustomization =
|
||||
Required<LogsExplorerCustomizations>['flyout']['renderContent'];
|
||||
|
||||
const ObservabilityLogAIAssistant = ({ doc }: LogsExplorerFlyoutContentProps) => {
|
||||
const { services } = useKibanaContextForPlugin();
|
||||
const { LogAIAssistant } = services.logsShared;
|
||||
|
||||
const ObservabilityLogAIAssistant = ({
|
||||
doc,
|
||||
LogAIAssistant,
|
||||
}: LogsExplorerFlyoutContentProps & {
|
||||
LogAIAssistant: Required<LogsSharedClientStartExports>['LogAIAssistant'];
|
||||
}) => {
|
||||
const mappedDoc = useMemo(() => mapDocToAIAssistantFormat(doc), [doc]);
|
||||
|
||||
return <LogAIAssistant key={doc.id} doc={mappedDoc} />;
|
||||
|
@ -27,12 +32,17 @@ const ObservabilityLogAIAssistant = ({ doc }: LogsExplorerFlyoutContentProps) =>
|
|||
|
||||
export const renderFlyoutContent: RenderFlyoutContentCustomization =
|
||||
(renderPreviousContent) => (props) => {
|
||||
const { services } = useKibanaContextForPlugin();
|
||||
const { LogAIAssistant } = services.logsShared;
|
||||
|
||||
return (
|
||||
<>
|
||||
{renderPreviousContent(props)}
|
||||
<EuiFlexItem>
|
||||
<ObservabilityLogAIAssistant {...props} />
|
||||
</EuiFlexItem>
|
||||
{LogAIAssistant ? (
|
||||
<EuiFlexItem>
|
||||
<ObservabilityLogAIAssistant {...props} LogAIAssistant={LogAIAssistant} />
|
||||
</EuiFlexItem>
|
||||
) : null}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -44,7 +44,7 @@ export interface ObservabilityLogsExplorerStartDeps {
|
|||
discover: DiscoverStart;
|
||||
logsExplorer: LogsExplorerPluginStart;
|
||||
logsShared: LogsSharedClientStartExports;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
slo: SloPublicStart;
|
||||
serverless?: ServerlessPluginStart;
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
"usageCollection",
|
||||
"security",
|
||||
"cloud",
|
||||
"fleet"
|
||||
"fleet",
|
||||
"observabilityAIAssistant"
|
||||
],
|
||||
"requiredPlugins": [
|
||||
"charts",
|
||||
|
@ -22,7 +23,6 @@
|
|||
"licensing",
|
||||
"observability",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"unifiedSearch",
|
||||
"share",
|
||||
"embeddable",
|
||||
|
|
|
@ -16,19 +16,14 @@ interface Props {
|
|||
}
|
||||
|
||||
export function FrameInformationAIAssistant({ frame }: Props) {
|
||||
const {
|
||||
observabilityAIAssistant: {
|
||||
ObservabilityAIAssistantContextualInsight,
|
||||
getContextualInsightMessages,
|
||||
},
|
||||
} = useProfilingDependencies().start;
|
||||
const { observabilityAIAssistant } = useProfilingDependencies().start;
|
||||
|
||||
const promptMessages = useMemo<Message[] | undefined>(() => {
|
||||
if (frame?.functionName && frame.exeFileName) {
|
||||
if (observabilityAIAssistant && frame?.functionName && frame.exeFileName) {
|
||||
const functionName = frame.functionName;
|
||||
const library = frame.exeFileName;
|
||||
|
||||
return getContextualInsightMessages({
|
||||
return observabilityAIAssistant.getContextualInsightMessages({
|
||||
message: `I am trying to understand what this function does. Can you help me?`,
|
||||
instructions: `The library is: ${library}
|
||||
The function is: ${functionName}
|
||||
|
@ -78,12 +73,12 @@ export function FrameInformationAIAssistant({ frame }: Props) {
|
|||
}
|
||||
|
||||
return undefined;
|
||||
}, [frame?.functionName, frame?.exeFileName, getContextualInsightMessages]);
|
||||
}, [frame?.functionName, frame?.exeFileName, observabilityAIAssistant]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{ObservabilityAIAssistantContextualInsight && promptMessages ? (
|
||||
<ObservabilityAIAssistantContextualInsight
|
||||
{observabilityAIAssistant?.ObservabilityAIAssistantContextualInsight && promptMessages ? (
|
||||
<observabilityAIAssistant.ObservabilityAIAssistantContextualInsight
|
||||
messages={promptMessages}
|
||||
title={i18n.translate('xpack.profiling.frameInformationWindow.optimizeFunction', {
|
||||
defaultMessage: 'Optimize function',
|
||||
|
|
|
@ -33,7 +33,7 @@ import type {
|
|||
export interface ProfilingPluginPublicSetupDeps {
|
||||
observability: ObservabilityPublicSetup;
|
||||
observabilityShared: ObservabilitySharedPluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
dataViews: DataViewsPublicPluginSetup;
|
||||
data: DataPublicPluginSetup;
|
||||
charts: ChartsPluginSetup;
|
||||
|
@ -46,7 +46,7 @@ export interface ProfilingPluginPublicSetupDeps {
|
|||
export interface ProfilingPluginPublicStartDeps {
|
||||
observability: ObservabilityPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
data: DataPublicPluginStart;
|
||||
charts: ChartsPluginStart;
|
||||
|
|
|
@ -34,14 +34,14 @@
|
|||
"presentationUtil",
|
||||
"features",
|
||||
"licensing",
|
||||
"observabilityAIAssistant",
|
||||
"usageCollection",
|
||||
],
|
||||
"optionalPlugins": [
|
||||
"cloud",
|
||||
"spaces",
|
||||
"serverless",
|
||||
"discover"
|
||||
"discover",
|
||||
"observabilityAIAssistant"
|
||||
],
|
||||
"requiredBundles": [
|
||||
"kibanaReact",
|
||||
|
|
|
@ -42,9 +42,7 @@ export function SloDetailsPage() {
|
|||
const {
|
||||
application: { navigateToUrl },
|
||||
http: { basePath },
|
||||
observabilityAIAssistant: {
|
||||
service: { setScreenContext },
|
||||
},
|
||||
observabilityAIAssistant,
|
||||
} = useKibana().services;
|
||||
const { ObservabilityPageTemplate } = usePluginContext();
|
||||
const { search } = useLocation();
|
||||
|
@ -80,11 +78,11 @@ export function SloDetailsPage() {
|
|||
useBreadcrumbs(getBreadcrumbs(basePath, slo));
|
||||
|
||||
useEffect(() => {
|
||||
if (!slo) {
|
||||
if (!slo || !observabilityAIAssistant) {
|
||||
return;
|
||||
}
|
||||
|
||||
return setScreenContext({
|
||||
return observabilityAIAssistant.service.setScreenContext({
|
||||
screenDescription: dedent(`
|
||||
The user is looking at the detail page for the following SLO
|
||||
|
||||
|
@ -103,7 +101,7 @@ export function SloDetailsPage() {
|
|||
},
|
||||
],
|
||||
});
|
||||
}, [setScreenContext, slo]);
|
||||
}, [observabilityAIAssistant, slo]);
|
||||
|
||||
const isSloNotFound = !isLoading && slo === undefined;
|
||||
if (isSloNotFound) {
|
||||
|
|
|
@ -38,17 +38,13 @@ export function SloList() {
|
|||
lastRefresh: state.lastRefresh,
|
||||
});
|
||||
|
||||
const {
|
||||
observabilityAIAssistant: {
|
||||
service: { setScreenContext },
|
||||
},
|
||||
} = useKibana().services;
|
||||
const { observabilityAIAssistant } = useKibana().services;
|
||||
const { results = [], total = 0 } = sloList ?? {};
|
||||
|
||||
const isDeletingSlo = Boolean(useIsMutating(['deleteSlo']));
|
||||
|
||||
useEffect(() => {
|
||||
if (!sloList) {
|
||||
if (!sloList || !observabilityAIAssistant) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -57,7 +53,7 @@ export function SloList() {
|
|||
(groupResults) => groupResults.map((result) => `- ${result.name}`).join('\n')
|
||||
) as Record<typeof results[number]['summary']['status'], string>;
|
||||
|
||||
return setScreenContext({
|
||||
return observabilityAIAssistant.service.setScreenContext({
|
||||
screenDescription: dedent(`The user is looking at a list of SLOs.
|
||||
|
||||
${
|
||||
|
@ -81,7 +77,7 @@ export function SloList() {
|
|||
}
|
||||
`),
|
||||
});
|
||||
}, [sloList, setScreenContext]);
|
||||
}, [sloList, observabilityAIAssistant]);
|
||||
|
||||
return (
|
||||
<EuiFlexGroup direction="column" gutterSize="m" data-test-subj="sloList">
|
||||
|
|
|
@ -66,7 +66,7 @@ export interface SloPublicPluginsSetup {
|
|||
uiActions: UiActionsSetup;
|
||||
serverless?: ServerlessPluginSetup;
|
||||
presentationUtil?: PresentationUtilPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
usageCollection: UsageCollectionSetup;
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ export interface SloPublicPluginsStart {
|
|||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
ruleTypeRegistry: RuleTypeRegistryContract;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
lens: LensPublicStart;
|
||||
charts: ChartsPluginStart;
|
||||
unifiedSearch: UnifiedSearchPublicPluginStart;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
"licensing",
|
||||
"observability",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"ruleRegistry",
|
||||
"security",
|
||||
"share",
|
||||
|
@ -43,7 +42,8 @@
|
|||
"serverless",
|
||||
"spaces",
|
||||
"telemetry",
|
||||
"licenseManagement"
|
||||
"licenseManagement",
|
||||
"observabilityAIAssistant"
|
||||
],
|
||||
"requiredBundles": [
|
||||
"data",
|
||||
|
|
|
@ -68,7 +68,7 @@ export interface ClientPluginsSetup {
|
|||
exploratoryView: ExploratoryViewPublicSetup;
|
||||
observability: ObservabilityPublicSetup;
|
||||
observabilityShared: ObservabilitySharedPluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
share: SharePluginSetup;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
|
||||
cloud?: CloudSetup;
|
||||
|
@ -85,7 +85,7 @@ export interface ClientPluginsStart {
|
|||
exploratoryView: ExploratoryViewPublicStart;
|
||||
observability: ObservabilityPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
share: SharePluginStart;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
|
||||
cases: CasesPublicStart;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
"licensing",
|
||||
"observability",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"ruleRegistry",
|
||||
"security",
|
||||
"share",
|
||||
|
@ -34,7 +33,7 @@
|
|||
"unifiedSearch",
|
||||
"bfetch"
|
||||
],
|
||||
"optionalPlugins": ["cloud", "data", "fleet", "home", "ml", "spaces", "telemetry"],
|
||||
"optionalPlugins": ["cloud", "data", "fleet", "home", "ml", "spaces", "telemetry", "observabilityAIAssistant"],
|
||||
"requiredBundles": [
|
||||
"fleet",
|
||||
"kibanaReact",
|
||||
|
|
|
@ -74,7 +74,7 @@ export interface ClientPluginsSetup {
|
|||
exploratoryView: ExploratoryViewPublicSetup;
|
||||
observability: ObservabilityPublicSetup;
|
||||
observabilityShared: ObservabilitySharedPluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
share: SharePluginSetup;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginSetup;
|
||||
cloud?: CloudSetup;
|
||||
|
@ -90,7 +90,7 @@ export interface ClientPluginsStart {
|
|||
exploratoryView: ExploratoryViewPublicStart;
|
||||
observability: ObservabilityPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
share: SharePluginStart;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
|
||||
cases: CasesPublicStart;
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
"licensing",
|
||||
"triggersActionsUi",
|
||||
"observabilityShared",
|
||||
"observabilityAIAssistant",
|
||||
"embeddable",
|
||||
"inspector",
|
||||
"apm"
|
||||
|
@ -30,6 +29,7 @@
|
|||
"security",
|
||||
"maps",
|
||||
"lens",
|
||||
"observabilityAIAssistant",
|
||||
"spaces"
|
||||
],
|
||||
"requiredBundles": [
|
||||
|
|
|
@ -60,7 +60,7 @@ export interface ApmPluginSetupDeps {
|
|||
licensing: LicensingPluginSetup;
|
||||
observability: ObservabilityPublicSetup;
|
||||
observabilityShared: ObservabilitySharedPluginSetup;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicSetup;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup;
|
||||
}
|
||||
|
||||
export interface ApmPluginStartDeps {
|
||||
|
@ -72,7 +72,7 @@ export interface ApmPluginStartDeps {
|
|||
inspector: InspectorPluginStart;
|
||||
observability: ObservabilityPublicStart;
|
||||
observabilityShared: ObservabilitySharedPluginStart;
|
||||
observabilityAIAssistant: ObservabilityAIAssistantPublicStart;
|
||||
observabilityAIAssistant?: ObservabilityAIAssistantPublicStart;
|
||||
exploratoryView: ExploratoryViewPublicStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
lens: LensPublicStart;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue