@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 3.02 kB
Source Map (JSON)
{"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"}