|
|
|
|
@ -70,7 +70,20 @@ class KnowledgeRetrievalNode(BaseNode[KnowledgeRetrievalNodeData]):
|
|
|
|
|
|
|
|
|
|
except KnowledgeRetrievalNodeError as e:
|
|
|
|
|
logger.warning("Error when running knowledge retrieval node")
|
|
|
|
|
return NodeRunResult(status=WorkflowNodeExecutionStatus.FAILED, inputs=variables, error=str(e))
|
|
|
|
|
return NodeRunResult(
|
|
|
|
|
status=WorkflowNodeExecutionStatus.FAILED,
|
|
|
|
|
inputs=variables,
|
|
|
|
|
error=str(e),
|
|
|
|
|
error_type=type(e).__name__,
|
|
|
|
|
)
|
|
|
|
|
# Temporary handle all exceptions from DatasetRetrieval class here.
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return NodeRunResult(
|
|
|
|
|
status=WorkflowNodeExecutionStatus.FAILED,
|
|
|
|
|
inputs=variables,
|
|
|
|
|
error=str(e),
|
|
|
|
|
error_type=type(e).__name__,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def _fetch_dataset_retriever(self, node_data: KnowledgeRetrievalNodeData, query: str) -> list[dict[str, Any]]:
|
|
|
|
|
available_datasets = []
|
|
|
|
|
@ -160,18 +173,18 @@ class KnowledgeRetrievalNode(BaseNode[KnowledgeRetrievalNodeData]):
|
|
|
|
|
reranking_model = None
|
|
|
|
|
weights = None
|
|
|
|
|
all_documents = dataset_retrieval.multiple_retrieve(
|
|
|
|
|
self.app_id,
|
|
|
|
|
self.tenant_id,
|
|
|
|
|
self.user_id,
|
|
|
|
|
self.user_from.value,
|
|
|
|
|
available_datasets,
|
|
|
|
|
query,
|
|
|
|
|
node_data.multiple_retrieval_config.top_k,
|
|
|
|
|
node_data.multiple_retrieval_config.score_threshold,
|
|
|
|
|
node_data.multiple_retrieval_config.reranking_mode,
|
|
|
|
|
reranking_model,
|
|
|
|
|
weights,
|
|
|
|
|
node_data.multiple_retrieval_config.reranking_enable,
|
|
|
|
|
app_id=self.app_id,
|
|
|
|
|
tenant_id=self.tenant_id,
|
|
|
|
|
user_id=self.user_id,
|
|
|
|
|
user_from=self.user_from.value,
|
|
|
|
|
available_datasets=available_datasets,
|
|
|
|
|
query=query,
|
|
|
|
|
top_k=node_data.multiple_retrieval_config.top_k,
|
|
|
|
|
score_threshold=node_data.multiple_retrieval_config.score_threshold,
|
|
|
|
|
reranking_mode=node_data.multiple_retrieval_config.reranking_mode,
|
|
|
|
|
reranking_model=reranking_model,
|
|
|
|
|
weights=weights,
|
|
|
|
|
reranking_enable=node_data.multiple_retrieval_config.reranking_enable,
|
|
|
|
|
)
|
|
|
|
|
dify_documents = [item for item in all_documents if item.provider == "dify"]
|
|
|
|
|
external_documents = [item for item in all_documents if item.provider == "external"]
|
|
|
|
|
|