UNPKG

@langchain/community

Version:
1 lines • 6.56 kB
{"version":3,"file":"zep_cloud.cjs","names":["role: MessageType","BaseChatMessageHistory","fields: ZepMemoryInput","NotFoundError","zepMemoryToMessages","condenseZepMemoryIntoHumanMessage","message: string","metadata?: Record<string, unknown>","AIMessage","message: BaseMessage","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,wBAAwB,CAACA,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;CACV;AACF;;;;;;;;AAwBD,IAAa,6BAAb,cACUC,qDAEV;CACE,eAAyB,CAAE;CAE3B;CAEA;CAEA;CAEA,cAAc;CAEd,WAAW;CAEX,mBAAmB;CAEnB,YAAYC,QAAwB;EAClC,OAAO;EACP,KAAK,YAAY,OAAO;EACxB,KAAK,aAAa,OAAO;EACzB,KAAK,SAAS,OAAO;AACrB,MAAI,OAAO,aACT,KAAK,cAAc,OAAO;AAE5B,MAAI,OAAO,UACT,KAAK,WAAW,OAAO;AAEzB,MAAI,OAAO,kBACT,KAAK,mBAAmB,OAAO;CAElC;CAED,MAAc,YAAoC;AAChD,MAAI;AACF,UAAO,KAAK,OAAO,OAAO,IAAI,KAAK,WAAW,EAC5C,YAAY,KAAK,WAClB,EAAC;EACH,SAAQ,OAAO;AAEd,OAAI,iBAAiBC,sCACnB,QAAQ,KACN,CAAC,QAAQ,EAAE,KAAK,UAAU,iCAAiC,CAAC,CAC7D;QAED,QAAQ,MAAM,0BAA0B,MAAM;AAEhD,UAAO;EACR;CACF;CAED,MAAM,cAAsC;EAC1C,MAAM,SAAS,MAAM,KAAK,WAAW;AACrC,MAAI,CAAC,OACH,QAAO,CAAE;AAGX,SAAO,KAAK,mBACRC,6CAAoB,OAAO,GAC3B,CAACC,2DAAkC,OAAO,AAAC;CAChD;CAED,MAAM,iBACJC,SACAC,UACe;EACf,MAAM,KAAK,WAAW,IAAIC,oCAAU,EAAE,SAAS,QAAS,IAAG,SAAS;CACrE;CAED,MAAM,WACJC,SACAF,UACe;EACf,MAAM,gBAAgB;AACtB,MAAI,QAAQ,UAAU,KAAK,MACzB,cAAc,OAAO,KAAK;WACjB,QAAQ,UAAU,KAAK,SAChC,cAAc,OAAO,KAAK;AAE5B,MAAI,QAAQ,YAAY,KACtB,OAAM,IAAI,MAAM;AAGlB,MAAI,MAAM,QAAQ,QAAQ,QAAQ,CAChC,OAAM,IAAI,MAAM;EAGlB,MAAM,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;EACD,CACF,EACF,EAAC;CACH;CAED,MAAM,eACJD,SACAC,UACe;EACf,MAAM,KAAK,WAAW,IAAIG,uCAAa,EAAE,SAAS,QAAS,GAAE,UAAU;CACxE;CAED,QAAuB;EACrB,QAAQ,KAAK,mBAAmB,KAAK,UAAU;AAC/C,SAAO,QAAQ,QAAQ,OAAU;CAClC;AACF"}