fix: 修复【应用编排】没有权限的知识库,名称是空白的 (#691)

This commit is contained in:
shaohuzhang1 2024-07-03 11:46:37 +08:00 committed by GitHub
parent 7701238947
commit 4ca4d2fa84
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 42 additions and 1 deletions

View File

@ -60,6 +60,10 @@ class Flow:
start_node_list = [node for node in self.nodes if node.id == 'start-node'] start_node_list = [node for node in self.nodes if node.id == 'start-node']
return start_node_list[0] return start_node_list[0]
def get_search_node(self):
return [node for node in self.nodes if node.type == 'search-dataset-node']
def is_valid(self): def is_valid(self):
""" """
校验工作流数据 校验工作流数据

View File

@ -12,7 +12,7 @@ import os
import re import re
import uuid import uuid
from functools import reduce from functools import reduce
from typing import Dict from typing import Dict, List
from django.contrib.postgres.fields import ArrayField from django.contrib.postgres.fields import ArrayField
from django.core import cache, validators from django.core import cache, validators
@ -548,6 +548,8 @@ class ApplicationSerializer(serializers.Serializer):
application.name = node_data.get('name') application.name = node_data.get('name')
application.desc = node_data.get('desc') application.desc = node_data.get('desc')
application.prologue = node_data.get('prologue') application.prologue = node_data.get('prologue')
dataset_list = self.list_dataset(with_valid=False)
self.update_reverse_search_node(work_flow, [str(dataset.get('id')) for dataset in dataset_list])
application.work_flow = work_flow application.work_flow = work_flow
application.save() application.save()
work_flow_version = WorkFlowVersion(work_flow=work_flow, application=application) work_flow_version = WorkFlowVersion(work_flow=work_flow, application=application)
@ -565,9 +567,38 @@ class ApplicationSerializer(serializers.Serializer):
dataset_id_list = [d.get('id') for d in dataset_id_list = [d.get('id') for d in
list(filter(lambda row: mapping_dataset_id_list.__contains__(row.get('id')), list(filter(lambda row: mapping_dataset_id_list.__contains__(row.get('id')),
dataset_list))] dataset_list))]
self.update_search_node(application.work_flow, [str(dataset.get('id')) for dataset in dataset_list])
return {**ApplicationSerializer.Query.reset_application(ApplicationSerializerModel(application).data), return {**ApplicationSerializer.Query.reset_application(ApplicationSerializerModel(application).data),
'dataset_id_list': dataset_id_list} 'dataset_id_list': dataset_id_list}
def get_search_node(self, work_flow):
return [node for node in work_flow.get('nodes', []) if node.get('type', '') == 'search-dataset-node']
def update_search_node(self, work_flow, user_dataset_id_list: List):
search_node_list = self.get_search_node(work_flow)
for search_node in search_node_list:
node_data = search_node.get('properties', {}).get('node_data', {})
dataset_id_list = node_data.get('dataset_id_list', [])
node_data['source_dataset_id_list'] = dataset_id_list
node_data['dataset_id_list'] = [dataset_id for dataset_id in dataset_id_list if
user_dataset_id_list.__contains__(dataset_id)]
def update_reverse_search_node(self, work_flow, user_dataset_id_list: List):
search_node_list = self.get_search_node(work_flow)
for search_node in search_node_list:
node_data = search_node.get('properties', {}).get('node_data', {})
dataset_id_list = node_data.get('dataset_id_list', [])
for dataset_id in dataset_id_list:
if not user_dataset_id_list.__contains__(dataset_id):
raise AppApiException(500, f"未知的知识库id${dataset_id},无法关联")
source_dataset_id_list = node_data.get('source_dataset_id_list', [])
source_dataset_id_list = [source_dataset_id for source_dataset_id in source_dataset_id_list if
not user_dataset_id_list.__contains__(source_dataset_id)]
source_dataset_id_list = list({*source_dataset_id_list, *dataset_id_list})
node_data['source_dataset_id_list'] = []
node_data['dataset_id_list'] = source_dataset_id_list
def profile(self, with_valid=True): def profile(self, with_valid=True):
if with_valid: if with_valid:
self.is_valid() self.is_valid()
@ -596,6 +627,12 @@ class ApplicationSerializer(serializers.Serializer):
user_id=application.user_id).first() user_id=application.user_id).first()
if model is None: if model is None:
raise AppApiException(500, "模型不存在") raise AppApiException(500, "模型不存在")
if 'work_flow' in instance:
# 当前用户可修改关联的知识库列表
application_dataset_id_list = [str(dataset_dict.get('id')) for dataset_dict in
self.list_dataset(with_valid=False)]
self.update_reverse_search_node(instance.get('work_flow'), application_dataset_id_list)
update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status', update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status',
'dataset_setting', 'model_setting', 'problem_optimization', 'dataset_setting', 'model_setting', 'problem_optimization',
'api_key_is_active', 'icon', 'work_flow'] 'api_key_is_active', 'icon', 'work_flow']