{"version":3,"file":"vector_db_qa.cjs","names":["BaseChain","loadQAStuffChain"],"sources":["../../src/chains/vector_db_qa.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type { VectorStoreInterface } from \"@langchain/core/vectorstores\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { BaseChain, ChainInputs } from \"./base.js\";\nimport { SerializedVectorDBQAChain } from \"./serde.js\";\nimport { loadQAStuffChain } from \"./question_answering/load.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type LoadValues = Record<string, any>;\n\n/**\n * Interface that extends the `ChainInputs` interface and defines the\n * input fields required for a VectorDBQAChain. It includes properties\n * such as `vectorstore`, `combineDocumentsChain`,\n * `returnSourceDocuments`, `k`, and `inputKey`.\n */\nexport interface VectorDBQAChainInput extends Omit<ChainInputs, \"memory\"> {\n  vectorstore: VectorStoreInterface;\n  combineDocumentsChain: BaseChain;\n  returnSourceDocuments?: boolean;\n  k?: number;\n  inputKey?: string;\n}\n\n/**\n * Class that represents a VectorDBQAChain. It extends the `BaseChain`\n * class and implements the `VectorDBQAChainInput` interface. It performs\n * a similarity search using a vector store and combines the search\n * results using a specified combine documents chain.\n */\nexport class VectorDBQAChain extends BaseChain implements VectorDBQAChainInput {\n  static lc_name() {\n    return \"VectorDBQAChain\";\n  }\n\n  k = 4;\n\n  inputKey = \"query\";\n\n  get inputKeys() {\n    return [this.inputKey];\n  }\n\n  get outputKeys() {\n    return this.combineDocumentsChain.outputKeys.concat(\n      this.returnSourceDocuments ? [\"sourceDocuments\"] : []\n    );\n  }\n\n  vectorstore: VectorStoreInterface;\n\n  combineDocumentsChain: BaseChain;\n\n  returnSourceDocuments = false;\n\n  constructor(fields: VectorDBQAChainInput) {\n    super(fields);\n    this.vectorstore = fields.vectorstore;\n    this.combineDocumentsChain = fields.combineDocumentsChain;\n    this.inputKey = fields.inputKey ?? this.inputKey;\n    this.k = fields.k ?? this.k;\n    this.returnSourceDocuments =\n      fields.returnSourceDocuments ?? this.returnSourceDocuments;\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(`Question key ${this.inputKey} not found.`);\n    }\n    const question: string = values[this.inputKey];\n    const docs = await this.vectorstore.similaritySearch(\n      question,\n      this.k,\n      values.filter,\n      runManager?.getChild(\"vectorstore\")\n    );\n    const inputs = { question, input_documents: docs };\n    const result = await this.combineDocumentsChain.call(\n      inputs,\n      runManager?.getChild(\"combine_documents\")\n    );\n    if (this.returnSourceDocuments) {\n      return {\n        ...result,\n        sourceDocuments: docs,\n      };\n    }\n    return result;\n  }\n\n  _chainType() {\n    return \"vector_db_qa\" as const;\n  }\n\n  static async deserialize(\n    data: SerializedVectorDBQAChain,\n    values: LoadValues\n  ) {\n    if (!(\"vectorstore\" in values)) {\n      throw new Error(\n        `Need to pass in a vectorstore to deserialize VectorDBQAChain`\n      );\n    }\n    const { vectorstore } = values;\n    if (!data.combine_documents_chain) {\n      throw new Error(\n        `VectorDBQAChain must have combine_documents_chain in serialized data`\n      );\n    }\n\n    return new VectorDBQAChain({\n      combineDocumentsChain: await BaseChain.deserialize(\n        data.combine_documents_chain\n      ),\n      k: data.k,\n      vectorstore,\n    });\n  }\n\n  serialize(): SerializedVectorDBQAChain {\n    return {\n      _type: this._chainType(),\n      combine_documents_chain: this.combineDocumentsChain.serialize(),\n      k: this.k,\n    };\n  }\n\n  /**\n   * Static method that creates a VectorDBQAChain instance from a\n   * BaseLanguageModel and a vector store. It also accepts optional options\n   * to customize the chain.\n   * @param llm The BaseLanguageModel instance.\n   * @param vectorstore The vector store used for similarity search.\n   * @param options Optional options to customize the chain.\n   * @returns A new instance of VectorDBQAChain.\n   */\n  static fromLLM(\n    llm: BaseLanguageModelInterface,\n    vectorstore: VectorStoreInterface,\n    options?: Partial<\n      Omit<VectorDBQAChainInput, \"combineDocumentsChain\" | \"vectorstore\">\n    >\n  ): VectorDBQAChain {\n    const qaChain = loadQAStuffChain(llm);\n    return new this({\n      vectorstore,\n      combineDocumentsChain: qaChain,\n      ...options,\n    });\n  }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwBA,aAAAA,UAA0C;CAC7E,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI;CAEJ,WAAW;CAEX,IAAI,YAAY;AACd,SAAO,CAAC,KAAK,SAAS;;CAGxB,IAAI,aAAa;AACf,SAAO,KAAK,sBAAsB,WAAW,OAC3C,KAAK,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CACtD;;CAGH;CAEA;CAEA,wBAAwB;CAExB,YAAY,QAA8B;AACxC,QAAM,OAAO;AACb,OAAK,cAAc,OAAO;AAC1B,OAAK,wBAAwB,OAAO;AACpC,OAAK,WAAW,OAAO,YAAY,KAAK;AACxC,OAAK,IAAI,OAAO,KAAK,KAAK;AAC1B,OAAK,wBACH,OAAO,yBAAyB,KAAK;;;CAIzC,MAAM,MACJ,QACA,YACsB;AACtB,MAAI,EAAE,KAAK,YAAY,QACrB,OAAM,IAAI,MAAM,gBAAgB,KAAK,SAAS,aAAa;EAE7D,MAAM,WAAmB,OAAO,KAAK;EACrC,MAAM,OAAO,MAAM,KAAK,YAAY,iBAClC,UACA,KAAK,GACL,OAAO,QACP,YAAY,SAAS,cAAc,CACpC;EACD,MAAM,SAAS;GAAE;GAAU,iBAAiB;GAAM;EAClD,MAAM,SAAS,MAAM,KAAK,sBAAsB,KAC9C,QACA,YAAY,SAAS,oBAAoB,CAC1C;AACD,MAAI,KAAK,sBACP,QAAO;GACL,GAAG;GACH,iBAAiB;GAClB;AAEH,SAAO;;CAGT,aAAa;AACX,SAAO;;CAGT,aAAa,YACX,MACA,QACA;AACA,MAAI,EAAE,iBAAiB,QACrB,OAAM,IAAI,MACR,+DACD;EAEH,MAAM,EAAE,gBAAgB;AACxB,MAAI,CAAC,KAAK,wBACR,OAAM,IAAI,MACR,uEACD;AAGH,SAAO,IAAI,gBAAgB;GACzB,uBAAuB,MAAMA,aAAAA,UAAU,YACrC,KAAK,wBACN;GACD,GAAG,KAAK;GACR;GACD,CAAC;;CAGJ,YAAuC;AACrC,SAAO;GACL,OAAO,KAAK,YAAY;GACxB,yBAAyB,KAAK,sBAAsB,WAAW;GAC/D,GAAG,KAAK;GACT;;;;;;;;;;;CAYH,OAAO,QACL,KACA,aACA,SAGiB;EACjB,MAAM,UAAUC,aAAAA,iBAAiB,IAAI;AACrC,SAAO,IAAI,KAAK;GACd;GACA,uBAAuB;GACvB,GAAG;GACJ,CAAC"}