{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/retrievers/document_compressors/index.ts"],"sourcesContent":["import type { DocumentInterface } from \"@langchain/core/documents\";\nimport { BaseDocumentTransformer } from \"@langchain/core/documents\";\nimport { Callbacks } from \"@langchain/core/callbacks/manager\";\n\n/**\n * Base Document Compression class. All compressors should extend this class.\n */\nexport abstract class BaseDocumentCompressor {\n  /**\n   * Abstract method that must be implemented by any class that extends\n   * `BaseDocumentCompressor`. This method takes an array of `Document`\n   * objects and a query string as parameters and returns a Promise that\n   * resolves with an array of compressed `Document` objects.\n   * @param documents An array of `Document` objects to be compressed.\n   * @param query A query string.\n   * @returns A Promise that resolves with an array of compressed `Document` objects.\n   */\n  abstract compressDocuments(\n    documents: DocumentInterface[],\n    query: string,\n    callbacks?: Callbacks\n  ): Promise<DocumentInterface[]>;\n\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  static isBaseDocumentCompressor(x: any): x is BaseDocumentCompressor {\n    return x?.compressDocuments !== undefined;\n  }\n}\n\n/**\n * Document compressor that uses a pipeline of Transformers.\n * @example\n * ```typescript\n * const compressorPipeline = new DocumentCompressorPipeline({\n *   transformers: [\n *     new RecursiveCharacterTextSplitter({\n *       chunkSize: 200,\n *       chunkOverlap: 0,\n *     }),\n *     new EmbeddingsFilter({\n *       embeddings: new OpenAIEmbeddings(),\n *       similarityThreshold: 0.8,\n *       k: 5,\n *     }),\n *   ],\n * });\n * const retriever = new ContextualCompressionRetriever({\n *   baseCompressor: compressorPipeline,\n *   baseRetriever: new TavilySearchAPIRetriever({\n *     includeRawContent: true,\n *   }),\n * });\n * const retrievedDocs = await retriever.invoke(\n *   \"What did the speaker say about Justice Breyer in the 2022 State of the Union?\",\n * );\n * console.log({ retrievedDocs });\n * ```\n */\nexport class DocumentCompressorPipeline extends BaseDocumentCompressor {\n  transformers: (BaseDocumentTransformer | BaseDocumentCompressor)[];\n\n  constructor(fields: {\n    transformers: (BaseDocumentTransformer | BaseDocumentCompressor)[];\n  }) {\n    super();\n    this.transformers = fields.transformers;\n  }\n\n  async compressDocuments(\n    documents: DocumentInterface[],\n    query: string,\n    callbacks?: Callbacks\n  ): Promise<DocumentInterface[]> {\n    let transformedDocuments = documents;\n    for (const transformer of this.transformers) {\n      if (BaseDocumentCompressor.isBaseDocumentCompressor(transformer)) {\n        transformedDocuments = await transformer.compressDocuments(\n          transformedDocuments,\n          query,\n          callbacks\n        );\n      } else {\n        transformedDocuments =\n          await transformer.transformDocuments(transformedDocuments);\n      }\n    }\n    return transformedDocuments;\n  }\n}\n"],"mappings":";;;;;;;;;AAOA,IAAsB,yBAAtB,MAA6C;CAiB3C,OAAO,yBAAyB,GAAqC;AACnE,SAAO,GAAG,sBAAsB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCpC,IAAa,6BAAb,cAAgD,uBAAuB;CACrE;CAEA,YAAY,QAET;AACD,SAAO;AACP,OAAK,eAAe,OAAO;;CAG7B,MAAM,kBACJ,WACA,OACA,WAC8B;EAC9B,IAAI,uBAAuB;AAC3B,OAAK,MAAM,eAAe,KAAK,aAC7B,KAAI,uBAAuB,yBAAyB,YAAY,CAC9D,wBAAuB,MAAM,YAAY,kBACvC,sBACA,OACA,UACD;MAED,wBACE,MAAM,YAAY,mBAAmB,qBAAqB;AAGhE,SAAO"}