/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ import { transformRawData } from '@kbn/elastic-assistant-common'; import type { Message } from '../../assistant_context/types'; import { SYSTEM_PROMPT_CONTEXT_NON_I18N } from '../../content/prompts/system/translations'; import { getAnonymizedValue as defaultGetAnonymizedValue } from '../get_anonymized_value'; import type { SelectedPromptContext } from '../prompt_context/types'; import type { Prompt } from '../types'; export const getSystemMessages = ({ isNewChat, selectedSystemPrompt, }: { isNewChat: boolean; selectedSystemPrompt: Prompt | undefined; }): Message[] => { if (!isNewChat || selectedSystemPrompt == null) { return []; } const message: Message = { content: selectedSystemPrompt.content, role: 'system', timestamp: new Date().toLocaleString(), }; return [message]; }; export async function getCombinedMessage({ currentReplacements, getAnonymizedValue = defaultGetAnonymizedValue, isNewChat, onNewReplacements, promptText, selectedPromptContexts, selectedSystemPrompt, }: { currentReplacements: Record | undefined; getAnonymizedValue?: ({ currentReplacements, rawValue, }: { currentReplacements: Record | undefined; rawValue: string; }) => string; isNewChat: boolean; onNewReplacements: (newReplacements: Record) => void; promptText: string; selectedPromptContexts: Record; selectedSystemPrompt: Prompt | undefined; }): Promise { const promptContextsContent = Object.keys(selectedPromptContexts) .sort() .map((id) => { const promptContext = transformRawData({ allow: selectedPromptContexts[id].allow, allowReplacement: selectedPromptContexts[id].allowReplacement, currentReplacements, getAnonymizedValue, onNewReplacements, rawData: selectedPromptContexts[id].rawData, }); return `${SYSTEM_PROMPT_CONTEXT_NON_I18N(promptContext)}`; }); return { content: `${ isNewChat ? `${selectedSystemPrompt?.content ?? ''}\n\n` : '' }${promptContextsContent} ${promptText}`, role: 'user', // we are combining the system and user messages into one message timestamp: new Date().toLocaleString(), }; }