diff --git a/apps/chat/chat_pipeline/I_base_chat_pipeline.py b/apps/application/chat_pipeline/I_base_chat_pipeline.py
similarity index 100%
rename from apps/chat/chat_pipeline/I_base_chat_pipeline.py
rename to apps/application/chat_pipeline/I_base_chat_pipeline.py
diff --git a/apps/chat/chat_pipeline/__init__.py b/apps/application/chat_pipeline/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/__init__.py
rename to apps/application/chat_pipeline/__init__.py
diff --git a/apps/chat/chat_pipeline/pipeline_manage.py b/apps/application/chat_pipeline/pipeline_manage.py
similarity index 100%
rename from apps/chat/chat_pipeline/pipeline_manage.py
rename to apps/application/chat_pipeline/pipeline_manage.py
diff --git a/apps/chat/chat_pipeline/step/__init__.py b/apps/application/chat_pipeline/step/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/__init__.py
rename to apps/application/chat_pipeline/step/__init__.py
diff --git a/apps/chat/chat_pipeline/step/chat_step/__init__.py b/apps/application/chat_pipeline/step/chat_step/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/chat_step/__init__.py
rename to apps/application/chat_pipeline/step/chat_step/__init__.py
diff --git a/apps/chat/chat_pipeline/step/chat_step/i_chat_step.py b/apps/application/chat_pipeline/step/chat_step/i_chat_step.py
similarity index 68%
rename from apps/chat/chat_pipeline/step/chat_step/i_chat_step.py
rename to apps/application/chat_pipeline/step/chat_step/i_chat_step.py
index 2673c6b7bbd..4abda510d0c 100644
--- a/apps/chat/chat_pipeline/step/chat_step/i_chat_step.py
+++ b/apps/application/chat_pipeline/step/chat_step/i_chat_step.py
@@ -16,9 +16,8 @@
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage
-from application.serializers.application_serializers import NoReferencesSetting
+from application.serializers.application import NoReferencesSetting
from common.field.common import InstanceField
-from common.util.field_message import ErrMessage
class ModelField(serializers.Field):
@@ -53,35 +52,35 @@ class IChatStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer):
# 对话列表
message_list = serializers.ListField(required=True, child=MessageField(required=True),
- error_messages=ErrMessage.list(_("Conversation list")))
- model_id = serializers.UUIDField(required=False, allow_null=True, error_messages=ErrMessage.uuid(_("Model id")))
+ label=_("Conversation list"))
+ model_id = serializers.UUIDField(required=False, allow_null=True, label=_("Model id"))
# 段落列表
- paragraph_list = serializers.ListField(error_messages=ErrMessage.list(_("Paragraph List")))
+ paragraph_list = serializers.ListField(label=_("Paragraph List"))
# 对话id
- chat_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("Conversation ID")))
+ chat_id = serializers.UUIDField(required=True, label=_("Conversation ID"))
# 用户问题
- problem_text = serializers.CharField(required=True, error_messages=ErrMessage.uuid(_("User Questions")))
+ problem_text = serializers.CharField(required=True, label=_("User Questions"))
# 后置处理器
post_response_handler = InstanceField(model_type=PostResponseHandler,
- error_messages=ErrMessage.base(_("Post-processor")))
+ label=_("Post-processor"))
# 补全问题
padding_problem_text = serializers.CharField(required=False,
- error_messages=ErrMessage.base(_("Completion Question")))
+ label=_("Completion Question"))
# 是否使用流的形式输出
- stream = serializers.BooleanField(required=False, error_messages=ErrMessage.base(_("Streaming Output")))
- client_id = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Client id")))
- client_type = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Client Type")))
+ stream = serializers.BooleanField(required=False, label=_("Streaming Output"))
+ client_id = serializers.CharField(required=True, label=_("Client id"))
+ client_type = serializers.CharField(required=True, label=_("Client Type"))
# 未查询到引用分段
no_references_setting = NoReferencesSetting(required=True,
- error_messages=ErrMessage.base(_("No reference segment settings")))
+ label=_("No reference segment settings"))
- user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("User ID")))
+ user_id = serializers.UUIDField(required=True, label=_("User ID"))
model_setting = serializers.DictField(required=True, allow_null=True,
- error_messages=ErrMessage.dict(_("Model settings")))
+ label=_("Model settings"))
model_params_setting = serializers.DictField(required=False, allow_null=True,
- error_messages=ErrMessage.dict(_("Model parameter settings")))
+ label=_("Model parameter settings"))
def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
diff --git a/apps/chat/chat_pipeline/step/chat_step/impl/base_chat_step.py b/apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/chat_step/impl/base_chat_step.py
rename to apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py
diff --git a/apps/chat/chat_pipeline/step/generate_human_message_step/__init__.py b/apps/application/chat_pipeline/step/generate_human_message_step/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/generate_human_message_step/__init__.py
rename to apps/application/chat_pipeline/step/generate_human_message_step/__init__.py
diff --git a/apps/chat/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py b/apps/application/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py
similarity index 75%
rename from apps/chat/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py
rename to apps/application/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py
index 9e23f2d6c52..d23d762d825 100644
--- a/apps/chat/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py
+++ b/apps/application/chat_pipeline/step/generate_human_message_step/i_generate_human_message_step.py
@@ -16,34 +16,35 @@
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage
from application.models import ChatRecord
-from application.serializers.application_serializers import NoReferencesSetting
+from application.serializers.application import NoReferencesSetting
from common.field.common import InstanceField
-from common.util.field_message import ErrMessage
class IGenerateHumanMessageStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer):
# 问题
- problem_text = serializers.CharField(required=True, error_messages=ErrMessage.char(_("question")))
+ problem_text = serializers.CharField(required=True, label=_("question"))
# 段落列表
paragraph_list = serializers.ListField(child=InstanceField(model_type=ParagraphPipelineModel, required=True),
- error_messages=ErrMessage.list(_("Paragraph List")))
+ label=_("Paragraph List"))
# 历史对答
history_chat_record = serializers.ListField(child=InstanceField(model_type=ChatRecord, required=True),
- error_messages=ErrMessage.list(_("History Questions")))
+ label=_("History Questions"))
# 多轮对话数量
- dialogue_number = serializers.IntegerField(required=True, error_messages=ErrMessage.integer(_("Number of multi-round conversations")))
+ dialogue_number = serializers.IntegerField(required=True, label=_("Number of multi-round conversations"))
# 最大携带知识库段落长度
- max_paragraph_char_number = serializers.IntegerField(required=True, error_messages=ErrMessage.integer(
- _("Maximum length of the knowledge base paragraph")))
+ max_paragraph_char_number = serializers.IntegerField(required=True,
+ label=_("Maximum length of the knowledge base paragraph"))
# 模板
- prompt = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Prompt word")))
+ prompt = serializers.CharField(required=True, label=_("Prompt word"))
system = serializers.CharField(required=False, allow_null=True, allow_blank=True,
- error_messages=ErrMessage.char(_("System prompt words (role)")))
+ label=_("System prompt words (role)"))
# 补齐问题
- padding_problem_text = serializers.CharField(required=False, error_messages=ErrMessage.char(_("Completion problem")))
+ padding_problem_text = serializers.CharField(required=False,
+ label=_("Completion problem"))
# 未查询到引用分段
- no_references_setting = NoReferencesSetting(required=True, error_messages=ErrMessage.base(_("No reference segment settings")))
+ no_references_setting = NoReferencesSetting(required=True,
+ label=_("No reference segment settings"))
def get_step_serializer(self, manage: PipelineManage) -> Type[serializers.Serializer]:
return self.InstanceSerializer
diff --git a/apps/chat/chat_pipeline/step/generate_human_message_step/impl/base_generate_human_message_step.py b/apps/application/chat_pipeline/step/generate_human_message_step/impl/base_generate_human_message_step.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/generate_human_message_step/impl/base_generate_human_message_step.py
rename to apps/application/chat_pipeline/step/generate_human_message_step/impl/base_generate_human_message_step.py
diff --git a/apps/chat/chat_pipeline/step/reset_problem_step/__init__.py b/apps/application/chat_pipeline/step/reset_problem_step/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/reset_problem_step/__init__.py
rename to apps/application/chat_pipeline/step/reset_problem_step/__init__.py
diff --git a/apps/chat/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py b/apps/application/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py
similarity index 78%
rename from apps/chat/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py
rename to apps/application/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py
index f48f5c804fd..5c740eda4dc 100644
--- a/apps/chat/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py
+++ b/apps/application/chat_pipeline/step/reset_problem_step/i_reset_problem_step.py
@@ -16,22 +16,20 @@
from application.chat_pipeline.pipeline_manage import PipelineManage
from application.models import ChatRecord
from common.field.common import InstanceField
-from common.util.field_message import ErrMessage
class IResetProblemStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer):
# 问题文本
- problem_text = serializers.CharField(required=True, error_messages=ErrMessage.float(_("question")))
+ problem_text = serializers.CharField(required=True, label=_("question"))
# 历史对答
history_chat_record = serializers.ListField(child=InstanceField(model_type=ChatRecord, required=True),
- error_messages=ErrMessage.list(_("History Questions")))
+ label=_("History Questions"))
# 大语言模型
- model_id = serializers.UUIDField(required=False, allow_null=True, error_messages=ErrMessage.uuid(_("Model id")))
- user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("User ID")))
+ model_id = serializers.UUIDField(required=False, allow_null=True, label=_("Model id"))
+ user_id = serializers.UUIDField(required=True, label=_("User ID"))
problem_optimization_prompt = serializers.CharField(required=False, max_length=102400,
- error_messages=ErrMessage.char(
- _("Question completion prompt")))
+ label=_("Question completion prompt"))
def get_step_serializer(self, manage: PipelineManage) -> Type[serializers.Serializer]:
return self.InstanceSerializer
diff --git a/apps/chat/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py b/apps/application/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py
similarity index 96%
rename from apps/chat/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py
rename to apps/application/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py
index ec01daa3444..8e4a0cdbf71 100644
--- a/apps/chat/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py
+++ b/apps/application/chat_pipeline/step/reset_problem_step/impl/base_reset_problem_step.py
@@ -13,8 +13,8 @@
from application.chat_pipeline.step.reset_problem_step.i_reset_problem_step import IResetProblemStep
from application.models import ChatRecord
-from common.util.split_model import flat_map
-from setting.models_provider.tools import get_model_instance_by_model_user_id
+from common.utils.split_model import flat_map
+from models_provider.tools import get_model_instance_by_model_user_id
prompt = _(
"() contains the user's question. Answer the guessed user's question based on the context ({question}) Requirement: Output a complete question and put it in the tag")
diff --git a/apps/chat/chat_pipeline/step/search_dataset_step/__init__.py b/apps/application/chat_pipeline/step/search_dataset_step/__init__.py
similarity index 100%
rename from apps/chat/chat_pipeline/step/search_dataset_step/__init__.py
rename to apps/application/chat_pipeline/step/search_dataset_step/__init__.py
diff --git a/apps/chat/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py b/apps/application/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py
similarity index 76%
rename from apps/chat/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py
rename to apps/application/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py
index 7b222cbc279..f086e72be62 100644
--- a/apps/chat/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py
+++ b/apps/application/chat_pipeline/step/search_dataset_step/i_search_dataset_step.py
@@ -16,36 +16,35 @@
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage
-from common.util.field_message import ErrMessage
class ISearchDatasetStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer):
# 原始问题文本
- problem_text = serializers.CharField(required=True, error_messages=ErrMessage.char(_("question")))
+ problem_text = serializers.CharField(required=True, label=_("question"))
# 系统补全问题文本
padding_problem_text = serializers.CharField(required=False,
- error_messages=ErrMessage.char(_("System completes question text")))
+ label=_("System completes question text"))
# 需要查询的数据集id列表
dataset_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
- error_messages=ErrMessage.list(_("Dataset id list")))
+ label=_("Dataset id list"))
# 需要排除的文档id
exclude_document_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
- error_messages=ErrMessage.list(_("List of document ids to exclude")))
+ label=_("List of document ids to exclude"))
# 需要排除向量id
exclude_paragraph_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
- error_messages=ErrMessage.list(_("List of exclusion vector ids")))
+ label=_("List of exclusion vector ids"))
# 需要查询的条数
top_n = serializers.IntegerField(required=True,
- error_messages=ErrMessage.integer(_("Reference segment number")))
+ label=_("Reference segment number"))
# 相似度 0-1之间
similarity = serializers.FloatField(required=True, max_value=1, min_value=0,
- error_messages=ErrMessage.float(_("Similarity")))
+ label=_("Similarity"))
search_mode = serializers.CharField(required=True, validators=[
validators.RegexValidator(regex=re.compile("^embedding|keywords|blend$"),
message=_("The type only supports embedding|keywords|blend"), code=500)
- ], error_messages=ErrMessage.char(_("Retrieval Mode")))
- user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("User ID")))
+ ], label=_("Retrieval Mode"))
+ user_id = serializers.UUIDField(required=True, label=_("User ID"))
def get_step_serializer(self, manage: PipelineManage) -> Type[InstanceSerializer]:
return self.InstanceSerializer
diff --git a/apps/chat/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py b/apps/application/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
similarity index 87%
rename from apps/chat/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
rename to apps/application/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
index ff5106e20ed..b7f069785e8 100644
--- a/apps/chat/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
+++ b/apps/application/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
@@ -17,12 +17,12 @@
from application.chat_pipeline.step.search_dataset_step.i_search_dataset_step import ISearchDatasetStep
from common.config.embedding_config import VectorStore, ModelManage
from common.db.search import native_search
-from common.util.file_util import get_file_content
-from dataset.models import Paragraph, DataSet
-from embedding.models import SearchMode
-from setting.models import Model
-from setting.models_provider import get_model
-from smartdoc.conf import PROJECT_DIR
+from common.utils.common import get_file_content
+from knowledge.models import Paragraph, Knowledge
+from knowledge.models import SearchMode
+from maxkb.conf import PROJECT_DIR
+from models_provider.models import Model
+from models_provider.tools import get_model
def get_model_by_id(_id, user_id):
@@ -36,12 +36,22 @@ def get_model_by_id(_id, user_id):
def get_embedding_id(dataset_id_list):
+<<<<<<< Updated upstream:apps/chat/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
dataset_list = QuerySet(DataSet).filter(id__in=dataset_id_list)
if len(set([dataset.embedding_model_id for dataset in dataset_list])) > 1:
raise Exception(_("The vector model of the associated knowledge base is inconsistent and the segmentation cannot be recalled."))
if len(dataset_list) == 0:
raise Exception(_("The knowledge base setting is wrong, please reset the knowledge base"))
return dataset_list[0].embedding_model_id
+=======
+ knowledge_list = QuerySet(Knowledge).filter(id__in=dataset_id_list)
+ if len(set([knowledge.embedding_mode_id for knowledge in knowledge_list])) > 1:
+ raise Exception(
+ _("The vector model of the associated knowledge base is inconsistent and the segmentation cannot be recalled."))
+ if len(knowledge_list) == 0:
+ raise Exception(_("The knowledge base setting is wrong, please reset the knowledge base"))
+ return knowledge_list[0].embedding_mode_id
+>>>>>>> Stashed changes:apps/application/chat_pipeline/step/search_dataset_step/impl/base_search_dataset_step.py
class BaseSearchDatasetStep(ISearchDatasetStep):
diff --git a/apps/chat/flow/__init__.py b/apps/application/flow/__init__.py
similarity index 100%
rename from apps/chat/flow/__init__.py
rename to apps/application/flow/__init__.py
diff --git a/apps/chat/flow/common.py b/apps/application/flow/common.py
similarity index 100%
rename from apps/chat/flow/common.py
rename to apps/application/flow/common.py
diff --git a/apps/chat/flow/default_workflow.json b/apps/application/flow/default_workflow.json
similarity index 100%
rename from apps/chat/flow/default_workflow.json
rename to apps/application/flow/default_workflow.json
diff --git a/apps/chat/flow/default_workflow_en.json b/apps/application/flow/default_workflow_en.json
similarity index 100%
rename from apps/chat/flow/default_workflow_en.json
rename to apps/application/flow/default_workflow_en.json
diff --git a/apps/chat/flow/default_workflow_zh.json b/apps/application/flow/default_workflow_zh.json
similarity index 100%
rename from apps/chat/flow/default_workflow_zh.json
rename to apps/application/flow/default_workflow_zh.json
diff --git a/apps/chat/flow/default_workflow_zh_Hant.json b/apps/application/flow/default_workflow_zh_Hant.json
similarity index 100%
rename from apps/chat/flow/default_workflow_zh_Hant.json
rename to apps/application/flow/default_workflow_zh_Hant.json
diff --git a/apps/chat/flow/i_step_node.py b/apps/application/flow/i_step_node.py
similarity index 99%
rename from apps/chat/flow/i_step_node.py
rename to apps/application/flow/i_step_node.py
index ddfd11b28aa..045326c90e2 100644
--- a/apps/chat/flow/i_step_node.py
+++ b/apps/application/flow/i_step_node.py
@@ -17,7 +17,7 @@
from rest_framework import serializers
from rest_framework.exceptions import ValidationError, ErrorDetail
-from chat.flow.common import Answer, NodeChunk
+from application.flow.common import Answer, NodeChunk
from application.models import ChatRecord
from application.models import ApplicationPublicAccessClient
from common.constants.authentication_type import AuthenticationType
diff --git a/apps/chat/flow/step_node/__init__.py b/apps/application/flow/step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/__init__.py
rename to apps/application/flow/step_node/__init__.py
diff --git a/apps/chat/flow/step_node/ai_chat_step_node/__init__.py b/apps/application/flow/step_node/ai_chat_step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/ai_chat_step_node/__init__.py
rename to apps/application/flow/step_node/ai_chat_step_node/__init__.py
diff --git a/apps/chat/flow/step_node/ai_chat_step_node/i_chat_node.py b/apps/application/flow/step_node/ai_chat_step_node/i_chat_node.py
similarity index 97%
rename from apps/chat/flow/step_node/ai_chat_step_node/i_chat_node.py
rename to apps/application/flow/step_node/ai_chat_step_node/i_chat_node.py
index dc6df2c9f6f..a19ca3a8867 100644
--- a/apps/chat/flow/step_node/ai_chat_step_node/i_chat_node.py
+++ b/apps/application/flow/step_node/ai_chat_step_node/i_chat_node.py
@@ -11,7 +11,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class ChatNodeSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/ai_chat_step_node/impl/__init__.py b/apps/application/flow/step_node/ai_chat_step_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/ai_chat_step_node/impl/__init__.py
rename to apps/application/flow/step_node/ai_chat_step_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/ai_chat_step_node/impl/base_chat_node.py b/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py
similarity index 98%
rename from apps/chat/flow/step_node/ai_chat_step_node/impl/base_chat_node.py
rename to apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py
index b80d059d6b6..a9780f0a741 100644
--- a/apps/chat/flow/step_node/ai_chat_step_node/impl/base_chat_node.py
+++ b/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py
@@ -20,9 +20,9 @@
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
-from chat.flow.i_step_node import NodeResult, INode
-from chat.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode
-from chat.flow.tools import Reasoning
+from application.flow.i_step_node import NodeResult, INode
+from application.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode
+from application.flow.tools import Reasoning
from models_provider.models import Model
from models_provider.tools import get_model_credential, get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/application_node/__init__.py b/apps/application/flow/step_node/application_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/application_node/__init__.py
rename to apps/application/flow/step_node/application_node/__init__.py
diff --git a/apps/chat/flow/step_node/application_node/i_application_node.py b/apps/application/flow/step_node/application_node/i_application_node.py
similarity index 98%
rename from apps/chat/flow/step_node/application_node/i_application_node.py
rename to apps/application/flow/step_node/application_node/i_application_node.py
index 2ee9c955235..43f853cbf1e 100644
--- a/apps/chat/flow/step_node/application_node/i_application_node.py
+++ b/apps/application/flow/step_node/application_node/i_application_node.py
@@ -3,7 +3,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/application_node/impl/__init__.py b/apps/application/flow/step_node/application_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/application_node/impl/__init__.py
rename to apps/application/flow/step_node/application_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/application_node/impl/base_application_node.py b/apps/application/flow/step_node/application_node/impl/base_application_node.py
similarity index 98%
rename from apps/chat/flow/step_node/application_node/impl/base_application_node.py
rename to apps/application/flow/step_node/application_node/impl/base_application_node.py
index c32e006789b..95445f45612 100644
--- a/apps/chat/flow/step_node/application_node/impl/base_application_node.py
+++ b/apps/application/flow/step_node/application_node/impl/base_application_node.py
@@ -5,9 +5,9 @@
import uuid
from typing import Dict, List
-from chat.flow.common import Answer
-from chat.flow.i_step_node import NodeResult, INode
-from chat.flow.step_node.application_node.i_application_node import IApplicationNode
+from application.flow.common import Answer
+from application.flow.i_step_node import NodeResult, INode
+from application.flow.step_node.application_node.i_application_node import IApplicationNode
from application.models import Chat
diff --git a/apps/chat/flow/step_node/condition_node/__init__.py b/apps/application/flow/step_node/condition_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/condition_node/__init__.py
rename to apps/application/flow/step_node/condition_node/__init__.py
diff --git a/apps/chat/flow/step_node/condition_node/compare/__init__.py b/apps/application/flow/step_node/condition_node/compare/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/condition_node/compare/__init__.py
rename to apps/application/flow/step_node/condition_node/compare/__init__.py
diff --git a/apps/chat/flow/step_node/condition_node/compare/compare.py b/apps/application/flow/step_node/condition_node/compare/compare.py
similarity index 100%
rename from apps/chat/flow/step_node/condition_node/compare/compare.py
rename to apps/application/flow/step_node/condition_node/compare/compare.py
diff --git a/apps/chat/flow/step_node/condition_node/compare/contain_compare.py b/apps/application/flow/step_node/condition_node/compare/contain_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/contain_compare.py
rename to apps/application/flow/step_node/condition_node/compare/contain_compare.py
index 5a2e88e2807..6073131a54d 100644
--- a/apps/chat/flow/step_node/condition_node/compare/contain_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/contain_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class ContainCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/equal_compare.py b/apps/application/flow/step_node/condition_node/compare/equal_compare.py
similarity index 84%
rename from apps/chat/flow/step_node/condition_node/compare/equal_compare.py
rename to apps/application/flow/step_node/condition_node/compare/equal_compare.py
index 846c65dec15..0061a82f6e6 100644
--- a/apps/chat/flow/step_node/condition_node/compare/equal_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/equal_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class EqualCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/ge_compare.py b/apps/application/flow/step_node/condition_node/compare/ge_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/ge_compare.py
rename to apps/application/flow/step_node/condition_node/compare/ge_compare.py
index d473a7559c1..d4e22cbd696 100644
--- a/apps/chat/flow/step_node/condition_node/compare/ge_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/ge_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class GECompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/gt_compare.py b/apps/application/flow/step_node/condition_node/compare/gt_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/gt_compare.py
rename to apps/application/flow/step_node/condition_node/compare/gt_compare.py
index c1d86eb8c8c..80942abb2f2 100644
--- a/apps/chat/flow/step_node/condition_node/compare/gt_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/gt_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class GTCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/is_not_null_compare.py b/apps/application/flow/step_node/condition_node/compare/is_not_null_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/is_not_null_compare.py
rename to apps/application/flow/step_node/condition_node/compare/is_not_null_compare.py
index ce82dddc951..5dec267135b 100644
--- a/apps/chat/flow/step_node/condition_node/compare/is_not_null_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/is_not_null_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare import Compare
+from application.flow.step_node.condition_node.compare import Compare
class IsNotNullCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/is_not_true.py b/apps/application/flow/step_node/condition_node/compare/is_not_true.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/is_not_true.py
rename to apps/application/flow/step_node/condition_node/compare/is_not_true.py
index 6995ece34e3..f8a29f5a126 100644
--- a/apps/chat/flow/step_node/condition_node/compare/is_not_true.py
+++ b/apps/application/flow/step_node/condition_node/compare/is_not_true.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare import Compare
+from application.flow.step_node.condition_node.compare import Compare
class IsNotTrueCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/is_null_compare.py b/apps/application/flow/step_node/condition_node/compare/is_null_compare.py
similarity index 86%
rename from apps/chat/flow/step_node/condition_node/compare/is_null_compare.py
rename to apps/application/flow/step_node/condition_node/compare/is_null_compare.py
index 9376340ce7b..c463f3fda28 100644
--- a/apps/chat/flow/step_node/condition_node/compare/is_null_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/is_null_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare import Compare
+from application.flow.step_node.condition_node.compare import Compare
class IsNullCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/is_true.py b/apps/application/flow/step_node/condition_node/compare/is_true.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/is_true.py
rename to apps/application/flow/step_node/condition_node/compare/is_true.py
index cdd0e4683e6..166e0993ac0 100644
--- a/apps/chat/flow/step_node/condition_node/compare/is_true.py
+++ b/apps/application/flow/step_node/condition_node/compare/is_true.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare import Compare
+from application.flow.step_node.condition_node.compare import Compare
class IsTrueCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/le_compare.py b/apps/application/flow/step_node/condition_node/compare/le_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/le_compare.py
rename to apps/application/flow/step_node/condition_node/compare/le_compare.py
index bc68483ceb1..77a0bca0f5b 100644
--- a/apps/chat/flow/step_node/condition_node/compare/le_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/le_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LECompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/len_equal_compare.py b/apps/application/flow/step_node/condition_node/compare/len_equal_compare.py
similarity index 86%
rename from apps/chat/flow/step_node/condition_node/compare/len_equal_compare.py
rename to apps/application/flow/step_node/condition_node/compare/len_equal_compare.py
index 7ec2d8b7b99..f2b0764c551 100644
--- a/apps/chat/flow/step_node/condition_node/compare/len_equal_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/len_equal_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LenEqualCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/len_ge_compare.py b/apps/application/flow/step_node/condition_node/compare/len_ge_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/len_ge_compare.py
rename to apps/application/flow/step_node/condition_node/compare/len_ge_compare.py
index b8f738c7b87..87f11eb2cc5 100644
--- a/apps/chat/flow/step_node/condition_node/compare/len_ge_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/len_ge_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LenGECompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/len_gt_compare.py b/apps/application/flow/step_node/condition_node/compare/len_gt_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/len_gt_compare.py
rename to apps/application/flow/step_node/condition_node/compare/len_gt_compare.py
index b894e956458..0532d353d74 100644
--- a/apps/chat/flow/step_node/condition_node/compare/len_gt_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/len_gt_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LenGTCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/len_le_compare.py b/apps/application/flow/step_node/condition_node/compare/len_le_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/len_le_compare.py
rename to apps/application/flow/step_node/condition_node/compare/len_le_compare.py
index d5c552af54d..d315a754aa6 100644
--- a/apps/chat/flow/step_node/condition_node/compare/len_le_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/len_le_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LenLECompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/len_lt_compare.py b/apps/application/flow/step_node/condition_node/compare/len_lt_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/len_lt_compare.py
rename to apps/application/flow/step_node/condition_node/compare/len_lt_compare.py
index 702342f5001..c89638cd721 100644
--- a/apps/chat/flow/step_node/condition_node/compare/len_lt_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/len_lt_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LenLTCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/lt_compare.py b/apps/application/flow/step_node/condition_node/compare/lt_compare.py
similarity index 87%
rename from apps/chat/flow/step_node/condition_node/compare/lt_compare.py
rename to apps/application/flow/step_node/condition_node/compare/lt_compare.py
index 6dbd67f37fe..d2d5be74823 100644
--- a/apps/chat/flow/step_node/condition_node/compare/lt_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/lt_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class LTCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/compare/not_contain_compare.py b/apps/application/flow/step_node/condition_node/compare/not_contain_compare.py
similarity index 88%
rename from apps/chat/flow/step_node/condition_node/compare/not_contain_compare.py
rename to apps/application/flow/step_node/condition_node/compare/not_contain_compare.py
index da8fb51fa2a..f95b237ddf6 100644
--- a/apps/chat/flow/step_node/condition_node/compare/not_contain_compare.py
+++ b/apps/application/flow/step_node/condition_node/compare/not_contain_compare.py
@@ -8,7 +8,7 @@
"""
from typing import List
-from chat.flow.step_node.condition_node.compare.compare import Compare
+from application.flow.step_node.condition_node.compare.compare import Compare
class NotContainCompare(Compare):
diff --git a/apps/chat/flow/step_node/condition_node/i_condition_node.py b/apps/application/flow/step_node/condition_node/i_condition_node.py
similarity index 96%
rename from apps/chat/flow/step_node/condition_node/i_condition_node.py
rename to apps/application/flow/step_node/condition_node/i_condition_node.py
index 6aefd3f8c55..1bd541b4cf1 100644
--- a/apps/chat/flow/step_node/condition_node/i_condition_node.py
+++ b/apps/application/flow/step_node/condition_node/i_condition_node.py
@@ -11,7 +11,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode
+from application.flow.i_step_node import INode
class ConditionSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/condition_node/impl/__init__.py b/apps/application/flow/step_node/condition_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/condition_node/impl/__init__.py
rename to apps/application/flow/step_node/condition_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/condition_node/impl/base_condition_node.py b/apps/application/flow/step_node/condition_node/impl/base_condition_node.py
similarity index 90%
rename from apps/chat/flow/step_node/condition_node/impl/base_condition_node.py
rename to apps/application/flow/step_node/condition_node/impl/base_condition_node.py
index 7e85aea291b..109029be211 100644
--- a/apps/chat/flow/step_node/condition_node/impl/base_condition_node.py
+++ b/apps/application/flow/step_node/condition_node/impl/base_condition_node.py
@@ -8,9 +8,9 @@
"""
from typing import List
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.condition_node.compare import compare_handle_list
-from chat.flow.step_node.condition_node.i_condition_node import IConditionNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.condition_node.compare import compare_handle_list
+from application.flow.step_node.condition_node.i_condition_node import IConditionNode
class BaseConditionNode(IConditionNode):
diff --git a/apps/chat/flow/step_node/direct_reply_node/__init__.py b/apps/application/flow/step_node/direct_reply_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/direct_reply_node/__init__.py
rename to apps/application/flow/step_node/direct_reply_node/__init__.py
diff --git a/apps/chat/flow/step_node/direct_reply_node/i_reply_node.py b/apps/application/flow/step_node/direct_reply_node/i_reply_node.py
similarity index 96%
rename from apps/chat/flow/step_node/direct_reply_node/i_reply_node.py
rename to apps/application/flow/step_node/direct_reply_node/i_reply_node.py
index f6d43f4e1d0..acb9262bd06 100644
--- a/apps/chat/flow/step_node/direct_reply_node/i_reply_node.py
+++ b/apps/application/flow/step_node/direct_reply_node/i_reply_node.py
@@ -10,7 +10,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from common.exception.app_exception import AppApiException
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/direct_reply_node/impl/__init__.py b/apps/application/flow/step_node/direct_reply_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/direct_reply_node/impl/__init__.py
rename to apps/application/flow/step_node/direct_reply_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/direct_reply_node/impl/base_reply_node.py b/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py
similarity index 91%
rename from apps/chat/flow/step_node/direct_reply_node/impl/base_reply_node.py
rename to apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py
index dd36aa34ee7..1d3115e4c67 100644
--- a/apps/chat/flow/step_node/direct_reply_node/impl/base_reply_node.py
+++ b/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py
@@ -8,8 +8,8 @@
"""
from typing import List
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.direct_reply_node.i_reply_node import IReplyNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.direct_reply_node.i_reply_node import IReplyNode
class BaseReplyNode(IReplyNode):
diff --git a/apps/chat/flow/step_node/document_extract_node/__init__.py b/apps/application/flow/step_node/document_extract_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/document_extract_node/__init__.py
rename to apps/application/flow/step_node/document_extract_node/__init__.py
diff --git a/apps/chat/flow/step_node/document_extract_node/i_document_extract_node.py b/apps/application/flow/step_node/document_extract_node/i_document_extract_node.py
similarity index 93%
rename from apps/chat/flow/step_node/document_extract_node/i_document_extract_node.py
rename to apps/application/flow/step_node/document_extract_node/i_document_extract_node.py
index 8da45509ff7..e907220ca1d 100644
--- a/apps/chat/flow/step_node/document_extract_node/i_document_extract_node.py
+++ b/apps/application/flow/step_node/document_extract_node/i_document_extract_node.py
@@ -5,7 +5,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class DocumentExtractNodeSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/document_extract_node/impl/__init__.py b/apps/application/flow/step_node/document_extract_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/document_extract_node/impl/__init__.py
rename to apps/application/flow/step_node/document_extract_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/document_extract_node/impl/base_document_extract_node.py b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py
similarity index 95%
rename from apps/chat/flow/step_node/document_extract_node/impl/base_document_extract_node.py
rename to apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py
index 0b4837eb32e..33b25f2be2f 100644
--- a/apps/chat/flow/step_node/document_extract_node/impl/base_document_extract_node.py
+++ b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py
@@ -5,8 +5,8 @@
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.db.models import QuerySet
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode
from knowledge.models import File
from knowledge.serializers.document import split_handles, parse_table_handle_list, FileBufferHandle
from knowledge.serializers.file import FileSerializer
diff --git a/apps/chat/flow/step_node/form_node/__init__.py b/apps/application/flow/step_node/form_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/form_node/__init__.py
rename to apps/application/flow/step_node/form_node/__init__.py
diff --git a/apps/chat/flow/step_node/form_node/i_form_node.py b/apps/application/flow/step_node/form_node/i_form_node.py
similarity index 94%
rename from apps/chat/flow/step_node/form_node/i_form_node.py
rename to apps/application/flow/step_node/form_node/i_form_node.py
index 6f2dad1b1c1..552434dbff8 100644
--- a/apps/chat/flow/step_node/form_node/i_form_node.py
+++ b/apps/application/flow/step_node/form_node/i_form_node.py
@@ -10,7 +10,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/form_node/impl/__init__.py b/apps/application/flow/step_node/form_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/form_node/impl/__init__.py
rename to apps/application/flow/step_node/form_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/form_node/impl/base_form_node.py b/apps/application/flow/step_node/form_node/impl/base_form_node.py
similarity index 97%
rename from apps/chat/flow/step_node/form_node/impl/base_form_node.py
rename to apps/application/flow/step_node/form_node/impl/base_form_node.py
index 1ba41214708..dcf35dd3cfd 100644
--- a/apps/chat/flow/step_node/form_node/impl/base_form_node.py
+++ b/apps/application/flow/step_node/form_node/impl/base_form_node.py
@@ -12,9 +12,9 @@
from langchain_core.prompts import PromptTemplate
-from chat.flow.common import Answer
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.form_node.i_form_node import IFormNode
+from application.flow.common import Answer
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.form_node.i_form_node import IFormNode
def write_context(step_variable: Dict, global_variable: Dict, node, workflow):
diff --git a/apps/chat/flow/step_node/function_lib_node/__init__.py b/apps/application/flow/step_node/function_lib_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/function_lib_node/__init__.py
rename to apps/application/flow/step_node/function_lib_node/__init__.py
diff --git a/apps/chat/flow/step_node/function_lib_node/i_function_lib_node.py b/apps/application/flow/step_node/function_lib_node/i_function_lib_node.py
similarity index 96%
rename from apps/chat/flow/step_node/function_lib_node/i_function_lib_node.py
rename to apps/application/flow/step_node/function_lib_node/i_function_lib_node.py
index d71edf75a86..6bb96eddbb9 100644
--- a/apps/chat/flow/step_node/function_lib_node/i_function_lib_node.py
+++ b/apps/application/flow/step_node/function_lib_node/i_function_lib_node.py
@@ -11,7 +11,7 @@
from django.db.models import QuerySet
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from common.field.common import ObjectField
from tools.models.tool import Tool
diff --git a/apps/chat/flow/step_node/function_lib_node/impl/__init__.py b/apps/application/flow/step_node/function_lib_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/function_lib_node/impl/__init__.py
rename to apps/application/flow/step_node/function_lib_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/function_lib_node/impl/base_function_lib_node.py b/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py
similarity index 97%
rename from apps/chat/flow/step_node/function_lib_node/impl/base_function_lib_node.py
rename to apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py
index 4f567d8183a..20727388900 100644
--- a/apps/chat/flow/step_node/function_lib_node/impl/base_function_lib_node.py
+++ b/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py
@@ -13,8 +13,8 @@
from django.db.models import QuerySet
from django.utils.translation import gettext as _
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.function_lib_node.i_function_lib_node import IFunctionLibNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.function_lib_node.i_function_lib_node import IFunctionLibNode
from common.exception.app_exception import AppApiException
from common.utils.function_code import FunctionExecutor
from common.utils.rsa_util import rsa_long_decrypt
diff --git a/apps/chat/flow/step_node/function_node/__init__.py b/apps/application/flow/step_node/function_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/function_node/__init__.py
rename to apps/application/flow/step_node/function_node/__init__.py
diff --git a/apps/chat/flow/step_node/function_node/i_function_node.py b/apps/application/flow/step_node/function_node/i_function_node.py
similarity index 97%
rename from apps/chat/flow/step_node/function_node/i_function_node.py
rename to apps/application/flow/step_node/function_node/i_function_node.py
index 85722e3d74b..e25d4cfef13 100644
--- a/apps/chat/flow/step_node/function_node/i_function_node.py
+++ b/apps/application/flow/step_node/function_node/i_function_node.py
@@ -12,7 +12,7 @@
from django.core import validators
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from common.exception.app_exception import AppApiException
from common.field.common import ObjectField
diff --git a/apps/chat/flow/step_node/function_node/impl/__init__.py b/apps/application/flow/step_node/function_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/function_node/impl/__init__.py
rename to apps/application/flow/step_node/function_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/function_node/impl/base_function_node.py b/apps/application/flow/step_node/function_node/impl/base_function_node.py
similarity index 96%
rename from apps/chat/flow/step_node/function_node/impl/base_function_node.py
rename to apps/application/flow/step_node/function_node/impl/base_function_node.py
index be342c5b4db..149e2b4b739 100644
--- a/apps/chat/flow/step_node/function_node/impl/base_function_node.py
+++ b/apps/application/flow/step_node/function_node/impl/base_function_node.py
@@ -10,8 +10,8 @@
import time
from typing import Dict
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.function_node.i_function_node import IFunctionNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.function_node.i_function_node import IFunctionNode
from common.utils.function_code import FunctionExecutor
from maxkb.const import CONFIG
diff --git a/apps/chat/flow/step_node/image_generate_step_node/__init__.py b/apps/application/flow/step_node/image_generate_step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/image_generate_step_node/__init__.py
rename to apps/application/flow/step_node/image_generate_step_node/__init__.py
diff --git a/apps/chat/flow/step_node/image_generate_step_node/i_image_generate_node.py b/apps/application/flow/step_node/image_generate_step_node/i_image_generate_node.py
similarity index 96%
rename from apps/chat/flow/step_node/image_generate_step_node/i_image_generate_node.py
rename to apps/application/flow/step_node/image_generate_step_node/i_image_generate_node.py
index 400b3b3b9d3..5ea2afad2dd 100644
--- a/apps/chat/flow/step_node/image_generate_step_node/i_image_generate_node.py
+++ b/apps/application/flow/step_node/image_generate_step_node/i_image_generate_node.py
@@ -5,7 +5,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class ImageGenerateNodeSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/image_generate_step_node/impl/__init__.py b/apps/application/flow/step_node/image_generate_step_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/image_generate_step_node/impl/__init__.py
rename to apps/application/flow/step_node/image_generate_step_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
similarity index 97%
rename from apps/chat/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
rename to apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
index 6a8d8daa96a..f6c6c4ba7d2 100644
--- a/apps/chat/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
+++ b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py
@@ -5,8 +5,8 @@
import requests
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.image_generate_step_node.i_image_generate_node import IImageGenerateNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.image_generate_step_node.i_image_generate_node import IImageGenerateNode
from common.utils.common import bytes_to_uploaded_file
from knowledge.serializers.file import FileSerializer
from models_provider.tools import get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/image_understand_step_node/__init__.py b/apps/application/flow/step_node/image_understand_step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/image_understand_step_node/__init__.py
rename to apps/application/flow/step_node/image_understand_step_node/__init__.py
diff --git a/apps/chat/flow/step_node/image_understand_step_node/i_image_understand_node.py b/apps/application/flow/step_node/image_understand_step_node/i_image_understand_node.py
similarity index 97%
rename from apps/chat/flow/step_node/image_understand_step_node/i_image_understand_node.py
rename to apps/application/flow/step_node/image_understand_step_node/i_image_understand_node.py
index b31cdcc18b0..1803fbea327 100644
--- a/apps/chat/flow/step_node/image_understand_step_node/i_image_understand_node.py
+++ b/apps/application/flow/step_node/image_understand_step_node/i_image_understand_node.py
@@ -4,7 +4,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/image_understand_step_node/impl/__init__.py b/apps/application/flow/step_node/image_understand_step_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/image_understand_step_node/impl/__init__.py
rename to apps/application/flow/step_node/image_understand_step_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py
similarity index 98%
rename from apps/chat/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py
rename to apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py
index b14bda21588..2296f34e375 100644
--- a/apps/chat/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py
+++ b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py
@@ -8,8 +8,8 @@
from django.db.models import QuerySet
from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage, AIMessage
-from chat.flow.i_step_node import NodeResult, INode
-from chat.flow.step_node.image_understand_step_node.i_image_understand_node import IImageUnderstandNode
+from application.flow.i_step_node import NodeResult, INode
+from application.flow.step_node.image_understand_step_node.i_image_understand_node import IImageUnderstandNode
from knowledge.models import File
from models_provider.tools import get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/mcp_node/__init__.py b/apps/application/flow/step_node/mcp_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/mcp_node/__init__.py
rename to apps/application/flow/step_node/mcp_node/__init__.py
diff --git a/apps/chat/flow/step_node/mcp_node/i_mcp_node.py b/apps/application/flow/step_node/mcp_node/i_mcp_node.py
similarity index 94%
rename from apps/chat/flow/step_node/mcp_node/i_mcp_node.py
rename to apps/application/flow/step_node/mcp_node/i_mcp_node.py
index 598b93582cf..ba693a543cd 100644
--- a/apps/chat/flow/step_node/mcp_node/i_mcp_node.py
+++ b/apps/application/flow/step_node/mcp_node/i_mcp_node.py
@@ -5,7 +5,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class McpNodeSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/mcp_node/impl/__init__.py b/apps/application/flow/step_node/mcp_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/mcp_node/impl/__init__.py
rename to apps/application/flow/step_node/mcp_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/mcp_node/impl/base_mcp_node.py b/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py
similarity index 95%
rename from apps/chat/flow/step_node/mcp_node/impl/base_mcp_node.py
rename to apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py
index 408a9dc9385..e49ef7019f6 100644
--- a/apps/chat/flow/step_node/mcp_node/impl/base_mcp_node.py
+++ b/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py
@@ -5,8 +5,8 @@
from langchain_mcp_adapters.client import MultiServerMCPClient
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.mcp_node.i_mcp_node import IMcpNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.mcp_node.i_mcp_node import IMcpNode
class BaseMcpNode(IMcpNode):
diff --git a/apps/chat/flow/step_node/question_node/__init__.py b/apps/application/flow/step_node/question_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/question_node/__init__.py
rename to apps/application/flow/step_node/question_node/__init__.py
diff --git a/apps/chat/flow/step_node/question_node/i_question_node.py b/apps/application/flow/step_node/question_node/i_question_node.py
similarity index 96%
rename from apps/chat/flow/step_node/question_node/i_question_node.py
rename to apps/application/flow/step_node/question_node/i_question_node.py
index a6a66e158bf..74153bbfb84 100644
--- a/apps/chat/flow/step_node/question_node/i_question_node.py
+++ b/apps/application/flow/step_node/question_node/i_question_node.py
@@ -11,7 +11,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class QuestionNodeSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/question_node/impl/__init__.py b/apps/application/flow/step_node/question_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/question_node/impl/__init__.py
rename to apps/application/flow/step_node/question_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/question_node/impl/base_question_node.py b/apps/application/flow/step_node/question_node/impl/base_question_node.py
similarity index 98%
rename from apps/chat/flow/step_node/question_node/impl/base_question_node.py
rename to apps/application/flow/step_node/question_node/impl/base_question_node.py
index 96788cceb8c..c1463223084 100644
--- a/apps/chat/flow/step_node/question_node/impl/base_question_node.py
+++ b/apps/application/flow/step_node/question_node/impl/base_question_node.py
@@ -15,8 +15,8 @@
from langchain.schema import HumanMessage, SystemMessage
from langchain_core.messages import BaseMessage
-from chat.flow.i_step_node import NodeResult, INode
-from chat.flow.step_node.question_node.i_question_node import IQuestionNode
+from application.flow.i_step_node import NodeResult, INode
+from application.flow.step_node.question_node.i_question_node import IQuestionNode
from models_provider.models import Model
from models_provider.tools import get_model_instance_by_model_user_id, get_model_credential
diff --git a/apps/chat/flow/step_node/reranker_node/__init__.py b/apps/application/flow/step_node/reranker_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/reranker_node/__init__.py
rename to apps/application/flow/step_node/reranker_node/__init__.py
diff --git a/apps/chat/flow/step_node/reranker_node/i_reranker_node.py b/apps/application/flow/step_node/reranker_node/i_reranker_node.py
similarity index 97%
rename from apps/chat/flow/step_node/reranker_node/i_reranker_node.py
rename to apps/application/flow/step_node/reranker_node/i_reranker_node.py
index e43a319cbd8..f2e87a47e2f 100644
--- a/apps/chat/flow/step_node/reranker_node/i_reranker_node.py
+++ b/apps/application/flow/step_node/reranker_node/i_reranker_node.py
@@ -10,7 +10,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/reranker_node/impl/__init__.py b/apps/application/flow/step_node/reranker_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/reranker_node/impl/__init__.py
rename to apps/application/flow/step_node/reranker_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/reranker_node/impl/base_reranker_node.py b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py
similarity index 97%
rename from apps/chat/flow/step_node/reranker_node/impl/base_reranker_node.py
rename to apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py
index b8dd0f722eb..88c5b326ae7 100644
--- a/apps/chat/flow/step_node/reranker_node/impl/base_reranker_node.py
+++ b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py
@@ -10,8 +10,8 @@
from langchain_core.documents import Document
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.reranker_node.i_reranker_node import IRerankerNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.reranker_node.i_reranker_node import IRerankerNode
from models_provider.tools import get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/search_dataset_node/__init__.py b/apps/application/flow/step_node/search_dataset_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/search_dataset_node/__init__.py
rename to apps/application/flow/step_node/search_dataset_node/__init__.py
diff --git a/apps/chat/flow/step_node/search_dataset_node/i_search_dataset_node.py b/apps/application/flow/step_node/search_dataset_node/i_search_dataset_node.py
similarity index 98%
rename from apps/chat/flow/step_node/search_dataset_node/i_search_dataset_node.py
rename to apps/application/flow/step_node/search_dataset_node/i_search_dataset_node.py
index 341dd6ddf3b..4e35df893a6 100644
--- a/apps/chat/flow/step_node/search_dataset_node/i_search_dataset_node.py
+++ b/apps/application/flow/step_node/search_dataset_node/i_search_dataset_node.py
@@ -12,7 +12,7 @@
from django.core import validators
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from common.utils.common import flat_map
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/search_dataset_node/impl/__init__.py b/apps/application/flow/step_node/search_dataset_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/search_dataset_node/impl/__init__.py
rename to apps/application/flow/step_node/search_dataset_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py b/apps/application/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py
similarity index 97%
rename from apps/chat/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py
rename to apps/application/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py
index fde6bf77586..74e69c06d04 100644
--- a/apps/chat/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py
+++ b/apps/application/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py
@@ -11,8 +11,8 @@
from django.db.models import QuerySet
from django.db import connection
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.search_dataset_node.i_search_dataset_node import ISearchDatasetStepNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.search_dataset_node.i_search_dataset_node import ISearchDatasetStepNode
from common.config.embedding_config import VectorStore
from common.db.search import native_search
from common.utils.common import get_file_content
diff --git a/apps/chat/flow/step_node/speech_to_text_step_node/__init__.py b/apps/application/flow/step_node/speech_to_text_step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/speech_to_text_step_node/__init__.py
rename to apps/application/flow/step_node/speech_to_text_step_node/__init__.py
diff --git a/apps/chat/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py b/apps/application/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py
similarity index 96%
rename from apps/chat/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py
rename to apps/application/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py
index c2a25a21671..8577a1d5fe6 100644
--- a/apps/chat/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py
+++ b/apps/application/flow/step_node/speech_to_text_step_node/i_speech_to_text_node.py
@@ -4,7 +4,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/speech_to_text_step_node/impl/__init__.py b/apps/application/flow/step_node/speech_to_text_step_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/speech_to_text_step_node/impl/__init__.py
rename to apps/application/flow/step_node/speech_to_text_step_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py b/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py
similarity index 94%
rename from apps/chat/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py
rename to apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py
index 6b14499fb8b..403457b87b7 100644
--- a/apps/chat/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py
+++ b/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py
@@ -5,8 +5,8 @@
from django.db.models import QuerySet
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.speech_to_text_step_node.i_speech_to_text_node import ISpeechToTextNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.speech_to_text_step_node.i_speech_to_text_node import ISpeechToTextNode
from common.utils.common import split_and_transcribe, any_to_mp3
from knowledge.models import File
from models_provider.tools import get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/start_node/__init__.py b/apps/application/flow/step_node/start_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/start_node/__init__.py
rename to apps/application/flow/step_node/start_node/__init__.py
diff --git a/apps/chat/flow/step_node/start_node/i_start_node.py b/apps/application/flow/step_node/start_node/i_start_node.py
similarity index 85%
rename from apps/chat/flow/step_node/start_node/i_start_node.py
rename to apps/application/flow/step_node/start_node/i_start_node.py
index 1a93a27f9b6..41d73f21811 100644
--- a/apps/chat/flow/step_node/start_node/i_start_node.py
+++ b/apps/application/flow/step_node/start_node/i_start_node.py
@@ -7,7 +7,7 @@
@desc:
"""
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class IStarNode(INode):
diff --git a/apps/chat/flow/step_node/start_node/impl/__init__.py b/apps/application/flow/step_node/start_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/start_node/impl/__init__.py
rename to apps/application/flow/step_node/start_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/start_node/impl/base_start_node.py b/apps/application/flow/step_node/start_node/impl/base_start_node.py
similarity index 96%
rename from apps/chat/flow/step_node/start_node/impl/base_start_node.py
rename to apps/application/flow/step_node/start_node/impl/base_start_node.py
index 71416fadcb1..24b9684714e 100644
--- a/apps/chat/flow/step_node/start_node/impl/base_start_node.py
+++ b/apps/application/flow/step_node/start_node/impl/base_start_node.py
@@ -12,8 +12,8 @@
from rest_framework import serializers
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.start_node.i_start_node import IStarNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.start_node.i_start_node import IStarNode
def get_default_global_variable(input_field_list: List):
diff --git a/apps/chat/flow/step_node/text_to_speech_step_node/__init__.py b/apps/application/flow/step_node/text_to_speech_step_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/text_to_speech_step_node/__init__.py
rename to apps/application/flow/step_node/text_to_speech_step_node/__init__.py
diff --git a/apps/chat/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py b/apps/application/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py
similarity index 95%
rename from apps/chat/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py
rename to apps/application/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py
index f5d40a711a6..539c8dbb536 100644
--- a/apps/chat/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py
+++ b/apps/application/flow/step_node/text_to_speech_step_node/i_text_to_speech_node.py
@@ -4,7 +4,7 @@
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
from django.utils.translation import gettext_lazy as _
diff --git a/apps/chat/flow/step_node/text_to_speech_step_node/impl/__init__.py b/apps/application/flow/step_node/text_to_speech_step_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/text_to_speech_step_node/impl/__init__.py
rename to apps/application/flow/step_node/text_to_speech_step_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py
similarity index 94%
rename from apps/chat/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py
rename to apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py
index 41d74991940..5191b367627 100644
--- a/apps/chat/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py
+++ b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py
@@ -4,8 +4,8 @@
from django.core.files.uploadedfile import InMemoryUploadedFile
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.text_to_speech_step_node.i_text_to_speech_node import ITextToSpeechNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.text_to_speech_step_node.i_text_to_speech_node import ITextToSpeechNode
from knowledge.serializers.file import FileSerializer
from models_provider.tools import get_model_instance_by_model_user_id
diff --git a/apps/chat/flow/step_node/variable_assign_node/__init__.py b/apps/application/flow/step_node/variable_assign_node/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/variable_assign_node/__init__.py
rename to apps/application/flow/step_node/variable_assign_node/__init__.py
diff --git a/apps/chat/flow/step_node/variable_assign_node/i_variable_assign_node.py b/apps/application/flow/step_node/variable_assign_node/i_variable_assign_node.py
similarity index 92%
rename from apps/chat/flow/step_node/variable_assign_node/i_variable_assign_node.py
rename to apps/application/flow/step_node/variable_assign_node/i_variable_assign_node.py
index 06c7d9e95ae..1eb21266c83 100644
--- a/apps/chat/flow/step_node/variable_assign_node/i_variable_assign_node.py
+++ b/apps/application/flow/step_node/variable_assign_node/i_variable_assign_node.py
@@ -5,7 +5,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-from chat.flow.i_step_node import INode, NodeResult
+from application.flow.i_step_node import INode, NodeResult
class VariableAssignNodeParamsSerializer(serializers.Serializer):
diff --git a/apps/chat/flow/step_node/variable_assign_node/impl/__init__.py b/apps/application/flow/step_node/variable_assign_node/impl/__init__.py
similarity index 100%
rename from apps/chat/flow/step_node/variable_assign_node/impl/__init__.py
rename to apps/application/flow/step_node/variable_assign_node/impl/__init__.py
diff --git a/apps/chat/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py b/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py
similarity index 94%
rename from apps/chat/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py
rename to apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py
index b964715fed6..ce2906e6293 100644
--- a/apps/chat/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py
+++ b/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py
@@ -2,8 +2,8 @@
import json
from typing import List
-from chat.flow.i_step_node import NodeResult
-from chat.flow.step_node.variable_assign_node.i_variable_assign_node import IVariableAssignNode
+from application.flow.i_step_node import NodeResult
+from application.flow.step_node.variable_assign_node.i_variable_assign_node import IVariableAssignNode
class BaseVariableAssignNode(IVariableAssignNode):
diff --git a/apps/chat/flow/tools.py b/apps/application/flow/tools.py
similarity index 99%
rename from apps/chat/flow/tools.py
rename to apps/application/flow/tools.py
index 31fada47ace..de9d4add096 100644
--- a/apps/chat/flow/tools.py
+++ b/apps/application/flow/tools.py
@@ -12,7 +12,7 @@
from django.http import StreamingHttpResponse
from langchain_core.messages import BaseMessageChunk, BaseMessage
-from chat.flow.i_step_node import WorkFlowPostHandler
+from application.flow.i_step_node import WorkFlowPostHandler
from common.result import result
diff --git a/apps/chat/flow/workflow_manage.py b/apps/application/flow/workflow_manage.py
similarity index 99%
rename from apps/chat/flow/workflow_manage.py
rename to apps/application/flow/workflow_manage.py
index 3a251b5bd1c..d0e96680f44 100644
--- a/apps/chat/flow/workflow_manage.py
+++ b/apps/application/flow/workflow_manage.py
@@ -23,9 +23,9 @@
from rest_framework import status
from rest_framework.exceptions import ErrorDetail, ValidationError
-from chat.flow import tools
-from chat.flow.i_step_node import INode, WorkFlowPostHandler, NodeResult
-from chat.flow.step_node import get_node
+from application.flow import tools
+from application.flow.i_step_node import INode, WorkFlowPostHandler, NodeResult
+from application.flow.step_node import get_node
from common.exception.app_exception import AppApiException
from common.handle.base_to_response import BaseToResponse
from common.handle.impl.response.system_to_response import SystemToResponse
diff --git a/apps/application/serializers/application.py b/apps/application/serializers/application.py
index 75b9432ae4f..4d2e41ed490 100644
--- a/apps/application/serializers/application.py
+++ b/apps/application/serializers/application.py
@@ -25,7 +25,7 @@
from application.models.application import Application, ApplicationTypeChoices, ApplicationKnowledgeMapping, \
ApplicationFolder, WorkFlowVersion
from application.models.application_access_token import ApplicationAccessToken
-from chat.flow.workflow_manage import Flow
+from application.flow.workflow_manage import Flow
from common import result
from common.database_model_manage.database_model_manage import DatabaseModelManage
from common.db.search import native_search, native_page_search
diff --git a/apps/application/serializers/application_version.py b/apps/application/serializers/application_version.py
new file mode 100644
index 00000000000..569542f75df
--- /dev/null
+++ b/apps/application/serializers/application_version.py
@@ -0,0 +1,89 @@
+# coding=utf-8
+"""
+ @project: MaxKB
+ @Author:虎虎
+ @file: application_version.py
+ @date:2025/6/3 16:25
+ @desc:
+"""
+from typing import Dict
+
+from django.db.models import QuerySet
+from rest_framework import serializers
+from django.utils.translation import gettext_lazy as _
+
+from application.models import WorkFlowVersion
+from common.db.search import page_search
+from common.exception.app_exception import AppApiException
+
+
+class ApplicationVersionQuerySerializer(serializers.Serializer):
+ application_id = serializers.UUIDField(required=True, label=_("Application ID"))
+ name = serializers.CharField(required=False, allow_null=True, allow_blank=True,
+ label=_("summary"))
+
+
+class ApplicationVersionModelSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = WorkFlowVersion
+ fields = ['id', 'name', 'application_id', 'work_flow', 'publish_user_id', 'publish_user_name', 'create_time',
+ 'update_time']
+
+
+class ApplicationVersionEditSerializer(serializers.Serializer):
+ name = serializers.CharField(required=False, max_length=128, allow_null=True, allow_blank=True,
+ label=_("Version Name"))
+
+
+class ApplicationVersionSerializer(serializers.Serializer):
+ class Query(serializers.Serializer):
+
+ def get_query_set(self):
+ query_set = QuerySet(WorkFlowVersion).filter(application_id=self.data.get('application_id'))
+ if 'name' in self.data and self.data.get('name') is not None:
+ query_set = query_set.filter(name__contains=self.data.get('name'))
+ return query_set.order_by("-create_time")
+
+ def list(self, instance, with_valid=True):
+ if with_valid:
+ self.is_valid(raise_exception=True)
+ ApplicationVersionQuerySerializer(data=instance).is_valid(raise_exception=True)
+ query_set = self.get_query_set()
+ return [ApplicationVersionModelSerializer(v).data for v in query_set]
+
+ def page(self, current_page, page_size, with_valid=True):
+ if with_valid:
+ self.is_valid(raise_exception=True)
+ return page_search(current_page, page_size,
+ self.get_query_set(),
+ post_records_handler=lambda v: ApplicationVersionModelSerializer(v).data)
+
+ class Operate(serializers.Serializer):
+ application_id = serializers.UUIDField(required=True, label=_("Application ID"))
+ work_flow_version_id = serializers.UUIDField(required=True,
+ label=_("Workflow version id"))
+
+ def one(self, with_valid=True):
+ if with_valid:
+ self.is_valid(raise_exception=True)
+ work_flow_version = QuerySet(WorkFlowVersion).filter(application_id=self.data.get('application_id'),
+ id=self.data.get('work_flow_version_id')).first()
+ if work_flow_version is not None:
+ return ApplicationVersionModelSerializer(work_flow_version).data
+ else:
+ raise AppApiException(500, _('Workflow version does not exist'))
+
+ def edit(self, instance: Dict, with_valid=True):
+ if with_valid:
+ self.is_valid(raise_exception=True)
+ ApplicationVersionEditSerializer(data=instance).is_valid(raise_exception=True)
+ work_flow_version = QuerySet(WorkFlowVersion).filter(application_id=self.data.get('application_id'),
+ id=self.data.get('work_flow_version_id')).first()
+ if work_flow_version is not None:
+ name = instance.get('name', None)
+ if name is not None and len(name) > 0:
+ work_flow_version.name = name
+ work_flow_version.save()
+ return ApplicationVersionModelSerializer(work_flow_version).data
+ else:
+ raise AppApiException(500, _('Workflow version does not exist'))
diff --git a/apps/application/urls.py b/apps/application/urls.py
index 96cf40cb423..320f90bb4b3 100644
--- a/apps/application/urls.py
+++ b/apps/application/urls.py
@@ -10,6 +10,7 @@
path('workspace//application/import', views.Application.Import.as_view()),
path('workspace//application//',
views.Application.Page.as_view(), name='application_page'),
+ path('workspace//application/', views.Application.Operate.as_view()),
path('workspace//application//application_key',
views.ApplicationKey.as_view()),
path('workspace//application//export', views.Application.Export.as_view()),
diff --git a/apps/application/views/application.py b/apps/application/views/application.py
index 89244b10537..41d053b49fa 100644
--- a/apps/application/views/application.py
+++ b/apps/application/views/application.py
@@ -8,7 +8,6 @@
"""
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
-from rest_framework.decorators import action
from rest_framework.parsers import MultiPartParser
from rest_framework.request import Request
from rest_framework.views import APIView
@@ -94,12 +93,11 @@ def post(self, request: Request, workspace_id: str):
class Export(APIView):
authentication_classes = [TokenAuth]
- @action(methods=['POST'], detail=False)
@extend_schema(
methods=['POST'],
- description=_('Export conversation'),
- summary=_('Export conversation'),
- operation_id=_('Export conversation'), # type: ignore
+ description=_('Export application'),
+ summary=_('Export application'),
+ operation_id=_('Export application'), # type: ignore
parameters=ApplicationExportAPI.get_parameters(),
responses=ApplicationExportAPI.get_response(),
tags=[_('Application')] # type: ignore
@@ -123,7 +121,7 @@ class Operate(APIView):
tags=[_('Application')] # type: ignore
)
@has_permissions(PermissionConstants.APPLICATION_DELETE.get_workspace_application_permission())
- def delete(self, request: Request, application_id: str):
+ def delete(self, request: Request, workspace_id: str, application_id: str):
return result.success(ApplicationOperateSerializer(
data={'application_id': application_id, 'user_id': request.user.id}).delete(
with_valid=True))
@@ -139,14 +137,14 @@ def delete(self, request: Request, application_id: str):
tags=[_('Application')] # type: ignore
)
@has_permissions(PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission())
- def put(self, request: Request, application_id: str):
+ def put(self, request: Request, workspace_id: str, application_id: str):
return result.success(
ApplicationOperateSerializer(
data={'application_id': application_id, 'user_id': request.user.id}).edit(
request.data))
@extend_schema(
- methods=['PUT'],
+ methods=['GET'],
description=_('Get application details'),
summary=_('Get application details'),
operation_id=_('Get application details'), # type: ignore
@@ -156,6 +154,24 @@ def put(self, request: Request, application_id: str):
tags=[_('Application')] # type: ignore
)
@has_permissions(PermissionConstants.WORKSPACE_READ.get_workspace_application_permission())
- def get(self, request: Request, application_id: str):
+ def get(self, request: Request, workspace_id: str, application_id: str):
return result.success(ApplicationOperateSerializer(
data={'application_id': application_id, 'user_id': request.user.id}).one())
+
+ class Publish(APIView):
+ authentication_classes = [TokenAuth]
+
+ @extend_schema(
+ methods=['PUT'],
+ description=_("Publishing an application"),
+ summary=_("Publishing an application"),
+ operation_id=_("Publishing an application"), # type: ignore
+ parameters=ApplicationOperateAPI.get_parameters(),
+ request=ApplicationEditAPI.get_request(),
+ responses=result.DefaultResultSerializer,
+ tags=[_('Application')] # type: ignore
+ )
+ def put(self, request: Request, application_id: str):
+ return result.success(
+ ApplicationOperateSerializer(
+ data={'application_id': application_id, 'user_id': request.user.id}).publish(request.data))
diff --git a/apps/application/views/application_version.py b/apps/application/views/application_version.py
new file mode 100644
index 00000000000..0bb6b705b0e
--- /dev/null
+++ b/apps/application/views/application_version.py
@@ -0,0 +1,98 @@
+# coding=utf-8
+"""
+ @project: MaxKB
+ @Author:虎虎
+ @file: application_version.py.py
+ @date:2025/6/3 15:46
+ @desc:
+"""
+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.serializers.application_version import ApplicationVersionSerializer
+from common import result
+from common.auth import TokenAuth
+from common.auth.authentication import has_permissions
+from common.constants.permission_constants import PermissionConstants
+
+
+class ApplicationVersionView(APIView):
+ authentication_classes = [TokenAuth]
+
+ @extend_schema(
+ methods=['POST'],
+ description=_("Get the application list"),
+ summary=_("Get the application list"),
+ operation_id=_("Get the application list"), # type: ignore
+ # parameters=ApplicationCreateAPI.get_parameters(),
+ # request=ApplicationCreateAPI.get_request(),
+ # responses=ApplicationCreateAPI.get_response(),
+ tags=[_('Application/Version')] # type: ignore
+ )
+ @has_permissions(PermissionConstants.APPLICATION_READ)
+ def get(self, request: Request, workspace_id, application_id: str):
+ return result.success(
+ ApplicationVersionSerializer.Query(
+ data={'name': request.query_params.get('name'), 'user_id': request.user.id,
+ 'application_id': application_id}).list(request.data))
+
+ class Page(APIView):
+ authentication_classes = [TokenAuth]
+
+ @extend_schema(
+ methods=['GET'
+ ''],
+ description=_("Get the list of application versions by page"),
+ summary=_("Get the list of application versions by page"),
+ operation_id=_("Get the list of application versions by page"), # type: ignore
+ # parameters=ApplicationCreateAPI.get_parameters(),
+ # request=ApplicationCreateAPI.get_request(),
+ # responses=ApplicationCreateAPI.get_response(),
+ tags=[_('Application/Version')] # type: ignore
+ )
+ @has_permissions(PermissionConstants.APPLICATION_READ)
+ def get(self, request: Request, application_id: str, current_page: int, page_size: int):
+ return result.success(
+ ApplicationVersionSerializer.Query(
+ data={'name': request.query_params.get('name'), 'user_id': request.user,
+ 'application_id': application_id}).page(
+ current_page, page_size))
+
+ class Operate(APIView):
+ authentication_classes = [TokenAuth]
+
+ @extend_schema(
+ methods=['GET'],
+ description=_("Get application version details"),
+ summary=_("Get application version details"),
+ operation_id=_("Get application version details"), # type: ignore
+ # parameters=ApplicationCreateAPI.get_parameters(),
+ # request=ApplicationCreateAPI.get_request(),
+ # responses=ApplicationCreateAPI.get_response(),
+ tags=[_('Application/Version')] # type: ignore
+ )
+ @has_permissions(PermissionConstants.APPLICATION_READ)
+ def get(self, request: Request, application_id: str, work_flow_version_id: str):
+ return result.success(
+ ApplicationVersionSerializer.Operate(
+ data={'user_id': request.user,
+ 'application_id': application_id, 'work_flow_version_id': work_flow_version_id}).one())
+
+ @extend_schema(
+ methods=['PUT'],
+ description=_("Modify application version information"),
+ summary=_("Modify application version information"),
+ operation_id=_("Modify application version information"), # type: ignore
+ # parameters=ApplicationCreateAPI.get_parameters(),
+ # request=ApplicationCreateAPI.get_request(),
+ # responses=ApplicationCreateAPI.get_response(),
+ tags=[_('Application/Version')] # type: ignore
+ )
+ def put(self, request: Request, application_id: str, work_flow_version_id: str):
+ return result.success(
+ ApplicationVersionSerializer.Operate(
+ data={'application_id': application_id, 'work_flow_version_id': work_flow_version_id,
+ 'user_id': request.user.id}).edit(
+ request.data))
diff --git a/apps/chat/views/chat_embed.py b/apps/chat/views/chat_embed.py
index 997ff5e9806..24b036227ec 100644
--- a/apps/chat/views/chat_embed.py
+++ b/apps/chat/views/chat_embed.py
@@ -19,12 +19,12 @@ class ChatEmbedView(APIView):
@extend_schema(
methods=['GET'],
- description=_('Import Application'),
- summary=_('Import Application'),
- operation_id=_('Import Application'), # type: ignore
+ description=_('Get embedded js'),
+ summary=_('Get embedded js'),
+ operation_id=_('Get embedded js'), # type: ignore
parameters=ChatEmbedAPI.get_parameters(),
responses=ChatEmbedAPI.get_response(),
- tags=[_('Application')] # type: ignore
+ tags=[_('Chat')] # type: ignore
)
def get(self, request: Request):
return ChatEmbedSerializer(
diff --git a/apps/system_manage/api/user_resource_permission.py b/apps/system_manage/api/user_resource_permission.py
index 80313cbf6e4..4af8da3254b 100644
--- a/apps/system_manage/api/user_resource_permission.py
+++ b/apps/system_manage/api/user_resource_permission.py
@@ -30,7 +30,14 @@ def get_parameters():
type=OpenApiTypes.STR,
location='path',
required=True,
- )
+ ),
+ OpenApiParameter(
+ name="user_id",
+ description="用户id",
+ type=OpenApiTypes.STR,
+ location='path',
+ required=True,
+ ),
]
@staticmethod
diff --git a/apps/system_manage/serializers/user_resource_permission.py b/apps/system_manage/serializers/user_resource_permission.py
index 6b9033da304..fa159fd1cb3 100644
--- a/apps/system_manage/serializers/user_resource_permission.py
+++ b/apps/system_manage/serializers/user_resource_permission.py
@@ -14,6 +14,7 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
+from application.models import Application
from common.constants.cache_version import Cache_Version
from common.constants.permission_constants import get_default_workspace_user_role_mapping_list, RoleConstants, \
ResourcePermissionGroup, ResourcePermissionRole, ResourceAuthType
@@ -63,7 +64,7 @@ def is_valid(self, *, workspace_id=None, raise_exception=False):
illegal_target_id_list = select_list(
get_file_content(
os.path.join(PROJECT_DIR, "apps", "system_manage", 'sql', 'check_member_permission_target_exists.sql')),
- [json.dumps(user_resource_permission_list), workspace_id])
+ [json.dumps(user_resource_permission_list), workspace_id, workspace_id])
if illegal_target_id_list is not None and len(illegal_target_id_list) > 0:
raise AppApiException(500,
_('Non-existent application|knowledge base id[') + str(illegal_target_id_list) + ']')
@@ -71,11 +72,14 @@ def is_valid(self, *, workspace_id=None, raise_exception=False):
class UserResourcePermissionSerializer(serializers.Serializer):
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
+ user_id = serializers.CharField(required=True, label=_('user id'))
def get_queryset(self):
return {
"knowledge_query_set": QuerySet(Knowledge)
.filter(workspace_id=self.data.get('workspace_id')),
+ 'application_query_set': QuerySet(Application)
+ .filter(workspace_id=self.data.get('workspace_id')),
'workspace_user_resource_permission_query_set': QuerySet(WorkspaceUserResourcePermission).filter(
workspace_id=self.data.get('workspace_id'))
}
@@ -84,13 +88,14 @@ def list(self, user, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
workspace_id = self.data.get("workspace_id")
+ user_id = self.data.get("user_id")
# 用户权限列表
user_resource_permission_list = native_search(self.get_queryset(), get_file_content(
os.path.join(PROJECT_DIR, "apps", "system_manage", 'sql', 'get_user_resource_permission.sql')))
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
workspace_model = DatabaseModelManage.get_model("workspace_model")
if workspace_user_role_mapping_model and workspace_model:
- workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user.id,
+ workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user_id,
workspace_id=workspace_id)
else:
workspace_user_role_mapping_list = get_default_workspace_user_role_mapping_list([user.role])
@@ -119,6 +124,7 @@ def edit(self, instance, user, with_valid=True):
UpdateUserResourcePermissionRequest(data=instance).is_valid(raise_exception=True,
workspace_id=self.data.get('workspace_id'))
workspace_id = self.data.get("workspace_id")
+ user_id = self.data.get("user_id")
update_list = []
save_list = []
user_resource_permission_list = instance.get('user_resource_permission_list')
@@ -142,7 +148,7 @@ def edit(self, instance, user, with_valid=True):
user_resource_permission.get(
'permission').get(key)],
workspace_id=workspace_id,
- user_id=user.id,
+ user_id=user_id,
auth_type=user_resource_permission.get('auth_type')))
# 批量更新
QuerySet(WorkspaceUserResourcePermission).bulk_update(update_list, ['permission_list']) if len(
@@ -150,6 +156,6 @@ def edit(self, instance, user, with_valid=True):
# 批量插入
QuerySet(WorkspaceUserResourcePermission).bulk_create(save_list) if len(save_list) > 0 else None
version = Cache_Version.PERMISSION_LIST.get_version()
- key = Cache_Version.PERMISSION_LIST.get_key(user_id=str(user.id))
+ key = Cache_Version.PERMISSION_LIST.get_key(user_id=user_id)
cache.delete(key, version=version)
return True
diff --git a/apps/system_manage/sql/check_member_permission_target_exists.sql b/apps/system_manage/sql/check_member_permission_target_exists.sql
index 4e30b9e648d..5516054e31d 100644
--- a/apps/system_manage/sql/check_member_permission_target_exists.sql
+++ b/apps/system_manage/sql/check_member_permission_target_exists.sql
@@ -11,6 +11,13 @@ FROM
FROM
knowledge
WHERE workspace_id= %s
+ UNION
+ SELECT
+ "id",
+ 'APPLICATION' AS "auth_target_type"
+ FROM
+ application
+ WHERE workspace_id= %s
) "app_and_knowledge_temp"
ON "app_and_knowledge_temp"."id" = static_temp."target_id" and app_and_knowledge_temp."auth_target_type"=static_temp."auth_target_type"
WHERE app_and_knowledge_temp.id is NULL ;
\ No newline at end of file
diff --git a/apps/system_manage/sql/get_user_resource_permission.sql b/apps/system_manage/sql/get_user_resource_permission.sql
index 1f141f76577..ebdc06e89ef 100644
--- a/apps/system_manage/sql/get_user_resource_permission.sql
+++ b/apps/system_manage/sql/get_user_resource_permission.sql
@@ -6,9 +6,18 @@ FROM (SELECT "id",
'KNOWLEDGE' AS "auth_target_type",
user_id,
workspace_id,
- "type" AS "icon"
+ "type"::varchar AS "icon"
FROM knowledge
${knowledge_query_set}
+ UNION
+ SELECT "id",
+ "name",
+ 'APPLICATION' AS "auth_target_type",
+ user_id,
+ workspace_id,
+ icon
+ FROM application
+ ${application_query_set}
) app_or_knowledge
LEFT JOIN (SELECT *
FROM workspace_user_resource_permission
diff --git a/apps/system_manage/urls.py b/apps/system_manage/urls.py
index 88a3302e43f..dd8689c19c2 100644
--- a/apps/system_manage/urls.py
+++ b/apps/system_manage/urls.py
@@ -4,6 +4,7 @@
app_name = "system_manage"
urlpatterns = [
- path('workspace//user_resource_permission', views.WorkSpaceUserResourcePermissionView.as_view()),
+ path('workspace//user_resource_permission/user/',
+ views.WorkSpaceUserResourcePermissionView.as_view()),
path('email_setting', views.SystemSetting.Email.as_view()),
]
diff --git a/apps/system_manage/views/user_resource_permission.py b/apps/system_manage/views/user_resource_permission.py
index 41120e7802c..674d7fd17e7 100644
--- a/apps/system_manage/views/user_resource_permission.py
+++ b/apps/system_manage/views/user_resource_permission.py
@@ -33,9 +33,9 @@ class WorkSpaceUserResourcePermissionView(APIView):
tags=[_('Resources authorization')] # type: ignore
)
@has_permissions(PermissionConstants.WORKSPACE_USER_RESOURCE_PERMISSION_READ.get_workspace_permission())
- def get(self, request: Request, workspace_id: str):
+ def get(self, request: Request, workspace_id: str, user_id: str):
return result.success(UserResourcePermissionSerializer(
- data={'workspace_id': workspace_id}
+ data={'workspace_id': workspace_id, 'user_id': user_id}
).list(request.user))
@extend_schema(
@@ -47,7 +47,7 @@ def get(self, request: Request, workspace_id: str):
responses=DefaultResultSerializer(),
tags=[_('Resources authorization')] # type: ignore
)
- def put(self, request: Request, workspace_id: str):
+ def put(self, request: Request, workspace_id: str, user_id: str):
return result.success(UserResourcePermissionSerializer(
- data={'workspace_id': workspace_id}
+ data={'workspace_id': workspace_id, 'user_id': user_id}
).edit(request.data, request.user))
diff --git a/ui/src/api/user/resource-authorization.ts b/ui/src/api/user/resource-authorization.ts
index 2a1daea04f8..d7fcf302011 100644
--- a/ui/src/api/user/resource-authorization.ts
+++ b/ui/src/api/user/resource-authorization.ts
@@ -17,8 +17,11 @@ const getUserList: (workspace_id: String) => Promise> = (workspace_i
* 获取资源权限
* @query 参数
*/
-const getResourceAuthorization: (workspace_id: String) => Promise> = (workspace_id) => {
- return get(`${prefix}/${workspace_id}/user_resource_permission`)
+const getResourceAuthorization: (workspace_id: String, user_id: string) => Promise> = (
+ workspace_id,
+ user_id,
+) => {
+ return get(`${prefix}/${workspace_id}/user_resource_permission/user/${user_id}`)
}
/**
@@ -39,15 +42,16 @@ const getResourceAuthorization: (workspace_id: String) => Promise> =
]
}
*/
-const putResourceAuthorization: (workspace_id: String, body: any) => Promise> = (
- workspace_id,
- body,
-) => {
- return put(`${prefix}/${workspace_id}/user_resource_permission`, body)
+const putResourceAuthorization: (
+ workspace_id: String,
+ user_id: string,
+ body: any,
+) => Promise> = (workspace_id, user_id, body) => {
+ return put(`${prefix}/${workspace_id}/user_resource_permission/user/${user_id}`, body)
}
export default {
getResourceAuthorization,
putResourceAuthorization,
- getUserList
+ getUserList,
}
diff --git a/ui/src/enums/system.ts b/ui/src/enums/system.ts
index 627dc62c974..54a1a5ab172 100644
--- a/ui/src/enums/system.ts
+++ b/ui/src/enums/system.ts
@@ -1,6 +1,7 @@
export enum AuthorizationEnum {
MANAGE = 'MANAGE',
- USE = 'USE',
+ VIEW = 'VIEW',
+ ROLE = 'ROLE',
KNOWLEDGE = 'KNOWLEDGE',
- APPLICATION = 'APPLICATION'
+ APPLICATION = 'APPLICATION',
}
diff --git a/ui/src/views/resource-authorization/component/PermissionSetting.vue b/ui/src/views/resource-authorization/component/PermissionSetting.vue
index 6712c9bcf65..a3450b92952 100644
--- a/ui/src/views/resource-authorization/component/PermissionSetting.vue
+++ b/ui/src/views/resource-authorization/component/PermissionSetting.vue
@@ -30,7 +30,7 @@
class="mr-12"
/>
-
+
@@ -72,7 +72,7 @@
checkedOperateChange(AuthorizationEnum.MANAGE, row, e)"
/>
@@ -86,16 +86,16 @@
checkedOperateChange(AuthorizationEnum.USE, row, e)"
+ v-model="row.permission[AuthorizationEnum.VIEW]"
+ @change="(e: boolean) => checkedOperateChange(AuthorizationEnum.VIEW, row, e)"
/>
@@ -118,41 +118,41 @@ const props = defineProps({
manage: Boolean,
})
-const isDataset = computed(() => props.type === AuthorizationEnum.DATASET)
+const isKnowledge = computed(() => props.type === AuthorizationEnum.KNOWLEDGE)
const isApplication = computed(() => props.type === AuthorizationEnum.APPLICATION)
const emit = defineEmits(['update:data'])
const allChecked: any = ref({
[AuthorizationEnum.MANAGE]: computed({
get: () => {
- return filterData.value.some((item: any) => item.operate[AuthorizationEnum.MANAGE])
+ return filterData.value.some((item: any) => item.permission[AuthorizationEnum.MANAGE])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
- item.operate[AuthorizationEnum.MANAGE] = true
- item.operate[AuthorizationEnum.USE] = true
+ item.permission[AuthorizationEnum.MANAGE] = true
+ item.permission[AuthorizationEnum.VIEW] = true
})
} else {
filterData.value.map((item: any) => {
- item.operate[AuthorizationEnum.MANAGE] = false
+ item.permission[AuthorizationEnum.MANAGE] = false
})
}
},
}),
- [AuthorizationEnum.USE]: computed({
+ [AuthorizationEnum.VIEW]: computed({
get: () => {
- return filterData.value.some((item: any) => item.operate[AuthorizationEnum.USE])
+ return filterData.value.some((item: any) => item.permission[AuthorizationEnum.VIEW])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
- item.operate[AuthorizationEnum.USE] = true
+ item.permission[AuthorizationEnum.VIEW] = true
})
} else {
filterData.value.map((item: any) => {
- item.operate[AuthorizationEnum.USE] = false
- item.operate[AuthorizationEnum.MANAGE] = false
+ item.permission[AuthorizationEnum.VIEW] = false
+ item.permission[AuthorizationEnum.MANAGE] = false
})
}
},
@@ -168,32 +168,32 @@ const filterData = computed(() =>
const allIndeterminate: any = ref({
[AuthorizationEnum.MANAGE]: computed(() => {
const all_not_checked = filterData.value.every(
- (item: any) => !item.operate[AuthorizationEnum.MANAGE],
+ (item: any) => !item.permission[AuthorizationEnum.MANAGE],
)
if (all_not_checked) {
return false
}
- return !filterData.value.every((item: any) => item.operate[AuthorizationEnum.MANAGE])
+ return !filterData.value.every((item: any) => item.permission[AuthorizationEnum.MANAGE])
}),
- [AuthorizationEnum.USE]: computed(() => {
+ [AuthorizationEnum.VIEW]: computed(() => {
const all_not_checked = filterData.value.every(
- (item: any) => !item.operate[AuthorizationEnum.USE],
+ (item: any) => !item.permission[AuthorizationEnum.VIEW],
)
if (all_not_checked) {
return false
}
- return !filterData.value.every((item: any) => item.operate[AuthorizationEnum.USE])
+ return !filterData.value.every((item: any) => item.permission[AuthorizationEnum.VIEW])
}),
})
function checkedOperateChange(Name: string | number, row: any, e: boolean) {
props.data.map((item: any) => {
if (item.id === row.id) {
- item.operate[Name] = e
+ item.permission[Name] = e
if (Name === AuthorizationEnum.MANAGE && e) {
- item.operate[AuthorizationEnum.USE] = true
- } else if (Name === AuthorizationEnum.USE && !e) {
- item.operate[AuthorizationEnum.MANAGE] = false
+ item.permission[AuthorizationEnum.VIEW] = true
+ } else if (Name === AuthorizationEnum.VIEW && !e) {
+ item.permission[AuthorizationEnum.MANAGE] = false
}
}
})
diff --git a/ui/src/views/resource-authorization/index.vue b/ui/src/views/resource-authorization/index.vue
index 3bc2bbd7c7e..5398cc68fc5 100644
--- a/ui/src/views/resource-authorization/index.vue
+++ b/ui/src/views/resource-authorization/index.vue
@@ -78,9 +78,9 @@ const loading = ref(false)
const rLoading = ref(false)
const memberList = ref([]) // 全部成员
const filterMember = ref([]) // 搜索过滤后列表
-const currentUser = ref('')
-const currentType = ref('')
-
+const currentUser = ref('')
+const currentType = ref('')
+const workspace_id = ref('default')
const filterText = ref('')
const activeName = ref(AuthorizationEnum.KNOWLEDGE)
@@ -99,9 +99,9 @@ const settingTags = reactive([
},
])
-watch(filterText, (val) => {
+watch(filterText, (val: any) => {
if (val) {
- filterMember.value = memberList.value.filter((v) =>
+ filterMember.value = memberList.value.filter((v: any) =>
v.username.toLowerCase().includes(val.toLowerCase()),
)
} else {
@@ -116,21 +116,22 @@ function isManage(type: String) {
function submitPermissions() {
rLoading.value = true
const obj: any = {
- team_member_permission_list: [],
+ user_resource_permission_list: [],
}
- settingTags.map((item) => {
+ settingTags.map((item: any) => {
item.data.map((v: any) => {
- obj['team_member_permission_list'].push({
+ obj['user_resource_permission_list'].push({
target_id: v.id,
- type: v.type,
- operate: v.operate,
+ auth_target_type: v.auth_target_type,
+ permission: v.permission,
+ auth_type: 'RESOURCE_PERMISSION_GROUP',
})
})
})
- AuthorizationApi.putResourceAuthorization(currentUser.value, obj)
+ AuthorizationApi.putResourceAuthorization(workspace_id.value, currentUser.value, obj)
.then(() => {
MsgSuccess(t('common.submitSuccess'))
- ResourcePermissions(currentUser.value)
+ ResourcePermissions(workspace_id.value, currentUser.value)
})
.catch(() => {
rLoading.value = false
@@ -140,32 +141,32 @@ function submitPermissions() {
function clickMemberHandle(item: any) {
currentUser.value = item.id
currentType.value = item.type
- ResourcePermissions(item.id)
+ ResourcePermissions(workspace_id.value, item.id)
}
function getMember(id?: string) {
loading.value = true
- AuthorizationApi.getUserList()
+ AuthorizationApi.getUserList(workspace_id.value)
.then((res) => {
memberList.value = res.data
filterMember.value = res.data
- const user = (id && memberList.value.find((p) => p.user_id === id)) || null
+ const user = (id && memberList.value.find((p: any) => p.user_id === id)) || null
currentUser.value = user ? user.id : memberList.value[0].id
currentType.value = user ? user.type : memberList.value[0].type
- ResourcePermissions(currentUser.value)
+ ResourcePermissions(workspace_id.value, currentUser.value)
loading.value = false
})
.catch(() => {
loading.value = false
})
}
-function ResourcePermissions() {
+function ResourcePermissions(workspace_id: string, user_id: string) {
rLoading.value = true
- AuthorizationApi.getResourceAuthorization('default')
+ AuthorizationApi.getResourceAuthorization(workspace_id, user_id)
.then((res) => {
if (!res.data || Object.keys(res.data).length > 0) {
- settingTags.map((item) => {
+ settingTags.map((item: any) => {
if (Object.keys(res.data).indexOf(item.value) !== -1) {
item.data = res.data[item.value]
}
diff --git a/ui/tsconfig.app.json b/ui/tsconfig.app.json
index 913b8f279fc..404bd35e2e3 100644
--- a/ui/tsconfig.app.json
+++ b/ui/tsconfig.app.json
@@ -3,10 +3,9 @@
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
-
"paths": {
"@/*": ["./src/*"]
- }
+ },
+ "moduleResolution": "node"
}
}