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 @@ @@ -86,16 +86,16 @@ @@ -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" } }