Skip to content

Commit a0f6a64

Browse files
laipz8200刘江波
authored and
刘江波
committed
feat(knowledge_retrieval_node): Suppress exceptions thrown by DatasetRetrieval (langgenius#11728)
Signed-off-by: -LAN- <laipz8200@outlook.com>
1 parent f65483d commit a0f6a64

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

api/core/workflow/nodes/base/node.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ def run(self) -> Generator[Union[NodeEvent, "InNodeEvent"], None, None]:
7272
result = self._run()
7373
except Exception as e:
7474
logger.exception(f"Node {self.node_id} failed to run")
75-
result = NodeRunResult(status=WorkflowNodeExecutionStatus.FAILED, error=str(e), error_type="SystemError")
75+
result = NodeRunResult(
76+
status=WorkflowNodeExecutionStatus.FAILED,
77+
error=str(e),
78+
error_type="WorkflowNodeError",
79+
)
7680

7781
if isinstance(result, NodeRunResult):
7882
yield RunCompletedEvent(run_result=result)

api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py

+26-13
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,20 @@ def _run(self) -> NodeRunResult:
7070

7171
except KnowledgeRetrievalNodeError as e:
7272
logger.warning("Error when running knowledge retrieval node")
73-
return NodeRunResult(status=WorkflowNodeExecutionStatus.FAILED, inputs=variables, error=str(e))
73+
return NodeRunResult(
74+
status=WorkflowNodeExecutionStatus.FAILED,
75+
inputs=variables,
76+
error=str(e),
77+
error_type=type(e).__name__,
78+
)
79+
# Temporary handle all exceptions from DatasetRetrieval class here.
80+
except Exception as e:
81+
return NodeRunResult(
82+
status=WorkflowNodeExecutionStatus.FAILED,
83+
inputs=variables,
84+
error=str(e),
85+
error_type=type(e).__name__,
86+
)
7487

7588
def _fetch_dataset_retriever(self, node_data: KnowledgeRetrievalNodeData, query: str) -> list[dict[str, Any]]:
7689
available_datasets = []
@@ -160,18 +173,18 @@ def _fetch_dataset_retriever(self, node_data: KnowledgeRetrievalNodeData, query:
160173
reranking_model = None
161174
weights = None
162175
all_documents = dataset_retrieval.multiple_retrieve(
163-
self.app_id,
164-
self.tenant_id,
165-
self.user_id,
166-
self.user_from.value,
167-
available_datasets,
168-
query,
169-
node_data.multiple_retrieval_config.top_k,
170-
node_data.multiple_retrieval_config.score_threshold,
171-
node_data.multiple_retrieval_config.reranking_mode,
172-
reranking_model,
173-
weights,
174-
node_data.multiple_retrieval_config.reranking_enable,
176+
app_id=self.app_id,
177+
tenant_id=self.tenant_id,
178+
user_id=self.user_id,
179+
user_from=self.user_from.value,
180+
available_datasets=available_datasets,
181+
query=query,
182+
top_k=node_data.multiple_retrieval_config.top_k,
183+
score_threshold=node_data.multiple_retrieval_config.score_threshold,
184+
reranking_mode=node_data.multiple_retrieval_config.reranking_mode,
185+
reranking_model=reranking_model,
186+
weights=weights,
187+
reranking_enable=node_data.multiple_retrieval_config.reranking_enable,
175188
)
176189
dify_documents = [item for item in all_documents if item.provider == "dify"]
177190
external_documents = [item for item in all_documents if item.provider == "external"]

0 commit comments

Comments
 (0)