@@ -30,6 +30,44 @@ test("MemoryVectorStore with external ids", async () => {
30
30
] ) ;
31
31
} ) ;
32
32
33
+ test ( "MemoryVectorStore stores and retrieves document IDs" , async ( ) => {
34
+ const embeddings = new SyntheticEmbeddings ( {
35
+ vectorSize : 1536 ,
36
+ } ) ;
37
+ const store = new MemoryVectorStore ( embeddings ) ;
38
+
39
+ const filterFunc = ( doc : DocumentInterface ) : boolean => {
40
+ const { metadata } = doc ;
41
+ if ( metadata . namespace <= 2 ) {
42
+ return true ;
43
+ }
44
+ return false ;
45
+ } ;
46
+
47
+ const retriever = store . asRetriever ( {
48
+ k : 2 ,
49
+ filter : filterFunc ,
50
+ } ) ;
51
+
52
+ expect ( retriever ) . toBeDefined ( ) ;
53
+
54
+ await retriever . addDocuments ( [
55
+ { pageContent : "hello" , metadata : { namespace : 1 } , id : "1" } ,
56
+ { pageContent : "hello" , metadata : { namespace : 2 } , id : "2" } ,
57
+ { pageContent : "hello" , metadata : { namespace : 3 } , id : "3" } ,
58
+ { pageContent : "hello" , metadata : { namespace : 4 } , id : "4" } ,
59
+ ] ) ;
60
+
61
+ const results = await retriever . getRelevantDocuments ( "hello" ) ;
62
+
63
+ expect ( results ) . toHaveLength ( 2 ) ;
64
+
65
+ expect ( results ) . toEqual ( [
66
+ new Document ( { metadata : { namespace : 1 } , pageContent : "hello" , id : "1" } ) ,
67
+ new Document ( { metadata : { namespace : 2 } , pageContent : "hello" , id : "2" } ) ,
68
+ ] ) ;
69
+ } ) ;
70
+
33
71
test ( "MemoryVectorStore as retriever can filter metadata" , async ( ) => {
34
72
const embeddings = new SyntheticEmbeddings ( {
35
73
vectorSize : 1536 ,
0 commit comments