@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 6.41 kB
Source Map (JSON)
{"version":3,"file":"zep_cloud.cjs","names":["BaseChatMessageHistory","NotFoundError","zepMemoryToMessages","condenseZepMemoryIntoHumanMessage","AIMessage","HumanMessage"],"sources":["../../../src/stores/message/zep_cloud.ts"],"sourcesContent":["import { Zep, ZepClient } from \"@getzep/zep-cloud\";\nimport { Memory, NotFoundError, RoleType } from \"@getzep/zep-cloud/api\";\nimport { BaseChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n AIMessage,\n BaseMessage,\n HumanMessage,\n MessageType,\n} from \"@langchain/core/messages\";\nimport {\n condenseZepMemoryIntoHumanMessage,\n zepMemoryToMessages,\n} from \"../../memory/zep_cloud.js\";\n\nexport const getZepMessageRoleType = (role: MessageType): RoleType => {\n switch (role) {\n case \"human\":\n return \"user\";\n case \"ai\":\n return \"assistant\";\n case \"system\":\n return \"system\";\n case \"function\":\n return \"function\";\n case \"tool\":\n return \"tool\";\n default:\n return \"norole\";\n }\n};\n\n/**\n * Interface defining the structure of the input data for the ZepMemory\n * class. It includes properties like humanPrefix, aiPrefix, memoryKey, sessionId, memoryType and apiKey.\n */\ninterface ZepMemoryInput {\n sessionId: string;\n client: ZepClient;\n memoryType: Zep.MemoryType;\n humanPrefix?: string;\n aiPrefix?: string;\n // Whether to return separate messages for chat history with a SystemMessage containing (facts and summary) or return a single HumanMessage with the entire memory context.\n // Defaults to false (return a single HumanMessage) in order to allow more flexibility with different models.\n separateMessages?: boolean;\n}\n\n/**\n * Class used to manage the memory of a chat session, including loading\n * and saving the chat history, and clearing the memory when needed. It\n * uses the ZepClient to interact with the Zep service for managing the\n * chat session's memory.\n *\n */\nexport class ZepCloudChatMessageHistory\n extends BaseChatMessageHistory\n implements ZepMemoryInput\n{\n lc_namespace: string[] = [];\n\n sessionId: string;\n\n client: ZepClient;\n\n memoryType: Zep.MemoryType;\n\n humanPrefix = \"human\";\n\n aiPrefix = \"ai\";\n\n separateMessages = false;\n\n constructor(fields: ZepMemoryInput) {\n super();\n this.sessionId = fields.sessionId;\n this.memoryType = fields.memoryType;\n this.client = fields.client;\n if (fields.humanPrefix) {\n this.humanPrefix = fields.humanPrefix;\n }\n if (fields.aiPrefix) {\n this.aiPrefix = fields.aiPrefix;\n }\n if (fields.separateMessages) {\n this.separateMessages = fields.separateMessages;\n }\n }\n\n private async getMemory(): Promise<Memory | null> {\n try {\n return this.client.memory.get(this.sessionId, {\n memoryType: this.memoryType,\n });\n } catch (error) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (error instanceof NotFoundError) {\n console.warn(\n `Session ${this.sessionId} not found in Zep. Returning None`\n );\n } else {\n console.error(\"Error getting memory: \", error);\n }\n return null;\n }\n }\n\n async getMessages(): Promise<BaseMessage[]> {\n const memory = await this.getMemory();\n if (!memory) {\n return [];\n }\n\n return this.separateMessages\n ? zepMemoryToMessages(memory)\n : [condenseZepMemoryIntoHumanMessage(memory)];\n }\n\n async addAIChatMessage(\n message: string,\n metadata?: Record<string, unknown>\n ): Promise<void> {\n await this.addMessage(new AIMessage({ content: message }), metadata);\n }\n\n async addMessage(\n message: BaseMessage,\n metadata?: Record<string, unknown>\n ): Promise<void> {\n const messageToSave = message;\n if (message._getType() === \"ai\") {\n messageToSave.name = this.aiPrefix;\n } else if (message._getType() === \"human\") {\n messageToSave.name = this.humanPrefix;\n }\n if (message.content === null) {\n throw new Error(\"Message content cannot be null\");\n }\n\n if (Array.isArray(message.content)) {\n throw new Error(\"Message content cannot be a list\");\n }\n\n await this.client.memory.add(this.sessionId, {\n messages: [\n {\n content: message.content,\n role: message.name ?? message._getType(),\n roleType: getZepMessageRoleType(message._getType()),\n metadata,\n },\n ],\n });\n }\n\n async addUserMessage(\n message: string,\n metadata?: Record<string, unknown>\n ): Promise<void> {\n await this.addMessage(new HumanMessage({ content: message }, metadata));\n }\n\n clear(): Promise<void> {\n console.warn(\"Clearing memory\", this.sessionId);\n return Promise.resolve(undefined);\n }\n}\n"],"mappings":";;;;;;;;;;;AAcA,MAAa,yBAAyB,SAAgC;AACpE,SAAQ,MAAR;EACE,KAAK,QACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,QACE,QAAO;;;;;;;;;;AA0Bb,IAAa,6BAAb,cACUA,6BAAAA,uBAEV;CACE,eAAyB,EAAE;CAE3B;CAEA;CAEA;CAEA,cAAc;CAEd,WAAW;CAEX,mBAAmB;CAEnB,YAAY,QAAwB;AAClC,SAAO;AACP,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa,OAAO;AACzB,OAAK,SAAS,OAAO;AACrB,MAAI,OAAO,YACT,MAAK,cAAc,OAAO;AAE5B,MAAI,OAAO,SACT,MAAK,WAAW,OAAO;AAEzB,MAAI,OAAO,iBACT,MAAK,mBAAmB,OAAO;;CAInC,MAAc,YAAoC;AAChD,MAAI;AACF,UAAO,KAAK,OAAO,OAAO,IAAI,KAAK,WAAW,EAC5C,YAAY,KAAK,YAClB,CAAC;WACK,OAAO;AAEd,OAAI,iBAAiBC,+BAAAA,cACnB,SAAQ,KACN,WAAW,KAAK,UAAU,mCAC3B;OAED,SAAQ,MAAM,0BAA0B,MAAM;AAEhD,UAAO;;;CAIX,MAAM,cAAsC;EAC1C,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,MAAI,CAAC,OACH,QAAO,EAAE;AAGX,SAAO,KAAK,mBACRC,yBAAAA,oBAAoB,OAAO,GAC3B,CAACC,yBAAAA,kCAAkC,OAAO,CAAC;;CAGjD,MAAM,iBACJ,SACA,UACe;AACf,QAAM,KAAK,WAAW,IAAIC,yBAAAA,UAAU,EAAE,SAAS,SAAS,CAAC,EAAE,SAAS;;CAGtE,MAAM,WACJ,SACA,UACe;EACf,MAAM,gBAAgB;AACtB,MAAI,QAAQ,UAAU,KAAK,KACzB,eAAc,OAAO,KAAK;WACjB,QAAQ,UAAU,KAAK,QAChC,eAAc,OAAO,KAAK;AAE5B,MAAI,QAAQ,YAAY,KACtB,OAAM,IAAI,MAAM,iCAAiC;AAGnD,MAAI,MAAM,QAAQ,QAAQ,QAAQ,CAChC,OAAM,IAAI,MAAM,mCAAmC;AAGrD,QAAM,KAAK,OAAO,OAAO,IAAI,KAAK,WAAW,EAC3C,UAAU,CACR;GACE,SAAS,QAAQ;GACjB,MAAM,QAAQ,QAAQ,QAAQ,UAAU;GACxC,UAAU,sBAAsB,QAAQ,UAAU,CAAC;GACnD;GACD,CACF,EACF,CAAC;;CAGJ,MAAM,eACJ,SACA,UACe;AACf,QAAM,KAAK,WAAW,IAAIC,yBAAAA,aAAa,EAAE,SAAS,SAAS,EAAE,SAAS,CAAC;;CAGzE,QAAuB;AACrB,UAAQ,KAAK,mBAAmB,KAAK,UAAU;AAC/C,SAAO,QAAQ,QAAQ,KAAA,EAAU"}