mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +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>
103 lines
3.8 KiB
Python
103 lines
3.8 KiB
Python
# coding=utf-8
|
||
"""
|
||
@project: MaxKB
|
||
@Author:虎虎
|
||
@file: Knowledge_workflow_manage.py
|
||
@date:2025/11/13 19:02
|
||
@desc:
|
||
"""
|
||
import traceback
|
||
from concurrent.futures import ThreadPoolExecutor
|
||
|
||
from django.db.models import QuerySet
|
||
from django.utils.translation import get_language
|
||
|
||
from application.flow.common import Workflow
|
||
from application.flow.i_step_node import WorkFlowPostHandler, KnowledgeFlowParamsSerializer
|
||
from application.flow.workflow_manage import WorkflowManage
|
||
from common.handle.base_to_response import BaseToResponse
|
||
from common.handle.impl.response.system_to_response import SystemToResponse
|
||
from knowledge.models.knowledge_action import KnowledgeAction, State
|
||
|
||
executor = ThreadPoolExecutor(max_workers=200)
|
||
|
||
|
||
class KnowledgeWorkflowManage(WorkflowManage):
|
||
|
||
def __init__(self, flow: Workflow,
|
||
params,
|
||
work_flow_post_handler: WorkFlowPostHandler,
|
||
base_to_response: BaseToResponse = SystemToResponse(),
|
||
start_node_id=None,
|
||
start_node_data=None, chat_record=None, child_node=None):
|
||
super().__init__(flow, params, work_flow_post_handler, base_to_response, None, None, None,
|
||
None,
|
||
None, None, start_node_id, start_node_data, chat_record, child_node)
|
||
|
||
def get_params_serializer_class(self):
|
||
return KnowledgeFlowParamsSerializer
|
||
|
||
def get_start_node(self):
|
||
start_node_list = [node for node in self.flow.nodes if
|
||
self.params.get('data_source', {}).get('node_id') == node.id]
|
||
return start_node_list[0]
|
||
|
||
def run(self):
|
||
executor.submit(self._run)
|
||
|
||
def _run(self):
|
||
QuerySet(KnowledgeAction).filter(id=self.params.get('knowledge_action_id')).update(
|
||
state=State.STARTED)
|
||
language = get_language()
|
||
self.run_chain_async(self.start_node, None, language)
|
||
while self.is_run():
|
||
pass
|
||
self.work_flow_post_handler.handler(self)
|
||
|
||
@staticmethod
|
||
def get_node_details(current_node, node, index):
|
||
if current_node == node:
|
||
return {
|
||
'name': node.node.properties.get('stepName'),
|
||
"index": index,
|
||
'run_time': 0,
|
||
'type': node.type,
|
||
'status': 202,
|
||
'err_message': ""
|
||
}
|
||
|
||
return node.get_details(index)
|
||
|
||
def run_chain(self, current_node, node_result_future=None):
|
||
QuerySet(KnowledgeAction).filter(id=self.params.get('knowledge_action_id')).update(
|
||
details=self.get_runtime_details(lambda node, index: self.get_node_details(current_node, node, index)))
|
||
if node_result_future is None:
|
||
node_result_future = self.run_node_future(current_node)
|
||
try:
|
||
result = self.hand_node_result(current_node, node_result_future)
|
||
return result
|
||
except Exception as e:
|
||
traceback.print_exc()
|
||
return None
|
||
|
||
def hand_node_result(self, current_node, node_result_future):
|
||
try:
|
||
current_result = node_result_future.result()
|
||
result = current_result.write_context(current_node, self)
|
||
if result is not None:
|
||
# 阻塞获取结果
|
||
list(result)
|
||
return current_result
|
||
except Exception as e:
|
||
traceback.print_exc()
|
||
self.status = 500
|
||
current_node.get_write_error_context(e)
|
||
self.answer += str(e)
|
||
QuerySet(KnowledgeAction).filter(id=self.params.get('knowledge_action_id')).update(
|
||
details=self.get_runtime_details(),
|
||
state=State.FAILURE)
|
||
finally:
|
||
current_node.node_chunk.end()
|
||
QuerySet(KnowledgeAction).filter(id=self.params.get('knowledge_action_id')).update(
|
||
details=self.get_runtime_details())
|