diff --git a/apps/application/flow/step_node/__init__.py b/apps/application/flow/step_node/__init__.py index ffb0c7828..6a14e0fd6 100644 --- a/apps/application/flow/step_node/__init__.py +++ b/apps/application/flow/step_node/__init__.py @@ -9,6 +9,7 @@ from .ai_chat_step_node import * from .application_node import BaseApplicationNode from .condition_node import * +from .data_source_local_node.impl.base_data_source_local_node import BaseDataSourceLocalNode from .direct_reply_node import * from .document_extract_node import * from .form_node import * @@ -46,7 +47,8 @@ node_list = [BaseStartStepNode, BaseChatNode, BaseSearchKnowledgeNode, BaseSearc BaseVideoUnderstandNode, BaseIntentNode, BaseLoopNode, BaseLoopStartStepNode, BaseLoopContinueNode, - BaseLoopBreakNode, BaseVariableSplittingNode, BaseParameterExtractionNode, BaseVariableAggregationNode] + BaseLoopBreakNode, BaseVariableSplittingNode, BaseParameterExtractionNode, BaseVariableAggregationNode, + BaseDataSourceLocalNode] def get_node(node_type): 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 ec06f36d5..beba58232 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,7 +16,7 @@ from application.flow.i_step_node import INode, NodeResult class DataSourceLocalNodeParamsSerializer(serializers.Serializer): - file_format = serializers.ListField(child=serializers.CharField) + 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")) @@ -24,8 +24,9 @@ class DataSourceLocalNodeParamsSerializer(serializers.Serializer): class IDataSourceLocalNode(INode): type = 'data-source-local-node' + @staticmethod @abstractmethod - def get_form_class(self): + def get_form_class(): 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 515c0134c..0e501a111 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 @@ -20,7 +20,8 @@ class BaseDataSourceLocalNode(IDataSourceLocalNode): def save_context(self, details, workflow_manage): pass - def get_form_class(self): + @staticmethod + def get_form_class(): return BaseDataSourceLocalNodeForm() def execute(self, file_format, max_file_number, file_max_size, **kwargs) -> NodeResult: diff --git a/apps/knowledge/serializers/knowledge_workflow.py b/apps/knowledge/serializers/knowledge_workflow.py index 2473d3868..73624b08c 100644 --- a/apps/knowledge/serializers/knowledge_workflow.py +++ b/apps/knowledge/serializers/knowledge_workflow.py @@ -32,7 +32,7 @@ class KnowledgeWorkflowSerializer(serializers.Serializer): 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_class().to_form_list() elif self.data.get('type') == 'tool': tool = QuerySet(Tool).filter(id=self.data.get("id")).first() # todo 调用工具数据源的函数获取表单列表 diff --git a/apps/knowledge/urls.py b/apps/knowledge/urls.py index 1ff53a9cf..a4e686445 100644 --- a/apps/knowledge/urls.py +++ b/apps/knowledge/urls.py @@ -69,5 +69,6 @@ urlpatterns = [ path('workspace//knowledge//problem//', views.ProblemView.Page.as_view()), path('workspace//knowledge//document//', views.DocumentView.Page.as_view()), path('workspace//knowledge//', views.KnowledgeView.Page.as_view()), + path('workspace//knowledge//form_list//', views.KnowledgeWorkflowFormView.as_view()), ] diff --git a/apps/knowledge/views/knowledge_workflow.py b/apps/knowledge/views/knowledge_workflow.py index 15d7b1166..4d6bfa9c0 100644 --- a/apps/knowledge/views/knowledge_workflow.py +++ b/apps/knowledge/views/knowledge_workflow.py @@ -18,8 +18,8 @@ from knowledge.serializers.knowledge_workflow import KnowledgeWorkflowSerializer class KnowledgeWorkflowFormView(APIView): authentication_classes = [TokenAuth] - def get(self): - return result.success(KnowledgeWorkflowSerializer.Form().get_form_list()) + 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()) class KnowledgeWorkflowView(APIView): diff --git a/ui/src/api/knowledge/knowledge.ts b/ui/src/api/knowledge/knowledge.ts index d36f9b037..7ebbc6f0c 100644 --- a/ui/src/api/knowledge/knowledge.ts +++ b/ui/src/api/knowledge/knowledge.ts @@ -315,6 +315,14 @@ const delMulTag: ( ) => Promise> = (knowledge_id, tags, loading) => { return put(`${prefix.value}/${knowledge_id}/tags/batch_delete`, tags, null, loading) } +const getKnowledgeWorkflowFormList: ( + knowledge_id: string, + type: 'loacl' | 'tool', + id: string, + loading?: Ref, +) => Promise> = (knowledge_id: string, type: 'loacl' | 'tool', id: string, loading) => { + return get(`${prefix.value}/${knowledge_id}/form_list/${type}/${id}`, null, loading) +} export default { getKnowledgeList, @@ -340,4 +348,5 @@ export default { delTag, delMulTag, createWorkflowKnowledge, + getKnowledgeWorkflowFormList, } diff --git a/ui/src/views/knowledge-workflow/component/Debug.vue b/ui/src/views/knowledge-workflow/component/Debug.vue new file mode 100644 index 000000000..bd6d69c40 --- /dev/null +++ b/ui/src/views/knowledge-workflow/component/Debug.vue @@ -0,0 +1,29 @@ + + + diff --git a/ui/src/views/knowledge-workflow/component/action/index.vue b/ui/src/views/knowledge-workflow/component/action/index.vue index 66c771590..40059a3ce 100644 --- a/ui/src/views/knowledge-workflow/component/action/index.vue +++ b/ui/src/views/knowledge-workflow/component/action/index.vue @@ -1,11 +1,78 @@ diff --git a/ui/src/views/knowledge-workflow/index.vue b/ui/src/views/knowledge-workflow/index.vue index d808df5d2..9dfc74597 100644 --- a/ui/src/views/knowledge-workflow/index.vue +++ b/ui/src/views/knowledge-workflow/index.vue @@ -125,11 +125,9 @@ -
- -
+ { const isDefaultTheme = computed(() => { return theme.isDefaultTheme() }) +const DebugRef = ref>() let interval: any const workflowRef = ref() @@ -393,8 +393,8 @@ const clickShowDebug = () => { ...workflow.get_base_node()?.properties.node_data, work_flow: getGraphData(), } - - showDebug.value = true + console.log('sss', DebugRef.value) + DebugRef.value?.open(graphData) } catch (e: any) { console.log(e) MsgError(e.toString()) diff --git a/ui/src/workflow/common/data.ts b/ui/src/workflow/common/data.ts index 68b4734a4..41975985c 100644 --- a/ui/src/workflow/common/data.ts +++ b/ui/src/workflow/common/data.ts @@ -81,7 +81,6 @@ export const knowledgeBaseNode = { }, } export const dataSourceLocalNode = { - id: WorkflowType.DataSourceLocalNode, type: WorkflowType.DataSourceLocalNode, x: 360, y: 2761.3875,