diff --git a/apps/application/flow/step_node/data_source_local_node/i_data_source_local_node.py b/apps/application/flow/step_node/data_source_local_node/i_data_source_local_node.py index beba58232..856369d54 100644 --- a/apps/application/flow/step_node/data_source_local_node/i_data_source_local_node.py +++ b/apps/application/flow/step_node/data_source_local_node/i_data_source_local_node.py @@ -16,9 +16,9 @@ from application.flow.i_step_node import INode, NodeResult class DataSourceLocalNodeParamsSerializer(serializers.Serializer): - file_format = serializers.ListField(child=serializers.CharField(label=('')), label='') - max_file_number = serializers.IntegerField(required=True, label=_("Number of uploaded files")) - file_max_size = serializers.IntegerField(required=True, label=_("Upload file size")) + file_type_list = serializers.ListField(child=serializers.CharField(label=('')), label='') + file_size_limit = serializers.IntegerField(required=True, label=_("Number of uploaded files")) + file_count_limit = serializers.IntegerField(required=True, label=_("Upload file size")) class IDataSourceLocalNode(INode): @@ -26,7 +26,7 @@ class IDataSourceLocalNode(INode): @staticmethod @abstractmethod - def get_form_class(): + def get_form_list(node): pass def get_node_params_serializer_class(self) -> Type[serializers.Serializer]: diff --git a/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py b/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py index 7dd9b810b..d64fdd861 100644 --- a/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py +++ b/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py @@ -21,8 +21,18 @@ class BaseDataSourceLocalNode(IDataSourceLocalNode): pass @staticmethod - def get_form_class(): - return BaseDataSourceLocalNodeForm + def get_form_list(node): + node_data = node.get('properties').get('node_data') + return [{ + 'field': 'file_list', + 'input_type': 'LocalFileUpload', + 'attrs': { + 'file_count_limit': node_data.get('file_count_limit') or 10, + 'file_size_limit': node_data.get('file_size_limit') or 100, + 'file_type_list': node_data.get('file_type_list'), + }, + 'label': '', + }] def execute(self, file_format, max_file_number, file_max_size, **kwargs) -> NodeResult: pass diff --git a/apps/application/flow/step_node/data_source_web_node/i_data_source_web_node.py b/apps/application/flow/step_node/data_source_web_node/i_data_source_web_node.py index da97cfb9a..f5e210a8e 100644 --- a/apps/application/flow/step_node/data_source_web_node/i_data_source_web_node.py +++ b/apps/application/flow/step_node/data_source_web_node/i_data_source_web_node.py @@ -18,7 +18,7 @@ class IDataSourceWebNode(INode): @staticmethod @abstractmethod - def get_form_class(): + def get_form_list(node): pass def _run(self): diff --git a/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py b/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py index e015058e0..518e2061e 100644 --- a/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py +++ b/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py @@ -22,8 +22,8 @@ class BaseDataSourceWebNode(IDataSourceWebNode): pass @staticmethod - def get_form_class(): - return BaseDataSourceWebNodeForm + def get_form_list(node): + return BaseDataSourceWebNodeForm().to_form_list() def execute(self, **kwargs) -> NodeResult: - pass \ No newline at end of file + pass diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index d8e347dc5..420823db6 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -31,7 +31,7 @@ from common.utils.fork import Fork, ChildLink from common.utils.logger import maxkb_logger from common.utils.split_model import get_split_model from knowledge.models import Knowledge, KnowledgeScope, KnowledgeType, Document, Paragraph, Problem, \ - ProblemParagraphMapping, TaskType, State, SearchMode, KnowledgeFolder, File, Tag + ProblemParagraphMapping, TaskType, State, SearchMode, KnowledgeFolder, File, Tag, KnowledgeWorkflow from knowledge.serializers.common import ProblemParagraphManage, drop_knowledge_index, \ get_embedding_model_id_by_knowledge_id, MetaSerializer, \ GenerateRelatedSerializer, get_embedding_model_by_knowledge_id, list_paragraph, write_image, zip_dir @@ -350,7 +350,7 @@ class KnowledgeSerializer(serializers.Serializer): workflow = k.work_flow return { **knowledge_dict, - 'workflow': workflow, + 'work_flow': workflow, 'meta': json.loads(knowledge_dict.get('meta', '{}')), 'application_id_list': list(filter( lambda application_id: all_application_list.__contains__(application_id), @@ -413,7 +413,15 @@ class KnowledgeSerializer(serializers.Serializer): application_id=application_id, knowledge_id=self.data.get('knowledge_id') ) for application_id in application_id_list ]) if len(application_id_list) > 0 else None - + if instance.get("work_flow"): + QuerySet(KnowledgeWorkflow).update_or_create(knowledge_id=self.data.get("knowledge_id"), + create_defaults={'id': uuid.uuid7(), + 'knowledge_id': self.data.get("knowledge_id"), + "workspace_id": self.data.get('workspace_id'), + 'work_flow': instance.get('work_flow', {}), }, + defaults={ + 'work_flow': instance.get('work_flow') + }) knowledge.save() if select_one: return self.one() diff --git a/apps/knowledge/serializers/knowledge_workflow.py b/apps/knowledge/serializers/knowledge_workflow.py index 2473d3868..f449cc59d 100644 --- a/apps/knowledge/serializers/knowledge_workflow.py +++ b/apps/knowledge/serializers/knowledge_workflow.py @@ -27,12 +27,13 @@ class KnowledgeWorkflowSerializer(serializers.Serializer): class Form(serializers.Serializer): type = serializers.CharField(required=True, label=_('type')) id = serializers.CharField(required=True, label=_('type')) + node = serializers.DictField(required=True, label="") def get_form_list(self): self.is_valid(raise_exception=True) if self.data.get('type') == 'local': node = get_node(self.data.get('id')) - return node.get_form_class()().to_form_list() + return node.get_form_list(self.data.get("node")) elif self.data.get('type') == 'tool': tool = QuerySet(Tool).filter(id=self.data.get("id")).first() # todo 调用工具数据源的函数获取表单列表 diff --git a/apps/knowledge/views/knowledge_workflow.py b/apps/knowledge/views/knowledge_workflow.py index 4d6bfa9c0..7f902b135 100644 --- a/apps/knowledge/views/knowledge_workflow.py +++ b/apps/knowledge/views/knowledge_workflow.py @@ -18,8 +18,9 @@ from knowledge.serializers.knowledge_workflow import KnowledgeWorkflowSerializer class KnowledgeWorkflowFormView(APIView): authentication_classes = [TokenAuth] - def get(self, request: Request, workspace_id: str, knowledge_id: str, type: str, id: str): - return result.success(KnowledgeWorkflowSerializer.Form(data={'type': type, 'id': id}).get_form_list()) + def post(self, request: Request, workspace_id: str, knowledge_id: str, type: str, id: str): + return result.success(KnowledgeWorkflowSerializer.Form( + data={'type': type, 'id': id, 'node': request.data.get('node')}).get_form_list()) class KnowledgeWorkflowView(APIView): diff --git a/ui/src/api/knowledge/knowledge.ts b/ui/src/api/knowledge/knowledge.ts index 7ebbc6f0c..4704afe9c 100644 --- a/ui/src/api/knowledge/knowledge.ts +++ b/ui/src/api/knowledge/knowledge.ts @@ -319,9 +319,16 @@ const getKnowledgeWorkflowFormList: ( knowledge_id: string, type: 'loacl' | 'tool', id: string, + node: any, loading?: Ref, -) => Promise> = (knowledge_id: string, type: 'loacl' | 'tool', id: string, loading) => { - return get(`${prefix.value}/${knowledge_id}/form_list/${type}/${id}`, null, loading) +) => Promise> = ( + knowledge_id: string, + type: 'loacl' | 'tool', + id: string, + node, + loading, +) => { + return post(`${prefix.value}/${knowledge_id}/form_list/${type}/${id}`, { node }, {}, loading) } export default { diff --git a/ui/src/components/dynamics-form/Demo.vue b/ui/src/components/dynamics-form/Demo.vue index 0075f9f01..5e631f3de 100644 --- a/ui/src/components/dynamics-form/Demo.vue +++ b/ui/src/components/dynamics-form/Demo.vue @@ -22,6 +22,16 @@ import { ref } from 'vue' import type { Dict } from '@/api/type/common' const damo_data: Array = [ + { + field: 'aa', + input_type: 'LocalFileUpload', + attrs: { + file_count_limit: 10, + file_size_limit: 10, + file_type_list: ['TXT'], + }, + label: '', + }, { field: 'name', input_type: 'PasswordInput', diff --git a/ui/src/components/dynamics-form/items/upload/LocalFileUpload.vue b/ui/src/components/dynamics-form/items/upload/LocalFileUpload.vue new file mode 100644 index 000000000..2e92fa9ec --- /dev/null +++ b/ui/src/components/dynamics-form/items/upload/LocalFileUpload.vue @@ -0,0 +1,149 @@ + + + diff --git a/ui/src/views/knowledge-workflow/component/Debug.vue b/ui/src/views/knowledge-workflow/component/Debug.vue index bd6d69c40..a3c1c395d 100644 --- a/ui/src/views/knowledge-workflow/component/Debug.vue +++ b/ui/src/views/knowledge-workflow/component/Debug.vue @@ -1,7 +1,8 @@