mirror of https://github.com/langgenius/dify.git
fix(api): enhance data handling in RagPipelineDslService to filter credentials (#25926)
This commit is contained in:
parent
cd90b2ca9e
commit
bb01c31f30
|
|
@ -118,12 +118,14 @@ class RagPipelineExportApi(Resource):
|
||||||
|
|
||||||
# Add include_secret params
|
# Add include_secret params
|
||||||
parser = reqparse.RequestParser()
|
parser = reqparse.RequestParser()
|
||||||
parser.add_argument("include_secret", type=bool, default=False, location="args")
|
parser.add_argument("include_secret", type=str, default="false", location="args")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
with Session(db.engine) as session:
|
with Session(db.engine) as session:
|
||||||
export_service = RagPipelineDslService(session)
|
export_service = RagPipelineDslService(session)
|
||||||
result = export_service.export_rag_pipeline_dsl(pipeline=pipeline, include_secret=args["include_secret"])
|
result = export_service.export_rag_pipeline_dsl(
|
||||||
|
pipeline=pipeline, include_secret=args["include_secret"] == "true"
|
||||||
|
)
|
||||||
|
|
||||||
return {"data": result}, 200
|
return {"data": result}, 200
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -685,12 +685,24 @@ class RagPipelineDslService:
|
||||||
|
|
||||||
workflow_dict = workflow.to_dict(include_secret=include_secret)
|
workflow_dict = workflow.to_dict(include_secret=include_secret)
|
||||||
for node in workflow_dict.get("graph", {}).get("nodes", []):
|
for node in workflow_dict.get("graph", {}).get("nodes", []):
|
||||||
if node.get("data", {}).get("type", "") == NodeType.KNOWLEDGE_RETRIEVAL.value:
|
node_data = node.get("data", {})
|
||||||
dataset_ids = node["data"].get("dataset_ids", [])
|
if not node_data:
|
||||||
|
continue
|
||||||
|
data_type = node_data.get("type", "")
|
||||||
|
if data_type == NodeType.KNOWLEDGE_RETRIEVAL.value:
|
||||||
|
dataset_ids = node_data.get("dataset_ids", [])
|
||||||
node["data"]["dataset_ids"] = [
|
node["data"]["dataset_ids"] = [
|
||||||
self.encrypt_dataset_id(dataset_id=dataset_id, tenant_id=pipeline.tenant_id)
|
self.encrypt_dataset_id(dataset_id=dataset_id, tenant_id=pipeline.tenant_id)
|
||||||
for dataset_id in dataset_ids
|
for dataset_id in dataset_ids
|
||||||
]
|
]
|
||||||
|
# filter credential id from tool node
|
||||||
|
if not include_secret and data_type == NodeType.TOOL.value:
|
||||||
|
node_data.pop("credential_id", None)
|
||||||
|
# filter credential id from agent node
|
||||||
|
if not include_secret and data_type == NodeType.AGENT.value:
|
||||||
|
for tool in node_data.get("agent_parameters", {}).get("tools", {}).get("value", []):
|
||||||
|
tool.pop("credential_id", None)
|
||||||
|
|
||||||
export_data["workflow"] = workflow_dict
|
export_data["workflow"] = workflow_dict
|
||||||
dependencies = self._extract_dependencies_from_workflow(workflow)
|
dependencies = self._extract_dependencies_from_workflow(workflow)
|
||||||
export_data["dependencies"] = [
|
export_data["dependencies"] = [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue