diff --git a/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_flyout.tsx b/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_flyout.tsx index 4dfc899ec6729..72a3edeb4bf3d 100644 --- a/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_flyout.tsx +++ b/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/chat_flyout.tsx @@ -42,7 +42,7 @@ export enum FlyoutPositionMode { export function ChatFlyout({ initialTitle, - initialMessages, + initialMessages: initialMessagesFromProps, initialFlyoutPositionMode, onFlyoutPositionModeChange, isOpen, @@ -69,6 +69,7 @@ export function ChatFlyout({ const knowledgeBase = useKnowledgeBase(); const [conversationId, setConversationId] = useState(undefined); + const [initialMessages, setInitialMessages] = useState(initialMessagesFromProps); const [flyoutPositionMode, setFlyoutPositionMode] = useState( initialFlyoutPositionMode || FlyoutPositionMode.OVERLAY @@ -90,6 +91,7 @@ export function ChatFlyout({ const onConversationDuplicate = (conversation: Conversation) => { conversationList.conversations.refresh(); + setInitialMessages([]); setConversationId(conversation.conversation.id); }; diff --git a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.test.tsx b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.test.tsx index 47a4f63717fd0..ca9c81f4d6aad 100644 --- a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.test.tsx +++ b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.test.tsx @@ -84,6 +84,28 @@ describe('useConversation', () => { jest.clearAllMocks(); }); + describe('with initial messages and a conversation id', () => { + it('throws an error', () => { + expect(() => + renderHook(useConversation, { + initialProps: { + chatService: mockChatService, + connectorId: 'my-connector', + initialMessages: [ + { + '@timestamp': new Date().toISOString(), + message: { content: '', role: MessageRole.User }, + }, + ], + initialConversationId: 'foo', + onConversationDuplicate: jest.fn(), + }, + wrapper, + }) + ).toThrow(/Cannot set initialMessages if initialConversationId is set/); + }); + }); + describe('without initial messages and a conversation id', () => { beforeEach(() => { hookResult = renderHook(useConversation, { @@ -388,7 +410,7 @@ describe('useConversation', () => { result.current.saveTitle('my-new-title'); } catch (e) { expect(e).toBeInstanceOf(Error); - expect(e.message).toBe('Cannot save title if conversation is not stored'); + expect(e.message).toBe('Cannot set initialMessages if initialConversationId is set'); done(); } }); diff --git a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.ts b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.ts index ad8ae926d2fe2..aa9c4853b5c14 100644 --- a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.ts +++ b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_conversation.ts @@ -84,6 +84,10 @@ export function useConversation({ const initialMessages = useOnce(initialMessagesFromProps); const initialTitle = useOnce(initialTitleFromProps); + if (initialMessages.length && initialConversationId) { + throw new Error('Cannot set initialMessages if initialConversationId is set'); + } + const update = (nextConversationObject: Conversation) => { return service .callApi(`PUT /internal/observability_ai_assistant/conversation/{conversationId}`, { @@ -221,12 +225,7 @@ export function useConversation({ } : currentUser, state, - next: (_messages: Message[]) => - next(_messages, (error) => { - if (error) { - conversation.refresh(); - } - }), + next: (_messages: Message[]) => next(_messages, () => conversation.refresh()), stop, messages, saveTitle: (title: string) => {