Skip to content

Commit 9f96992

Browse files
fix: skip empty metadata filter in RetrieverTool to prevent vector store error (#5976)
* fix: skip empty metadata filter in RetrieverTool to prevent vector store error When a user adds an "Additional Metadata Filter" then removes it, the empty filter object {} was still passed to the vector store, causing Pinecone (and potentially others) to reject it with "You must enter a filter object with at least one key-value pair." Now checks that the resolved filter has at least one key before assigning it. Fixes #4900 Signed-off-by: majiayu000 <1835304752@qq.com> * fix: rename metadatafilter to metadataFilter for camelCase consistency Signed-off-by: majiayu000 <1835304752@qq.com> * Delete packages/components/nodes/tools/RetrieverTool/RetrieverTool.test.ts --------- Signed-off-by: majiayu000 <1835304752@qq.com> Co-authored-by: Henry Heng <henryheng@flowiseai.com>
1 parent cc2a87e commit 9f96992

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

packages/components/nodes/tools/RetrieverTool/RetrieverTool.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,14 @@ class Retriever_Tools implements INode {
197197
if (retrieverToolMetadataFilter) {
198198
const flowObj = flowConfig
199199

200-
const metadatafilter =
200+
const metadataFilter =
201201
typeof retrieverToolMetadataFilter === 'object' ? retrieverToolMetadataFilter : JSON.parse(retrieverToolMetadataFilter)
202-
const newMetadataFilter = resolveFlowObjValue(metadatafilter, flowObj)
202+
const newMetadataFilter = resolveFlowObjValue(metadataFilter, flowObj)
203203

204-
const vectorStore = (retriever as VectorStoreRetriever<any>).vectorStore
205-
vectorStore.filter = newMetadataFilter
204+
if (newMetadataFilter && typeof newMetadataFilter === 'object' && Object.keys(newMetadataFilter).length > 0) {
205+
const vectorStore = (retriever as VectorStoreRetriever<any>).vectorStore
206+
vectorStore.filter = newMetadataFilter
207+
}
206208
}
207209
const docs = await retriever.invoke(input)
208210
const content = docs.map((doc) => doc.pageContent).join('\n\n')

0 commit comments

Comments
 (0)