diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index 2fe46197f7..d48da0f941 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -900,7 +900,10 @@ class DatasetRetrieval: return str(inputs.get(key, f"{{{{{key}}}}}")) pattern = re.compile(r"\{\{(\w+)\}\}") - return pattern.sub(replacer, text) + output = pattern.sub(replacer, text) + if isinstance(output, str): + output = re.sub(r"[\r\n\t]+", " ", output).strip() + return output def _automatic_metadata_filter_func( self, dataset_ids: list, query: str, tenant_id: str, user_id: str, metadata_model_config: ModelConfig 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 5643e37ce0..bb825e7d42 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -1,5 +1,6 @@ import json import logging +import re import time from collections import defaultdict from collections.abc import Mapping, Sequence @@ -360,8 +361,13 @@ class KnowledgeRetrievalNode(LLMNode): if isinstance(expected_value, str): expected_value = self.graph_runtime_state.variable_pool.convert_template( expected_value - ).text - + ).value[0] + if expected_value.value_type == "number": + expected_value = expected_value.value + elif expected_value.value_type == "string": + expected_value = re.sub(r"[\r\n\t]+", " ", expected_value.text).strip() + else: + raise ValueError("Invalid expected metadata value type") filters = self._process_metadata_filter_func( condition.comparison_operator, metadata_name, expected_value, filters )