UNPKG

@langchain/community

Version:
1 lines • 3.19 kB
{"version":3,"file":"bm25.cjs","names":["BaseRetriever","documents: Document[]","options: Omit<BM25RetrieverOptions, \"docs\">","options: BM25RetrieverOptions","text: string","query: string","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,0CAAc;CAC/C,eAAe;CAEf,OAAO,UAAU;AACf,SAAO;CACR;CAED,eAAe;EAAC;EAAa;EAAc;CAAiB;CAE5D,OAAO,cACLC,WACAC,SACA;AACA,SAAO,IAAI,KAAK;GAAE,GAAG;GAAS,MAAM;EAAW;CAChD;CAED;CAEA;CAEA,YAAYC,SAA+B;EACzC,MAAM,QAAQ;EACd,KAAK,OAAO,QAAQ;EACpB,KAAK,IAAI,QAAQ;EACjB,KAAK,eAAe,QAAQ,gBAAgB,KAAK;CAClD;CAED,AAAQ,eAAeC,MAAwB;AAC7C,SAAO,KAAK,aAAa,CAAC,MAAM,MAAM;CACvC;CAED,MAAM,sBAAsBC,OAAe;EACzC,MAAM,iBAAiB,KAAK,eAAe,MAAM;EACjD,MAAM,aAAaC,kBACjB,KAAK,KAAK,IAAI,CAAC,OAAO;GACpB,MAAM,EAAE;GACR,UAAU;EACX,GAAE,EACH,gBACA,QACA,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,MACvB;AAED,SAAO,WAAW,MAAM,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS;AAC/C,OAAI,KAAK,aACP,QAAO,IAAIC,oCAAS;IAClB,GAAI,KAAK,SAAS,MAAM,EAAE,IAAI,KAAK,SAAS,GAAI;IAChD,aAAa,KAAK,SAAS;IAC3B,UAAU;KACR,WAAW,KAAK;KAChB,GAAG,KAAK,SAAS;IAClB;GACF;OAED,QAAO,KAAK;EAEf,EAAC;CACH;AACF"}