{"version":3,"file":"bm25.cjs","names":["BaseRetriever","BM25","Document"],"sources":["../../src/retrievers/bm25.ts"],"sourcesContent":["import { BaseRetriever, BaseRetrieverInput } from \"@langchain/core/retrievers\";\nimport { Document } from \"@langchain/core/documents\";\n\nimport { BM25 } from \"../utils/@furkantoprak/bm25/BM25.js\";\n\nexport type BM25RetrieverOptions = {\n  docs: Document[];\n  k: number;\n  includeScore?: boolean;\n} & BaseRetrieverInput;\n\n/**\n * A retriever that uses the BM25 algorithm to rank documents based on their\n * similarity to a query. It uses the \"okapibm25\" package for BM25 scoring.\n * The k parameter determines the number of documents to return for each query.\n */\nexport class BM25Retriever extends BaseRetriever {\n  includeScore = false;\n\n  static lc_name() {\n    return \"BM25Retriever\";\n  }\n\n  lc_namespace = [\"langchain\", \"retrievers\", \"bm25_retriever\"];\n\n  static fromDocuments(\n    documents: Document[],\n    options: Omit<BM25RetrieverOptions, \"docs\">\n  ) {\n    return new this({ ...options, docs: documents });\n  }\n\n  docs: Document[];\n\n  k: number;\n\n  constructor(options: BM25RetrieverOptions) {\n    super(options);\n    this.docs = options.docs;\n    this.k = options.k;\n    this.includeScore = options.includeScore ?? this.includeScore;\n  }\n\n  private preprocessFunc(text: string): string[] {\n    return text.toLowerCase().split(/\\s+/);\n  }\n\n  async _getRelevantDocuments(query: string) {\n    const processedQuery = this.preprocessFunc(query);\n    const scoredDocs = BM25<Document>(\n      this.docs.map((d) => ({\n        text: d.pageContent,\n        document: d,\n      })),\n      processedQuery,\n      undefined,\n      (a, b) => b.score - a.score\n    );\n\n    return scoredDocs.slice(0, this.k).map((item) => {\n      if (this.includeScore) {\n        return new Document({\n          ...(item.document.id && { id: item.document.id }),\n          pageContent: item.document.pageContent,\n          metadata: {\n            bm25Score: item.score,\n            ...item.document.metadata,\n          },\n        });\n      } else {\n        return item.document;\n      }\n    });\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,IAAa,gBAAb,cAAmCA,2BAAAA,cAAc;CAC/C,eAAe;CAEf,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAc;EAAiB;CAE5D,OAAO,cACL,WACA,SACA;AACA,SAAO,IAAI,KAAK;GAAE,GAAG;GAAS,MAAM;GAAW,CAAC;;CAGlD;CAEA;CAEA,YAAY,SAA+B;AACzC,QAAM,QAAQ;AACd,OAAK,OAAO,QAAQ;AACpB,OAAK,IAAI,QAAQ;AACjB,OAAK,eAAe,QAAQ,gBAAgB,KAAK;;CAGnD,eAAuB,MAAwB;AAC7C,SAAO,KAAK,aAAa,CAAC,MAAM,MAAM;;CAGxC,MAAM,sBAAsB,OAAe;EACzC,MAAM,iBAAiB,KAAK,eAAe,MAAM;AAWjD,SAVmBC,aAAAA,KACjB,KAAK,KAAK,KAAK,OAAO;GACpB,MAAM,EAAE;GACR,UAAU;GACX,EAAE,EACH,gBACA,KAAA,IACC,GAAG,MAAM,EAAE,QAAQ,EAAE,MACvB,CAEiB,MAAM,GAAG,KAAK,EAAE,CAAC,KAAK,SAAS;AAC/C,OAAI,KAAK,aACP,QAAO,IAAIC,0BAAAA,SAAS;IAClB,GAAI,KAAK,SAAS,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI;IAChD,aAAa,KAAK,SAAS;IAC3B,UAAU;KACR,WAAW,KAAK;KAChB,GAAG,KAAK,SAAS;KAClB;IACF,CAAC;OAEF,QAAO,KAAK;IAEd"}