mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 18:32:48 +00:00
* feat: init knowledge workflow * feat: add knowledge workflow and version models, serializers, and API views * feat: knowledge workflow * feat: knowledge workflow * feat: add KnowledgeWorkflowModelSerializer and Operate class for workflow management * fix: route * feat: knowledge workflow * feat: Knowledge workflow permission * feat: knowledge workflow * feat: knowledge workflow * feat: knowledge workflow * feat: knowledge workflow * feat: Data source web node * fix: Back route * feat: knowledge workflow * feat: knowledge workflow * feat: Knowledge write node * feat: add Data Source tool functionality and localization * feat: add Data Source tool functionality and localization * feat: knowledge workflow * feat: knowledge workflow * fix: simplify export tool permission check in ToolListContainer.vue * fix: simplify export condition in ToolResourceIndex.vue * fix: simplify condition for copying tool in ToolListContainer * feat: knowledge workflow * fix: Upload local files and add output fields * feat: Knowledge write * feat: add Document Split Node functionality and localization * feat: add Document Split Node functionality and localization * feat: Knowledge write * feat: enhance Document Split Node with result processing and problem list generation * fix: Allow problem be blank * feat: enhance Document Split Node with result processing and problem list generation * feat: tool datasource * fix: Optimization of knowledge base workflow execution logic * refactor: streamline image handling by updating application and knowledge ID management * refactor: streamline image handling by updating application and knowledge ID management * feat: extend support modes in variable aggregation node to include knowledge workflows * feat: Chunks stored * refactor: simplify file handling in document extraction by removing unnecessary byte conversion and enhancing file saving logic * refactor: update file ID assignment in document extraction to use provided metadata * feat: Workflow menu that distinguishes between applications and knowledge bases * refactor: update file ID assignment in document extraction to use provided metadata * fix: Add workspace ID as workflow execution parameter * feat: add code template for Data Source tool form functionality * refactor: remove unused sys import and improve module handling * feat: Execution details support loading status * refactor: update tool type handling and improve category merging logic * feat: Alter fork depth * fix: ensure filterList is properly initialized and updated in getList function * refactor: simplify ToolStoreDialog by removing unused toolType logic * perf: Optimize the style * style: adjust div width for improved layout in Tree component * refactor: improve polling mechanism for knowledge workflow action * fix: Get workspace_id from workflow params * fix: filter out 'file_bytes' from result in get_details method * feat: add recursive filtering for file_bytes in context data * fix: append results to paragraph_list instead of replacing it * perf: Optimize translation files * fix: include document name in bytes_to_uploaded_file call for better file handling * refactor: optimize buffer retrieval in document processing * refactor: remove redundant parameter from bytes_to_uploaded_file call * fix: Page style optimization * feat: add slider for setting limit in document rules form * feat: add workflow knowledge management endpoints and related functionality * fix: swap file size and file count limits in form inputs * refactor: update tool_config args to use list format for improved readability * feat: Node supports knowledge base workflow * feat: Node supports knowledge base workflow * fix: Basic node data cannot be obtained in the workflow * style: Knowledge base workflow debugging page style adjustment * fix: Loop nodes cannot be used in the knowledge base workflow * fix: Knowledge base workflow variable assignment node * feat: add chunk size slider to form for custom split strategy * fix: Workflow style optimization --------- Co-authored-by: CaptainB <bin@fit2cloud.com> Co-authored-by: zhangzhanwei <zhanwei.zhang@fit2cloud.com> Co-authored-by: wangdan-fit2cloud <dan.wang@fit2cloud.com>
156 lines
7.2 KiB
Python
156 lines
7.2 KiB
Python
# coding=utf-8
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
from drf_spectacular.utils import extend_schema
|
|
from rest_framework.request import Request
|
|
from rest_framework.views import APIView
|
|
|
|
from application.api.application_api import SpeechToTextAPI
|
|
from common.auth import TokenAuth
|
|
from common.auth.authentication import has_permissions
|
|
from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
|
|
from common.log.log import log
|
|
from common.result import result
|
|
from knowledge.api.knowledge_workflow import KnowledgeWorkflowApi
|
|
from knowledge.serializers.common import get_knowledge_operation_object
|
|
from knowledge.serializers.knowledge_workflow import KnowledgeWorkflowSerializer, KnowledgeWorkflowActionSerializer, \
|
|
KnowledgeWorkflowMcpSerializer
|
|
|
|
|
|
class KnowledgeDatasourceFormListView(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
def post(self, request: Request, workspace_id: str, knowledge_id: str, type: str, id: str):
|
|
return result.success(KnowledgeWorkflowSerializer.Datasource(
|
|
data={'type': type, 'id': id, 'params': request.data, 'function_name': 'get_form_list'}).action())
|
|
|
|
|
|
class KnowledgeDatasourceView(APIView):
|
|
def post(self, request: Request, workspace_id: str, knowledge_id: str, type: str, id: str, function_name: str):
|
|
return result.success(KnowledgeWorkflowSerializer.Datasource(
|
|
data={'type': type, 'id': id, 'params': request.data, 'function_name': function_name}).action())
|
|
|
|
|
|
class KnowledgeWorkflowActionView(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
def post(self, request: Request, workspace_id: str, knowledge_id: str):
|
|
return result.success(KnowledgeWorkflowActionSerializer(
|
|
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id}).action(request.data, True))
|
|
|
|
class Operate(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
def get(self, request, workspace_id: str, knowledge_id: str, knowledge_action_id: str):
|
|
return result.success(KnowledgeWorkflowActionSerializer.Operate(
|
|
data={'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'id': knowledge_action_id})
|
|
.one())
|
|
|
|
|
|
class KnowledgeWorkflowView(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
@extend_schema(
|
|
methods=['POST'],
|
|
description=_('Create knowledge workflow'),
|
|
summary=_('Create knowledge workflow'),
|
|
operation_id=_('Create knowledge workflow'), # type: ignore
|
|
parameters=KnowledgeWorkflowApi.get_parameters(),
|
|
responses=KnowledgeWorkflowApi.get_response(),
|
|
tags=[_('Knowledge Base')] # type: ignore
|
|
)
|
|
@has_permissions(
|
|
PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(),
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role()
|
|
)
|
|
def post(self, request: Request, workspace_id: str):
|
|
return result.success(KnowledgeWorkflowSerializer.Create(
|
|
data={'user_id': request.user.id, 'workspace_id': workspace_id}
|
|
).save_workflow(request.data))
|
|
|
|
class Operate(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
@extend_schema(
|
|
methods=['PUT'],
|
|
description=_('Edit knowledge workflow'),
|
|
summary=_('Edit knowledge workflow'),
|
|
operation_id=_('Edit knowledge workflow'), # type: ignore
|
|
parameters=KnowledgeWorkflowApi.get_parameters(),
|
|
request=KnowledgeWorkflowApi.get_request(),
|
|
responses=KnowledgeWorkflowApi.get_response(),
|
|
tags=[_('Knowledge Base')] # type: ignore
|
|
)
|
|
@has_permissions(
|
|
PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission(),
|
|
PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission_workspace_manage_role(),
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
|
ViewPermission(
|
|
[RoleConstants.USER.get_workspace_role()],
|
|
[PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()],
|
|
CompareConstants.AND
|
|
)
|
|
)
|
|
@log(
|
|
menu='Knowledge Base', operate="Modify knowledge workflow",
|
|
get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')),
|
|
)
|
|
def put(self, request: Request, workspace_id: str, knowledge_id: str):
|
|
return result.success(KnowledgeWorkflowSerializer.Operate(
|
|
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
|
|
).edit(request.data))
|
|
|
|
@extend_schema(
|
|
methods=['GET'],
|
|
description=_('Get knowledge workflow'),
|
|
summary=_('Get knowledge workflow'),
|
|
operation_id=_('Get knowledge workflow'), # type: ignore
|
|
parameters=KnowledgeWorkflowApi.get_parameters(),
|
|
responses=KnowledgeWorkflowApi.get_response(),
|
|
tags=[_('Knowledge Base')] # type: ignore
|
|
)
|
|
@has_permissions(
|
|
PermissionConstants.KNOWLEDGE_READ.get_workspace_knowledge_permission(),
|
|
PermissionConstants.KNOWLEDGE_READ.get_workspace_permission_workspace_manage_role(),
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
|
ViewPermission(
|
|
[RoleConstants.USER.get_workspace_role()],
|
|
[PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()],
|
|
CompareConstants.AND
|
|
),
|
|
)
|
|
def get(self, request: Request, workspace_id: str, knowledge_id: str):
|
|
return result.success(KnowledgeWorkflowSerializer.Operate(
|
|
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'knowledge_id': knowledge_id}
|
|
).one())
|
|
|
|
|
|
class KnowledgeWorkflowVersionView(APIView):
|
|
pass
|
|
|
|
|
|
class McpServers(APIView):
|
|
authentication_classes = [TokenAuth]
|
|
|
|
@extend_schema(
|
|
methods=['GET'],
|
|
description=_("speech to text"),
|
|
summary=_("speech to text"),
|
|
operation_id=_("speech to text"), # type: ignore
|
|
parameters=SpeechToTextAPI.get_parameters(),
|
|
request=SpeechToTextAPI.get_request(),
|
|
responses=SpeechToTextAPI.get_response(),
|
|
tags=[_('Knowledge Base')] # type: ignore
|
|
)
|
|
@has_permissions(PermissionConstants.KNOWLEDGE_READ.get_workspace_application_permission(),
|
|
PermissionConstants.KNOWLEDGE_READ.get_workspace_permission_workspace_manage_role(),
|
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
|
[PermissionConstants.KNOWLEDGE.get_workspace_application_permission()],
|
|
CompareConstants.AND),
|
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
|
|
def post(self, request: Request, workspace_id, knowledge_id: str):
|
|
return result.success(KnowledgeWorkflowMcpSerializer(
|
|
data={'mcp_servers': request.query_params.get('mcp_servers'), 'workspace_id': workspace_id,
|
|
'user_id': request.user.id,
|
|
'knowledge_id': knowledge_id}).get_mcp_servers(request.data))
|