{"version":3,"file":"analyze_documents_chain.cjs","names":["BaseChain","RecursiveCharacterTextSplitter"],"sources":["../../src/chains/analyze_documents_chain.ts"],"sourcesContent":["import { ChainValues } from \"@langchain/core/utils/types\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n  TextSplitter,\n  RecursiveCharacterTextSplitter,\n} from \"@langchain/textsplitters\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedAnalyzeDocumentChain } from \"./serde.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface for the input parameters required by the AnalyzeDocumentChain\n * class.\n */\nexport interface AnalyzeDocumentChainInput extends Omit<ChainInputs, \"memory\"> {\n  combineDocumentsChain: BaseChain;\n  textSplitter?: TextSplitter;\n  inputKey?: string;\n}\n\n/**\n * Chain that combines documents by stuffing into context.\n * @augments BaseChain\n * @augments StuffDocumentsChainInput\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 });\n * const combineDocsChain = loadSummarizationChain(model);\n * const chain = new AnalyzeDocumentChain({\n *   combineDocumentsChain: combineDocsChain,\n * });\n *\n * // Read the text from a file (this is a placeholder for actual file reading)\n * const text = readTextFromFile(\"state_of_the_union.txt\");\n *\n * // Invoke the chain to analyze the document\n * const res = await chain.call({\n *   input_document: text,\n * });\n *\n * console.log({ res });\n * ```\n */\nexport class AnalyzeDocumentChain\n  extends BaseChain\n  implements AnalyzeDocumentChainInput\n{\n  static lc_name() {\n    return \"AnalyzeDocumentChain\";\n  }\n\n  inputKey = \"input_document\";\n\n  combineDocumentsChain: BaseChain;\n\n  textSplitter: TextSplitter;\n\n  constructor(fields: AnalyzeDocumentChainInput) {\n    super(fields);\n    this.combineDocumentsChain = fields.combineDocumentsChain;\n    this.inputKey = fields.inputKey ?? this.inputKey;\n    this.textSplitter =\n      fields.textSplitter ?? new RecursiveCharacterTextSplitter();\n  }\n\n  get inputKeys(): string[] {\n    return [this.inputKey];\n  }\n\n  get outputKeys(): string[] {\n    return this.combineDocumentsChain.outputKeys;\n  }\n\n  /** @ignore */\n  async _call(\n    values: ChainValues,\n    runManager?: CallbackManagerForChainRun\n  ): Promise<ChainValues> {\n    if (!(this.inputKey in values)) {\n      throw new Error(`Document key ${this.inputKey} not found.`);\n    }\n    const { [this.inputKey]: doc, ...rest } = values;\n\n    const currentDoc = doc as string;\n    const currentDocs = await this.textSplitter.createDocuments([currentDoc]);\n\n    const newInputs = { input_documents: currentDocs, ...rest };\n    const result = await this.combineDocumentsChain.call(\n      newInputs,\n      runManager?.getChild(\"combine_documents\")\n    );\n    return result;\n  }\n\n  _chainType() {\n    return \"analyze_document_chain\" as const;\n  }\n\n  static async deserialize(\n    data: SerializedAnalyzeDocumentChain,\n    values: LoadValues\n  ) {\n    if (!(\"text_splitter\" in values)) {\n      throw new Error(\n        `Need to pass in a text_splitter to deserialize AnalyzeDocumentChain.`\n      );\n    }\n    const { text_splitter } = values;\n\n    if (!data.combine_document_chain) {\n      throw new Error(\n        `Need to pass in a combine_document_chain to deserialize AnalyzeDocumentChain.`\n      );\n    }\n\n    return new AnalyzeDocumentChain({\n      combineDocumentsChain: await BaseChain.deserialize(\n        data.combine_document_chain\n      ),\n      textSplitter: text_splitter,\n    });\n  }\n\n  serialize(): SerializedAnalyzeDocumentChain {\n    return {\n      _type: this._chainType(),\n      combine_document_chain: this.combineDocumentsChain.serialize(),\n    };\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,IAAa,uBAAb,MAAa,6BACHA,aAAAA,UAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,WAAW;CAEX;CAEA;CAEA,YAAY,QAAmC;AAC7C,QAAM,OAAO;AACb,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,eACH,OAAO,gBAAgB,IAAIC,yBAAAA,gCAAgC;;CAG/D,IAAI,YAAsB;AACxB,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAuB;AACzB,SAAO,KAAK,sBAAsB;;;CAIpC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,GAAG,KAAK,WAAW,KAAK,GAAG,SAAS;EAE1C,MAAM,aAAa;EAGnB,MAAM,YAAY;GAAE,iBAFA,MAAM,KAAK,aAAa,gBAAgB,CAAC,WAAW,CAAC;GAEvB,GAAG;GAAM;AAK3D,SAJe,MAAM,KAAK,sBAAsB,KAC9C,WACA,YAAY,SAAS,oBAAoB,CAC1C;;CAIH,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,mBAAmB,QACvB,OAAM,IAAI,MACR,uEACD;EAEH,MAAM,EAAE,kBAAkB;AAE1B,MAAI,CAAC,KAAK,uBACR,OAAM,IAAI,MACR,gFACD;AAGH,SAAO,IAAI,qBAAqB;GAC9B,uBAAuB,MAAMD,aAAAA,UAAU,YACrC,KAAK,uBACN;GACD,cAAc;GACf,CAAC;;CAGJ,YAA4C;AAC1C,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,wBAAwB,KAAK,sBAAsB,WAAW;GAC/D"}