Bugfix/Missing Filter for VectorStore to Document (#2285)

add filter for vector store to document
This commit is contained in:
Henry Heng
2024-04-29 22:25:40 +01:00
committed by GitHub
parent c4eb75ddde
commit 2b1273ca31
17 changed files with 67 additions and 9 deletions
@@ -1,11 +1,19 @@
import { INodeData } from '../../src'
import { VectorStore } from '@langchain/core/vectorstores'
export const resolveVectorStoreOrRetriever = (nodeData: INodeData, vectorStore: any) => {
export const resolveVectorStoreOrRetriever = (
nodeData: INodeData,
vectorStore: VectorStore,
metadataFilter?: string | object | undefined
) => {
const output = nodeData.outputs?.output as string
const searchType = nodeData.outputs?.searchType as string
const topK = nodeData.inputs?.topK as string
const k = topK ? parseFloat(topK) : 4
// If it is already pre-defined in lc_kwargs, then don't pass it again
const filter = vectorStore?.lc_kwargs?.filter ? undefined : metadataFilter
if (output === 'retriever') {
if ('mmr' === searchType) {
const fetchK = nodeData.inputs?.fetchK as string
@@ -15,6 +23,7 @@ export const resolveVectorStoreOrRetriever = (nodeData: INodeData, vectorStore:
return vectorStore.asRetriever({
searchType: 'mmr',
k: k,
filter,
searchKwargs: {
fetchK: f,
lambda: l
@@ -22,10 +31,11 @@ export const resolveVectorStoreOrRetriever = (nodeData: INodeData, vectorStore:
})
} else {
// "searchType" is "similarity"
return vectorStore.asRetriever(k)
return vectorStore.asRetriever(k, filter)
}
} else if (output === 'vectorStore') {
;(vectorStore as any).k = k
;(vectorStore as any).filter = filter
return vectorStore
}
}