@@ -32,7 +32,7 @@ class Qdrant_VectorStores implements INode {
32
32
constructor ( ) {
33
33
this . label = 'Qdrant'
34
34
this . name = 'qdrant'
35
- this . version = 2 .0
35
+ this . version = 3 .0
36
36
this . type = 'Qdrant'
37
37
this . icon = 'qdrant.png'
38
38
this . category = 'Vector Stores'
@@ -86,6 +86,15 @@ class Qdrant_VectorStores implements INode {
86
86
default : 1536 ,
87
87
additionalParams : true
88
88
} ,
89
+ {
90
+ label : 'Upsert Batch Size' ,
91
+ name : 'batchSize' ,
92
+ type : 'number' ,
93
+ step : 1 ,
94
+ description : 'Upsert in batches of size N' ,
95
+ additionalParams : true ,
96
+ optional : true
97
+ } ,
89
98
{
90
99
label : 'Similarity' ,
91
100
name : 'qdrantSimilarity' ,
@@ -159,6 +168,7 @@ class Qdrant_VectorStores implements INode {
159
168
const qdrantSimilarity = nodeData . inputs ?. qdrantSimilarity
160
169
const qdrantVectorDimension = nodeData . inputs ?. qdrantVectorDimension
161
170
const recordManager = nodeData . inputs ?. recordManager
171
+ const _batchSize = nodeData . inputs ?. batchSize
162
172
163
173
const credentialData = await getCredentialData ( nodeData . credential ?? '' , options )
164
174
const qdrantApiKey = getCredentialParam ( 'qdrantApiKey' , credentialData , nodeData )
@@ -218,10 +228,21 @@ class Qdrant_VectorStores implements INode {
218
228
} ) )
219
229
220
230
try {
221
- await client . upsert ( collectionName , {
222
- wait : true ,
223
- points
224
- } )
231
+ if ( _batchSize ) {
232
+ const batchSize = parseInt ( _batchSize , 10 )
233
+ for ( let i = 0 ; i < points . length ; i += batchSize ) {
234
+ const batchPoints = points . slice ( i , i + batchSize )
235
+ await client . upsert ( collectionName , {
236
+ wait : true ,
237
+ points : batchPoints
238
+ } )
239
+ }
240
+ } else {
241
+ await client . upsert ( collectionName , {
242
+ wait : true ,
243
+ points
244
+ } )
245
+ }
225
246
} catch ( e : any ) {
226
247
const error = new Error ( `${ e ?. status ?? 'Undefined error code' } ${ e ?. message } : ${ e ?. data ?. status ?. error } ` )
227
248
throw error
@@ -257,7 +278,15 @@ class Qdrant_VectorStores implements INode {
257
278
258
279
return res
259
280
} else {
260
- await QdrantVectorStore . fromDocuments ( finalDocs , embeddings , dbConfig )
281
+ if ( _batchSize ) {
282
+ const batchSize = parseInt ( _batchSize , 10 )
283
+ for ( let i = 0 ; i < finalDocs . length ; i += batchSize ) {
284
+ const batch = finalDocs . slice ( i , i + batchSize )
285
+ await QdrantVectorStore . fromDocuments ( batch , embeddings , dbConfig )
286
+ }
287
+ } else {
288
+ await QdrantVectorStore . fromDocuments ( finalDocs , embeddings , dbConfig )
289
+ }
261
290
return { numAdded : finalDocs . length , addedDocs : finalDocs }
262
291
}
263
292
} catch ( e ) {
@@ -325,6 +354,9 @@ class Qdrant_VectorStores implements INode {
325
354
return retriever
326
355
} else if ( output === 'vectorStore' ) {
327
356
; ( vectorStore as any ) . k = k
357
+ if ( queryFilter ) {
358
+ ; ( vectorStore as any ) . filter = retrieverConfig . filter
359
+ }
328
360
return vectorStore
329
361
}
330
362
return vectorStore
0 commit comments