import { RunnableSequence, RunnableMap } from '@langchain/core/runnables'; import ListLineOutputParser from '../lib/outputParsers/listLineOutputParser'; import { PromptTemplate } from '@langchain/core/prompts'; import formatChatHistoryAsString from '../utils/formatHistory'; import { BaseMessage } from '@langchain/core/messages'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { ChatOpenAI } from '@langchain/openai'; const suggestionGeneratorPrompt = ` - You are an AI suggestion generator for an AI powered search engine. - You will be given a conversation below. - You need to generate 4-5 suggestions based on the conversation. - The suggestion should be relevant to the conversation that can be used by the user to ask the chat model for more information. - You need to make sure the suggestions are relevant to the conversation and are helpful to the user. Keep a note that the user might use these suggestions to ask a chat model for more information. - Make sure the suggestions are medium in length and are informative and relevant to the conversation. - Provide these suggestions separated by newlines between the XML tags and . ### For example: Tell me more about SpaceX and their recent projects What is the latest news on SpaceX? Who is the CEO of SpaceX? ### Conversation: {chat_history} `; type SuggestionGeneratorInput = { chat_history: BaseMessage[]; }; const outputParser = new ListLineOutputParser({ key: 'suggestions', }); const createSuggestionGeneratorChain = (llm: BaseChatModel) => { return RunnableSequence.from([ RunnableMap.from({ chat_history: (input: SuggestionGeneratorInput) => formatChatHistoryAsString(input.chat_history), }), PromptTemplate.fromTemplate(suggestionGeneratorPrompt), llm, outputParser, ]); }; const generateSuggestions = ( input: SuggestionGeneratorInput, llm: BaseChatModel, ) => { (llm as unknown as ChatOpenAI).temperature = 0; const suggestionGeneratorChain = createSuggestionGeneratorChain(llm); return suggestionGeneratorChain.invoke(input); }; export default generateSuggestions;