{"version":3,"sources":["../../src/memory/summarizeMemory.ts"],"names":["SummarizeMemoryTemplate","PromptTemplate","schema","z","object","summary","string","template","SummarizeMemory","BaseMemory","llm","constructor","config","register","messages","currentSummary","BaseMessage","of","role","Role","ASSISTANT","text","delete","message","add","_index","response","generate","SYSTEM","render","getTextContent","reset","createSnapshot","shallowCopy","loadSnapshot","state","Object","assign"],"mappings":";;;;;;;;;;AA4BaA,MAAAA,uBAAAA,GAA0B,IAAIC,2BAAe,CAAA;AACxDC,EAAAA,MAAAA,EAAQC,MAAEC,MAAO,CAAA;AACfC,IAAAA,OAAAA,EAASF,MAAEG,MAAM;GACnB,CAAA;EACAC,QAAU,EAAA,CAAA;;;;AAIZ,CAAA;AAEO,MAAMC,wBAAwBC,mBAAAA,CAAAA;EAtCrC;;;EAuCYJ,OAAU,GAAA,EAAA;AACVE,EAAAA,QAAAA;AACAG,EAAAA,GAAAA;AAEVC,EAAAA,WAAAA,CAAYC,MAA8B,EAAA;AACxC,IAAK,KAAA,EAAA;AACL,IAAKL,IAAAA,CAAAA,QAAAA,GAAWK,OAAOL,QAAYP,IAAAA,uBAAAA;AACnC,IAAA,IAAA,CAAKU,MAAME,MAAOF,CAAAA,GAAAA;AACpB;EAEA;AACE,IAAA,IAAA,CAAKG,QAAQ,EAAA;AACf;AAEA,EAAA,IAAIC,QAA0B,GAAA;AAC5B,IAAA,MAAMC,iBAAiB,IAAKV,CAAAA,OAAAA;AAC5B,IAAA,IAAI,CAACU,cAAgB,EAAA;AACnB,MAAA,OAAO,EAAA;AACT;AAEA,IAAO,OAAA;AACLC,MAAAA,uBAAAA,CAAYC,EAAG,CAAA;AACbC,QAAAA,IAAAA,EAAMC,gBAAKC,CAAAA,SAAAA;QACXC,IAAMN,EAAAA;OACR;;AAEJ;;AAGA,EAAA,MAAMO,OAAOC,OAAsB,EAAA;AACjC,IAAO,OAAA,KAAA;AACT;EAEA,MAAMC,GAAAA,CAAID,SAAsBE,MAAiB,EAAA;AAC/C,IAAA,MAAMC,QAAW,GAAA,MAAM,IAAKhB,CAAAA,GAAAA,CAAIiB,QAAS,CAAA;AACvCX,MAAAA,uBAAAA,CAAYC,EAAG,CAAA;AACbC,QAAAA,IAAAA,EAAMC,gBAAKS,CAAAA,MAAAA;QACXP,IAAM,EAAA,IAAA,CAAKd,SAASsB,MAAO,CAAA;AACzBxB,UAAAA,OAAAA,EAAS,IAAKA,CAAAA;SAChB;OACF,CAAA;AACAW,MAAAA,uBAAAA,CAAYC,EAAG,CAAA;AACbC,QAAAA,IAAAA,EAAMC,gBAAKC,CAAAA,SAAAA;QACXC,IAAM,EAAA,CAAA;EACZE,OAAQL,CAAAA,IAAI,CAAKK,EAAAA,EAAAA,OAAAA,CAAQF,IAAI;;;;OAIzB;AACD,KAAA,CAAA;AACD,IAAKhB,IAAAA,CAAAA,OAAAA,GAAUqB,SAASI,cAAc,EAAA;AACxC;EAEAC,KAAQ,GAAA;AACN,IAAA,IAAA,CAAK1B,OAAU,GAAA,EAAA;AACjB;EAEA2B,cAAiB,GAAA;AACf,IAAO,OAAA;AACL3B,MAAAA,OAAAA,EAAS,IAAKA,CAAAA,OAAAA;AACdE,MAAAA,QAAAA,EAAU,IAAKA,CAAAA,QAAAA;AACfG,MAAAA,GAAAA,EAAK,IAAKA,CAAAA,GAAAA;MACVI,QAAUmB,EAAAA,qBAAAA,CAAY,KAAKnB,QAAQ;AACrC,KAAA;AACF;AAEAoB,EAAAA,YAAAA,CAAaC,KAA+C,EAAA;AAC1DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,KAAAA,CAAAA;AACtB;AACF","file":"summarizeMemory.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseMessage, Role } from \"@/llms/primitives/message.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { z } from \"zod\";\nimport { ChatLLM, ChatLLMOutput } from \"@/llms/chat.js\";\n\nexport interface SummarizeMemoryInput {\n  llm: ChatLLM<ChatLLMOutput>;\n  template?: typeof SummarizeMemoryTemplate;\n}\n\nexport const SummarizeMemoryTemplate = new PromptTemplate({\n  schema: z.object({\n    summary: z.string(),\n  }),\n  template: `Progressively summarize the lines of conversation provided, adding onto the previous summary returning a new summary.\n\nCurrent summary:\n{{summary}}`,\n});\n\nexport class SummarizeMemory extends BaseMemory {\n  protected summary = \"\";\n  protected template;\n  protected llm;\n\n  constructor(config: SummarizeMemoryInput) {\n    super();\n    this.template = config.template ?? SummarizeMemoryTemplate;\n    this.llm = config.llm;\n  }\n\n  static {\n    this.register();\n  }\n\n  get messages(): BaseMessage[] {\n    const currentSummary = this.summary;\n    if (!currentSummary) {\n      return [];\n    }\n\n    return [\n      BaseMessage.of({\n        role: Role.ASSISTANT,\n        text: currentSummary,\n      }),\n    ];\n  }\n\n  // eslint-disable-next-line unused-imports/no-unused-vars\n  async delete(message: BaseMessage) {\n    return false;\n  }\n\n  async add(message: BaseMessage, _index?: number) {\n    const response = await this.llm.generate([\n      BaseMessage.of({\n        role: Role.SYSTEM,\n        text: this.template.render({\n          summary: this.summary,\n        }),\n      }),\n      BaseMessage.of({\n        role: Role.ASSISTANT,\n        text: `New lines of conversation:\n${message.role}: ${message.text}\n\nNew summary:\n`,\n      }),\n    ]);\n    this.summary = response.getTextContent();\n  }\n\n  reset() {\n    this.summary = \"\";\n  }\n\n  createSnapshot() {\n    return {\n      summary: this.summary,\n      template: this.template,\n      llm: this.llm,\n      messages: shallowCopy(this.messages),\n    };\n  }\n\n  loadSnapshot(state: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, state);\n  }\n}\n"]}