| const { ConversationSummaryBufferMemory, ChatMessageHistory } = require('langchain/memory'); | |
| const { formatLangChainMessages, SUMMARY_PROMPT } = require('../prompts'); | |
| const { predictNewSummary } = require('../chains'); | |
| const createSummaryBufferMemory = ({ llm, prompt, messages, ...rest }) => { | |
| const chatHistory = new ChatMessageHistory(messages); | |
| return new ConversationSummaryBufferMemory({ | |
| llm, | |
| prompt, | |
| chatHistory, | |
| returnMessages: true, | |
| ...rest, | |
| }); | |
| }; | |
| const summaryBuffer = async ({ | |
| llm, | |
| debug, | |
| context, // array of messages | |
| formatOptions = {}, | |
| previous_summary = '', | |
| prompt = SUMMARY_PROMPT, | |
| signal, | |
| }) => { | |
| if (debug && previous_summary) { | |
| console.log('<-----------PREVIOUS SUMMARY----------->\n\n'); | |
| console.log(previous_summary); | |
| } | |
| const formattedMessages = formatLangChainMessages(context, formatOptions); | |
| const memoryOptions = { | |
| llm, | |
| prompt, | |
| messages: formattedMessages, | |
| }; | |
| if (formatOptions.userName) { | |
| memoryOptions.humanPrefix = formatOptions.userName; | |
| } | |
| if (formatOptions.userName) { | |
| memoryOptions.aiPrefix = formatOptions.assistantName; | |
| } | |
| const chatPromptMemory = createSummaryBufferMemory(memoryOptions); | |
| const messages = await chatPromptMemory.chatHistory.getMessages(); | |
| if (debug) { | |
| console.log('<-----------SUMMARY BUFFER MESSAGES----------->\n\n'); | |
| console.log(JSON.stringify(messages)); | |
| } | |
| const predictSummary = await predictNewSummary({ | |
| messages, | |
| previous_summary, | |
| memory: chatPromptMemory, | |
| signal, | |
| }); | |
| if (debug) { | |
| console.log('<-----------SUMMARY----------->\n\n'); | |
| console.log(JSON.stringify(predictSummary)); | |
| } | |
| return { role: 'system', content: predictSummary }; | |
| }; | |
| module.exports = { createSummaryBufferMemory, summaryBuffer }; | |