Skip to content

Commit 033666e

Browse files
authored
Add contextual compression base classes (langchain-ai#917)
* add * create entrypoints
1 parent cc4e165 commit 033666e

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

langchain/scripts/create-entrypoints.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ const entrypoints = {
101101
"retrievers/supabase": "retrievers/supabase",
102102
"retrievers/metal": "retrievers/metal",
103103
"retrievers/databerry": "retrievers/databerry",
104+
"retrievers/contextual_compression": "retrievers/contextual_compression",
105+
"retrievers/document_compressors": "retrievers/document_compressors/index",
104106
// cache
105107
cache: "cache/index",
106108
"cache/redis": "cache/redis",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { BaseDocumentCompressor } from "./document_compressors/index.js";
2+
import { Document } from "../document.js";
3+
import { BaseRetriever } from "../schema/index.js";
4+
5+
export interface ContextualCompressionRetrieverArgs {
6+
baseCompressor: BaseDocumentCompressor;
7+
baseRetriever: BaseRetriever;
8+
}
9+
10+
export class ContextualCompressionRetriever extends BaseRetriever {
11+
baseCompressor: BaseDocumentCompressor;
12+
13+
baseRetriever: BaseRetriever;
14+
15+
constructor({
16+
baseCompressor,
17+
baseRetriever,
18+
}: ContextualCompressionRetrieverArgs) {
19+
super();
20+
21+
this.baseCompressor = baseCompressor;
22+
this.baseRetriever = baseRetriever;
23+
}
24+
25+
async getRelevantDocuments(query: string): Promise<Document[]> {
26+
const docs = await this.baseRetriever.getRelevantDocuments(query);
27+
const compressedDocs = await this.baseCompressor.compressDocuments(
28+
docs,
29+
query
30+
);
31+
return compressedDocs;
32+
}
33+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Document } from "../../document.js";
2+
3+
/**
4+
* Base Document Compression class. All compressors should extend this class.
5+
*/
6+
export abstract class BaseDocumentCompressor {
7+
abstract compressDocuments(
8+
documents: Document[],
9+
query: string
10+
): Promise<Document[]>;
11+
}

0 commit comments

Comments
 (0)