const CustomAgent = require('./CustomAgent'); const { CustomOutputParser } = require('./outputParser'); const { AgentExecutor } = require('langchain/agents'); const { LLMChain } = require('langchain/chains'); const { BufferMemory, ChatMessageHistory } = require('langchain/memory'); const { ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, } = require('langchain/prompts'); const initializeCustomAgent = async ({ tools, model, pastMessages, currentDateString, ...rest }) => { let prompt = CustomAgent.createPrompt(tools, { currentDateString, model: model.modelName }); const chatPrompt = ChatPromptTemplate.fromPromptMessages([ new SystemMessagePromptTemplate(prompt), HumanMessagePromptTemplate.fromTemplate(`{chat_history} Query: {input} {agent_scratchpad}`), ]); const outputParser = new CustomOutputParser({ tools }); const memory = new BufferMemory({ chatHistory: new ChatMessageHistory(pastMessages), // returnMessages: true, // commenting this out retains memory memoryKey: 'chat_history', humanPrefix: 'User', aiPrefix: 'Assistant', inputKey: 'input', outputKey: 'output', }); const llmChain = new LLMChain({ prompt: chatPrompt, llm: model, }); const agent = new CustomAgent({ llmChain, outputParser, allowedTools: tools.map((tool) => tool.name), }); return AgentExecutor.fromAgentAndTools({ agent, tools, memory, ...rest }); }; module.exports = initializeCustomAgent;