From babe6544a0ba952795d90e25cc9423af06040c6a Mon Sep 17 00:00:00 2001 From: jyong <718720800@qq.com> Date: Tue, 22 Apr 2025 16:18:00 +0800 Subject: [PATCH] check metadata_filtering_conditions could be None in auto mode --- api/core/rag/retrieval/dataset_retrieval.py | 10 ++++++---- .../knowledge_retrieval/knowledge_retrieval_node.py | 9 +++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index 23ea775dec..4869a21e80 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -869,7 +869,9 @@ class DatasetRetrieval: ) ) metadata_condition = MetadataCondition( - logical_operator=metadata_filtering_conditions.logical_operator, # type: ignore + logical_operator=metadata_filtering_conditions.logical_operator + if metadata_filtering_conditions + else "or", # type: ignore conditions=conditions, ) elif metadata_filtering_mode == "manual": @@ -891,10 +893,10 @@ class DatasetRetrieval: else: raise ValueError("Invalid metadata filtering mode") if filters: - if metadata_filtering_conditions.logical_operator == "or": # type: ignore - document_query = document_query.filter(or_(*filters)) - else: + if metadata_filtering_conditions and metadata_filtering_conditions.logical_operator == "and": # type: ignore document_query = document_query.filter(and_(*filters)) + else: + document_query = document_query.filter(or_(*filters)) documents = document_query.all() # group by dataset_id metadata_filter_document_ids = defaultdict(list) if documents else None # type: ignore diff --git a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py index 07a711cc4e..4ec033572c 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -349,7 +349,9 @@ class KnowledgeRetrievalNode(LLMNode): ) ) metadata_condition = MetadataCondition( - logical_operator=node_data.metadata_filtering_conditions.logical_operator, # type: ignore + logical_operator=node_data.metadata_filtering_conditions.logical_operator + if node_data.metadata_filtering_conditions + else "or", # type: ignore conditions=conditions, ) elif node_data.metadata_filtering_mode == "manual": @@ -380,7 +382,10 @@ class KnowledgeRetrievalNode(LLMNode): else: raise ValueError("Invalid metadata filtering mode") if filters: - if node_data.metadata_filtering_conditions.logical_operator == "and": # type: ignore + if ( + node_data.metadata_filtering_conditions + and node_data.metadata_filtering_conditions.logical_operator == "and" + ): # type: ignore document_query = document_query.filter(and_(*filters)) else: document_query = document_query.filter(or_(*filters))