{"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"}