Skip to content

Commit c3dea63

Browse files
[9.0] [Obs AI Assistant] Implement default LLM connector from settings (elastic#236103) (elastic#236904)
# Backport This will backport the following commits from `main` to `9.0`: - [[Obs AI Assistant] Implement default LLM connector from settings (elastic#236103)](elastic#236103) <!--- Backport version: 10.0.2 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Arturo Lidueña","email":"[email protected]"},"sourceCommit":{"committedDate":"2025-09-29T11:52:03Z","message":"[Obs AI Assistant] Implement default LLM connector from settings (elastic#236103)\n\nCloses https://github.com/elastic/obs-ai-assistant-team/issues/255\n## Summary\n\nImplement logic for new \"default llm connector\" settings\n\n\n### Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- [x] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)\n- [ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- [ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)\n- [ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.\n- [ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [ ] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n### Identify risks\n\nDoes this PR introduce any risks? For example, consider risks like hard\nto test bugs, performance regression, potential of data loss.\n\nDescribe the risk, its severity, and mitigation for each identified\nrisk. Invite stakeholders and evaluate how to proceed before merging.\n\n- [ ] [See some risk\nexamples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)\n- [ ] ...\n\n---------\n\nCo-authored-by: kibanamachine <[email protected]>","sha":"6aa21e91eec0306c8e1455de2a268ab5ba02a0cc","branchLabelMapping":{"^v9.2.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:enhancement","v9.0.0","Team:Obs AI Assistant","ci:project-deploy-observability","backport:version","v8.18.0","v9.1.0","v8.19.0","v9.2.0"],"title":"[Obs AI Assistant] Implement default LLM connector from settings","number":236103,"url":"https://github.com/elastic/kibana/pull/236103","mergeCommit":{"message":"[Obs AI Assistant] Implement default LLM connector from settings (elastic#236103)\n\nCloses https://github.com/elastic/obs-ai-assistant-team/issues/255\n## Summary\n\nImplement logic for new \"default llm connector\" settings\n\n\n### Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- [x] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)\n- [ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- [ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)\n- [ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.\n- [ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [ ] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n### Identify risks\n\nDoes this PR introduce any risks? For example, consider risks like hard\nto test bugs, performance regression, potential of data loss.\n\nDescribe the risk, its severity, and mitigation for each identified\nrisk. Invite stakeholders and evaluate how to proceed before merging.\n\n- [ ] [See some risk\nexamples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)\n- [ ] ...\n\n---------\n\nCo-authored-by: kibanamachine <[email protected]>","sha":"6aa21e91eec0306c8e1455de2a268ab5ba02a0cc"}},"sourceBranch":"main","suggestedTargetBranches":["9.0"],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.18","label":"v8.18.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/236760","number":236760,"state":"OPEN"},{"branch":"9.1","label":"v9.1.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/236752","number":236752,"state":"OPEN"},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/236753","number":236753,"state":"OPEN"},{"branch":"main","label":"v9.2.0","branchLabelMappingKey":"^v9.2.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/236103","number":236103,"mergeCommit":{"message":"[Obs AI Assistant] Implement default LLM connector from settings (elastic#236103)\n\nCloses https://github.com/elastic/obs-ai-assistant-team/issues/255\n## Summary\n\nImplement logic for new \"default llm connector\" settings\n\n\n### Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- [x] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)\n- [ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- [ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)\n- [ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.\n- [ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [ ] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n### Identify risks\n\nDoes this PR introduce any risks? For example, consider risks like hard\nto test bugs, performance regression, potential of data loss.\n\nDescribe the risk, its severity, and mitigation for each identified\nrisk. Invite stakeholders and evaluate how to proceed before merging.\n\n- [ ] [See some risk\nexamples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)\n- [ ] ...\n\n---------\n\nCo-authored-by: kibanamachine <[email protected]>","sha":"6aa21e91eec0306c8e1455de2a268ab5ba02a0cc"}}]}] BACKPORT--> --------- Co-authored-by: kibanamachine <[email protected]>
1 parent ee56099 commit c3dea63

File tree

17 files changed

+414
-130
lines changed

17 files changed

+414
-130
lines changed

x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_actions_menu.tsx

Lines changed: 162 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,43 @@
55
* 2.0.
66
*/
77

8-
import React, { useState } from 'react';
8+
import React, { useMemo, useState } from 'react';
99
import { i18n } from '@kbn/i18n';
10+
import { EuiButtonIcon, EuiContextMenu, EuiPopover, EuiToolTip } from '@elastic/eui';
11+
import { navigateToSettingsManagementApp } from '@kbn/observability-ai-assistant-plugin/public';
1012
import {
11-
EuiButtonEmpty,
12-
EuiButtonIcon,
13-
EuiContextMenu,
14-
EuiPanel,
15-
EuiPopover,
16-
EuiToolTip,
17-
} from '@elastic/eui';
18-
import {
19-
ConnectorSelectorBase,
20-
navigateToConnectorsManagementApp,
21-
navigateToSettingsManagementApp,
22-
} from '@kbn/observability-ai-assistant-plugin/public';
13+
ConnectorSelectable,
14+
type ConnectorSelectableComponentProps,
15+
} from '@kbn/ai-assistant-connector-selector-action';
16+
import type { ApplicationStart } from '@kbn/core/public';
17+
import type { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public';
18+
import { isSupportedConnectorType } from '@kbn/inference-common';
19+
import { GenerativeAIForObservabilityConnectorFeatureId } from '@kbn/actions-plugin/common';
2320
import type { UseGenAIConnectorsResult } from '../hooks/use_genai_connectors';
2421
import { useKibana } from '../hooks/use_kibana';
2522
import { useKnowledgeBase } from '../hooks';
2623

24+
type ConnectorLists = [
25+
preConfigured: ConnectorSelectableComponentProps['preConfiguredConnectors'],
26+
custom: ConnectorSelectableComponentProps['customConnectors']
27+
];
2728
export function ChatActionsMenu({
2829
connectors,
2930
conversationId,
3031
disabled,
3132
onCopyConversationClick,
33+
navigateToConnectorsManagementApp,
3234
}: {
3335
connectors: UseGenAIConnectorsResult;
3436
conversationId?: string;
3537
disabled: boolean;
3638
onCopyConversationClick: () => void;
39+
navigateToConnectorsManagementApp: (application: ApplicationStart) => void;
3740
}) {
38-
const { application, http } = useKibana().services;
41+
const { application, http, triggersActionsUi } = useKibana().services;
3942
const knowledgeBase = useKnowledgeBase();
4043
const [isOpen, setIsOpen] = useState(false);
44+
const [connectorFlyoutOpen, setConnectorFlyoutOpen] = useState(false);
4145

4246
const toggleActionsMenu = () => {
4347
setIsOpen(!isOpen);
@@ -51,118 +55,157 @@ export function ChatActionsMenu({
5155
);
5256
};
5357

58+
const [preConfiguredConnectors, customConnectors] = useMemo<ConnectorLists>(() => {
59+
if (!connectors.connectors) return [[], []];
60+
61+
return connectors.connectors.reduce<ConnectorLists>(
62+
([pre, custom], { id, name, isPreconfigured }) => {
63+
const item = { value: id, label: name };
64+
return isPreconfigured ? [[...pre, item], custom] : [pre, [...custom, item]];
65+
},
66+
[[], []]
67+
);
68+
}, [connectors.connectors]);
69+
70+
const ConnectorFlyout = useMemo(
71+
() => triggersActionsUi.getAddConnectorFlyout,
72+
[triggersActionsUi]
73+
);
74+
75+
const onConnectorCreated = (createdConnector: ActionConnector) => {
76+
setConnectorFlyoutOpen(false);
77+
78+
if (isSupportedConnectorType(createdConnector.actionTypeId)) {
79+
connectors.reloadConnectors();
80+
}
81+
};
82+
5483
return (
55-
<EuiPopover
56-
isOpen={isOpen}
57-
button={
58-
<EuiToolTip
59-
content={i18n.translate('xpack.aiAssistant.chatActionsMenu.euiToolTip.moreActionsLabel', {
60-
defaultMessage: 'More actions',
61-
})}
62-
display="block"
63-
>
64-
<EuiButtonIcon
65-
data-test-subj="observabilityAiAssistantChatActionsMenuButtonIcon"
66-
disabled={disabled}
67-
iconType="boxesVertical"
68-
onClick={toggleActionsMenu}
69-
aria-label={i18n.translate(
70-
'xpack.aiAssistant.chatActionsMenu.euiButtonIcon.menuLabel',
71-
{ defaultMessage: 'Menu' }
84+
<>
85+
<EuiPopover
86+
isOpen={isOpen}
87+
button={
88+
<EuiToolTip
89+
content={i18n.translate(
90+
'xpack.aiAssistant.chatActionsMenu.euiToolTip.moreActionsLabel',
91+
{
92+
defaultMessage: 'More actions',
93+
}
7294
)}
73-
/>
74-
</EuiToolTip>
75-
}
76-
panelPaddingSize="none"
77-
closePopover={toggleActionsMenu}
78-
>
79-
<EuiContextMenu
80-
initialPanelId={0}
81-
panels={[
82-
{
83-
id: 0,
84-
title: i18n.translate('xpack.aiAssistant.chatHeader.actions.title', {
85-
defaultMessage: 'Actions',
86-
}),
87-
items: [
88-
...(knowledgeBase?.status.value?.enabled
89-
? [
90-
{
91-
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.knowledgeBase', {
92-
defaultMessage: 'Manage knowledge base',
93-
}),
94-
onClick: () => {
95-
toggleActionsMenu();
96-
handleNavigateToSettingsKnowledgeBase();
95+
display="block"
96+
>
97+
<EuiButtonIcon
98+
data-test-subj="observabilityAiAssistantChatActionsMenuButtonIcon"
99+
disabled={disabled}
100+
iconType="boxesVertical"
101+
onClick={toggleActionsMenu}
102+
aria-label={i18n.translate(
103+
'xpack.aiAssistant.chatActionsMenu.euiButtonIcon.menuLabel',
104+
{ defaultMessage: 'Menu' }
105+
)}
106+
/>
107+
</EuiToolTip>
108+
}
109+
panelPaddingSize="none"
110+
closePopover={toggleActionsMenu}
111+
>
112+
<EuiContextMenu
113+
initialPanelId={0}
114+
panels={[
115+
{
116+
id: 0,
117+
title: i18n.translate('xpack.aiAssistant.chatHeader.actions.title', {
118+
defaultMessage: 'Actions',
119+
}),
120+
items: [
121+
...(knowledgeBase?.status.value?.enabled
122+
? [
123+
{
124+
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.knowledgeBase', {
125+
defaultMessage: 'Manage knowledge base',
126+
}),
127+
onClick: () => {
128+
toggleActionsMenu();
129+
handleNavigateToSettingsKnowledgeBase();
130+
},
97131
},
98-
},
99-
]
100-
: []),
101-
{
102-
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.settings', {
103-
defaultMessage: 'AI Assistant Settings',
104-
}),
105-
onClick: () => {
106-
toggleActionsMenu();
107-
navigateToSettingsManagementApp(application!);
132+
]
133+
: []),
134+
{
135+
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.settings', {
136+
defaultMessage: 'AI Assistant Settings',
137+
}),
138+
onClick: () => {
139+
toggleActionsMenu();
140+
navigateToSettingsManagementApp(application!);
141+
},
108142
},
109-
},
110-
{
111-
name: (
112-
<div className="eui-textTruncate">
113-
{i18n.translate('xpack.aiAssistant.chatHeader.actions.connector', {
114-
defaultMessage: 'Connector',
115-
})}{' '}
116-
<strong>
117-
{
118-
connectors.connectors?.find(({ id }) => id === connectors.selectedConnector)
119-
?.name
120-
}
121-
</strong>
122-
</div>
123-
),
124-
panel: 1,
125-
},
126-
{
127-
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.copyConversation', {
128-
defaultMessage: 'Copy conversation',
129-
}),
130-
disabled: !conversationId,
131-
onClick: () => {
132-
toggleActionsMenu();
133-
onCopyConversationClick();
143+
{
144+
name: (
145+
<div className="eui-textTruncate">
146+
{i18n.translate('xpack.aiAssistant.chatHeader.actions.connector', {
147+
defaultMessage: 'Connector',
148+
})}{' '}
149+
<strong>
150+
{
151+
connectors.connectors?.find(
152+
({ id }) => id === connectors.selectedConnector
153+
)?.name
154+
}
155+
</strong>
156+
</div>
157+
),
158+
panel: !connectors.isConnectorSelectionRestricted ? 1 : undefined,
134159
},
135-
},
136-
],
137-
},
138-
{
139-
id: 1,
140-
width: 256,
141-
title: i18n.translate('xpack.aiAssistant.chatHeader.actions.connector', {
142-
defaultMessage: 'Connector',
143-
}),
144-
content: (
145-
<EuiPanel>
146-
<ConnectorSelectorBase {...connectors} />
147-
148-
<EuiButtonEmpty
149-
flush="left"
150-
size="xs"
151-
data-test-subj="settingsTabGoToConnectorsButton"
152-
onClick={() => {
160+
{
161+
name: i18n.translate('xpack.aiAssistant.chatHeader.actions.copyConversation', {
162+
defaultMessage: 'Copy conversation',
163+
}),
164+
disabled: !conversationId,
165+
onClick: () => {
166+
toggleActionsMenu();
167+
onCopyConversationClick();
168+
},
169+
},
170+
],
171+
},
172+
{
173+
id: 1,
174+
width: 256,
175+
title: i18n.translate('xpack.aiAssistant.chatHeader.actions.connector', {
176+
defaultMessage: 'Connector',
177+
}),
178+
content: (
179+
<ConnectorSelectable
180+
customConnectors={customConnectors}
181+
preConfiguredConnectors={preConfiguredConnectors}
182+
value={connectors.selectedConnector}
183+
defaultConnectorId={connectors.defaultConnector}
184+
onValueChange={(id: string) => {
185+
connectors.selectConnector(id);
186+
toggleActionsMenu();
187+
}}
188+
onAddConnectorClick={() => {
189+
toggleActionsMenu();
190+
setConnectorFlyoutOpen(true);
191+
}}
192+
onManageConnectorsClick={() => {
153193
toggleActionsMenu();
154194
navigateToConnectorsManagementApp(application!);
155195
}}
156-
>
157-
{i18n.translate('xpack.aiAssistant.settingsPage.goToConnectorsButtonLabel', {
158-
defaultMessage: 'Manage connectors',
159-
})}
160-
</EuiButtonEmpty>
161-
</EuiPanel>
162-
),
163-
},
164-
]}
165-
/>
166-
</EuiPopover>
196+
/>
197+
),
198+
},
199+
]}
200+
/>
201+
</EuiPopover>
202+
{connectorFlyoutOpen && (
203+
<ConnectorFlyout
204+
featureId={GenerativeAIForObservabilityConnectorFeatureId}
205+
onConnectorCreated={onConnectorCreated}
206+
onClose={() => setConnectorFlyoutOpen(false)}
207+
/>
208+
)}
209+
</>
167210
);
168211
}

x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_body.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import type { AuthenticatedUser } from '@kbn/security-plugin/common';
3535
import { findLastIndex } from 'lodash';
3636
import React, { useCallback, useEffect, useRef, useState } from 'react';
3737
import { ChatFeedback } from '@kbn/observability-ai-assistant-plugin/public/analytics/schemas/chat_feedback';
38+
import type { ApplicationStart } from '@kbn/core/public';
3839
import type { UseKnowledgeBaseResult } from '../hooks/use_knowledge_base';
3940
import { ASSISTANT_SETUP_TITLE, EMPTY_CONVERSATION_TITLE, UPGRADE_LICENSE_TITLE } from '../i18n';
4041
import { useAIAssistantChatService } from '../hooks/use_ai_assistant_chat_service';
@@ -121,6 +122,7 @@ export function ChatBody({
121122
onConversationUpdate,
122123
onToggleFlyoutPositionMode,
123124
navigateToConversation,
125+
navigateToConnectorsManagementApp,
124126
}: {
125127
connectors: ReturnType<typeof useGenAIConnectors>;
126128
currentUser?: Pick<AuthenticatedUser, 'full_name' | 'username'>;
@@ -133,6 +135,7 @@ export function ChatBody({
133135
onConversationUpdate: (conversation: { conversation: Conversation['conversation'] }) => void;
134136
onToggleFlyoutPositionMode?: (flyoutPositionMode: FlyoutPositionMode) => void;
135137
navigateToConversation?: (conversationId?: string) => void;
138+
navigateToConnectorsManagementApp: (application: ApplicationStart) => void;
136139
}) {
137140
const license = useLicense();
138141
const hasCorrectLicense = license?.hasAtLeast('enterprise');
@@ -579,6 +582,7 @@ export function ChatBody({
579582
initialMessages?.length && !initialConversationId ? undefined : navigateToConversation
580583
}
581584
isConversationApp={!showLinkToConversationsApp}
585+
navigateToConnectorsManagementApp={navigateToConnectorsManagementApp}
582586
/>
583587
</EuiFlexItem>
584588
<EuiFlexItem grow={false}>

x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_flyout.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { i18n } from '@kbn/i18n';
1919
import { Message } from '@kbn/observability-ai-assistant-plugin/common';
2020
import React, { useState } from 'react';
2121
import ReactDOM from 'react-dom';
22+
import type { ApplicationStart } from '@kbn/core/public';
23+
import { navigateToConnectorsManagementApp } from '@kbn/observability-ai-assistant-plugin/public';
2224
import { useConversationKey } from '../hooks/use_conversation_key';
2325
import { useConversationList } from '../hooks/use_conversation_list';
2426
import { useCurrentUser } from '../hooks/use_current_user';
@@ -142,6 +144,11 @@ export function ChatFlyout({
142144
onFlyoutPositionModeChange?.(newFlyoutPositionMode);
143145
};
144146

147+
const navigateToConnectorsManagementAppHandler = (application: ApplicationStart) => {
148+
onClose();
149+
navigateToConnectorsManagementApp(application);
150+
};
151+
145152
return isOpen ? (
146153
<ObservabilityAIAssistantMultipaneFlyoutContext.Provider
147154
value={{
@@ -287,6 +294,7 @@ export function ChatFlyout({
287294
}
288295
: undefined
289296
}
297+
navigateToConnectorsManagementApp={navigateToConnectorsManagementAppHandler}
290298
/>
291299
</EuiFlexItem>
292300

0 commit comments

Comments
 (0)