feat: Resources authorization (#3183)

This commit is contained in:
shaohuzhang1 2025-06-04 13:05:39 +08:00 committed by GitHub
parent 596dbedd39
commit bc03deabfc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
133 changed files with 462 additions and 216 deletions

View File

@ -16,9 +16,8 @@ from rest_framework import serializers
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage 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.field.common import InstanceField
from common.util.field_message import ErrMessage
class ModelField(serializers.Field): class ModelField(serializers.Field):
@ -53,35 +52,35 @@ class IChatStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer): class InstanceSerializer(serializers.Serializer):
# 对话列表 # 对话列表
message_list = serializers.ListField(required=True, child=MessageField(required=True), message_list = serializers.ListField(required=True, child=MessageField(required=True),
error_messages=ErrMessage.list(_("Conversation list"))) label=_("Conversation list"))
model_id = serializers.UUIDField(required=False, allow_null=True, error_messages=ErrMessage.uuid(_("Model id"))) 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 # 对话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, post_response_handler = InstanceField(model_type=PostResponseHandler,
error_messages=ErrMessage.base(_("Post-processor"))) label=_("Post-processor"))
# 补全问题 # 补全问题
padding_problem_text = serializers.CharField(required=False, 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"))) stream = serializers.BooleanField(required=False, label=_("Streaming Output"))
client_id = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Client id"))) client_id = serializers.CharField(required=True, label=_("Client id"))
client_type = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Client Type"))) client_type = serializers.CharField(required=True, label=_("Client Type"))
# 未查询到引用分段 # 未查询到引用分段
no_references_setting = NoReferencesSetting(required=True, 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, 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, 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): def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True) super().is_valid(raise_exception=True)

View File

@ -16,34 +16,35 @@ from rest_framework import serializers
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage from application.chat_pipeline.pipeline_manage import PipelineManage
from application.models import ChatRecord 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.field.common import InstanceField
from common.util.field_message import ErrMessage
class IGenerateHumanMessageStep(IBaseChatPipelineStep): class IGenerateHumanMessageStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer): 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), 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), 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( max_paragraph_char_number = serializers.IntegerField(required=True,
_("Maximum length of the knowledge base paragraph"))) 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, 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]: def get_step_serializer(self, manage: PipelineManage) -> Type[serializers.Serializer]:
return self.InstanceSerializer return self.InstanceSerializer

View File

@ -16,22 +16,20 @@ from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep
from application.chat_pipeline.pipeline_manage import PipelineManage from application.chat_pipeline.pipeline_manage import PipelineManage
from application.models import ChatRecord from application.models import ChatRecord
from common.field.common import InstanceField from common.field.common import InstanceField
from common.util.field_message import ErrMessage
class IResetProblemStep(IBaseChatPipelineStep): class IResetProblemStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer): 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), 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"))) model_id = serializers.UUIDField(required=False, allow_null=True, label=_("Model id"))
user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("User ID"))) user_id = serializers.UUIDField(required=True, label=_("User ID"))
problem_optimization_prompt = serializers.CharField(required=False, max_length=102400, problem_optimization_prompt = serializers.CharField(required=False, max_length=102400,
error_messages=ErrMessage.char( label=_("Question completion prompt"))
_("Question completion prompt")))
def get_step_serializer(self, manage: PipelineManage) -> Type[serializers.Serializer]: def get_step_serializer(self, manage: PipelineManage) -> Type[serializers.Serializer]:
return self.InstanceSerializer return self.InstanceSerializer

View File

@ -13,8 +13,8 @@ from langchain.schema import HumanMessage
from application.chat_pipeline.step.reset_problem_step.i_reset_problem_step import IResetProblemStep from application.chat_pipeline.step.reset_problem_step.i_reset_problem_step import IResetProblemStep
from application.models import ChatRecord from application.models import ChatRecord
from common.util.split_model import flat_map from common.utils.split_model import flat_map
from setting.models_provider.tools import get_model_instance_by_model_user_id from models_provider.tools import get_model_instance_by_model_user_id
prompt = _( 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 <data></data> tag") "() 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 <data></data> tag")

View File

@ -16,36 +16,35 @@ from rest_framework import serializers
from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel from application.chat_pipeline.I_base_chat_pipeline import IBaseChatPipelineStep, ParagraphPipelineModel
from application.chat_pipeline.pipeline_manage import PipelineManage from application.chat_pipeline.pipeline_manage import PipelineManage
from common.util.field_message import ErrMessage
class ISearchDatasetStep(IBaseChatPipelineStep): class ISearchDatasetStep(IBaseChatPipelineStep):
class InstanceSerializer(serializers.Serializer): 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, padding_problem_text = serializers.CharField(required=False,
error_messages=ErrMessage.char(_("System completes question text"))) label=_("System completes question text"))
# 需要查询的数据集id列表 # 需要查询的数据集id列表
dataset_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True), dataset_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
error_messages=ErrMessage.list(_("Dataset id list"))) label=_("Dataset id list"))
# 需要排除的文档id # 需要排除的文档id
exclude_document_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True), 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 # 需要排除向量id
exclude_paragraph_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True), 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, top_n = serializers.IntegerField(required=True,
error_messages=ErrMessage.integer(_("Reference segment number"))) label=_("Reference segment number"))
# 相似度 0-1之间 # 相似度 0-1之间
similarity = serializers.FloatField(required=True, max_value=1, min_value=0, 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=[ search_mode = serializers.CharField(required=True, validators=[
validators.RegexValidator(regex=re.compile("^embedding|keywords|blend$"), validators.RegexValidator(regex=re.compile("^embedding|keywords|blend$"),
message=_("The type only supports embedding|keywords|blend"), code=500) message=_("The type only supports embedding|keywords|blend"), code=500)
], error_messages=ErrMessage.char(_("Retrieval Mode"))) ], label=_("Retrieval Mode"))
user_id = serializers.UUIDField(required=True, error_messages=ErrMessage.uuid(_("User ID"))) user_id = serializers.UUIDField(required=True, label=_("User ID"))
def get_step_serializer(self, manage: PipelineManage) -> Type[InstanceSerializer]: def get_step_serializer(self, manage: PipelineManage) -> Type[InstanceSerializer]:
return self.InstanceSerializer return self.InstanceSerializer

View File

@ -17,12 +17,12 @@ from application.chat_pipeline.I_base_chat_pipeline import ParagraphPipelineMode
from application.chat_pipeline.step.search_dataset_step.i_search_dataset_step import ISearchDatasetStep from application.chat_pipeline.step.search_dataset_step.i_search_dataset_step import ISearchDatasetStep
from common.config.embedding_config import VectorStore, ModelManage from common.config.embedding_config import VectorStore, ModelManage
from common.db.search import native_search from common.db.search import native_search
from common.util.file_util import get_file_content from common.utils.common import get_file_content
from dataset.models import Paragraph, DataSet from knowledge.models import Paragraph, Knowledge
from embedding.models import SearchMode from knowledge.models import SearchMode
from setting.models import Model from maxkb.conf import PROJECT_DIR
from setting.models_provider import get_model from models_provider.models import Model
from smartdoc.conf import PROJECT_DIR from models_provider.tools import get_model
def get_model_by_id(_id, user_id): 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): 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) dataset_list = QuerySet(DataSet).filter(id__in=dataset_id_list)
if len(set([dataset.embedding_model_id for dataset in dataset_list])) > 1: 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.")) raise Exception(_("The vector model of the associated knowledge base is inconsistent and the segmentation cannot be recalled."))
if len(dataset_list) == 0: if len(dataset_list) == 0:
raise Exception(_("The knowledge base setting is wrong, please reset the knowledge base")) raise Exception(_("The knowledge base setting is wrong, please reset the knowledge base"))
return dataset_list[0].embedding_model_id 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): class BaseSearchDatasetStep(ISearchDatasetStep):

View File

@ -17,7 +17,7 @@ from django.db.models import QuerySet
from rest_framework import serializers from rest_framework import serializers
from rest_framework.exceptions import ValidationError, ErrorDetail 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 ChatRecord
from application.models import ApplicationPublicAccessClient from application.models import ApplicationPublicAccessClient
from common.constants.authentication_type import AuthenticationType from common.constants.authentication_type import AuthenticationType

View File

@ -11,7 +11,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class ChatNodeSerializer(serializers.Serializer):

View File

@ -20,9 +20,9 @@ from langchain_core.messages import BaseMessage, AIMessage, AIMessageChunk, Tool
from langchain_mcp_adapters.client import MultiServerMCPClient from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent from langgraph.prebuilt import create_react_agent
from chat.flow.i_step_node import NodeResult, INode from application.flow.i_step_node import NodeResult, INode
from chat.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode from application.flow.step_node.ai_chat_step_node.i_chat_node import IChatNode
from chat.flow.tools import Reasoning from application.flow.tools import Reasoning
from models_provider.models import Model from models_provider.models import Model
from models_provider.tools import get_model_credential, get_model_instance_by_model_user_id from models_provider.tools import get_model_credential, get_model_instance_by_model_user_id

View File

@ -3,7 +3,7 @@ from typing import Type
from rest_framework import serializers 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 _ from django.utils.translation import gettext_lazy as _

View File

@ -5,9 +5,9 @@ import time
import uuid import uuid
from typing import Dict, List from typing import Dict, List
from chat.flow.common import Answer from application.flow.common import Answer
from chat.flow.i_step_node import NodeResult, INode from application.flow.i_step_node import NodeResult, INode
from chat.flow.step_node.application_node.i_application_node import IApplicationNode from application.flow.step_node.application_node.i_application_node import IApplicationNode
from application.models import Chat from application.models import Chat

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class ContainCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class EqualCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class GECompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class GTCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class IsNotNullCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class IsNotTrueCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class IsNullCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class IsTrueCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LECompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LenEqualCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LenGECompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LenGTCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LenLECompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LenLTCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class LTCompare(Compare):

View File

@ -8,7 +8,7 @@
""" """
from typing import List 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): class NotContainCompare(Compare):

View File

@ -11,7 +11,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class ConditionSerializer(serializers.Serializer):

View File

@ -8,9 +8,9 @@
""" """
from typing import List from typing import List
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.condition_node.compare import compare_handle_list from application.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.step_node.condition_node.i_condition_node import IConditionNode
class BaseConditionNode(IConditionNode): class BaseConditionNode(IConditionNode):

View File

@ -10,7 +10,7 @@ from typing import Type
from rest_framework import serializers 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.exception.app_exception import AppApiException
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _

View File

@ -8,8 +8,8 @@
""" """
from typing import List from typing import List
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.direct_reply_node.i_reply_node import IReplyNode from application.flow.step_node.direct_reply_node.i_reply_node import IReplyNode
class BaseReplyNode(IReplyNode): class BaseReplyNode(IReplyNode):

View File

@ -5,7 +5,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class DocumentExtractNodeSerializer(serializers.Serializer):

View File

@ -5,8 +5,8 @@ import mimetypes
from django.core.files.uploadedfile import InMemoryUploadedFile from django.core.files.uploadedfile import InMemoryUploadedFile
from django.db.models import QuerySet from django.db.models import QuerySet
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode from application.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode
from knowledge.models import File from knowledge.models import File
from knowledge.serializers.document import split_handles, parse_table_handle_list, FileBufferHandle from knowledge.serializers.document import split_handles, parse_table_handle_list, FileBufferHandle
from knowledge.serializers.file import FileSerializer from knowledge.serializers.file import FileSerializer

View File

@ -10,7 +10,7 @@ from typing import Type
from rest_framework import serializers 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 _ from django.utils.translation import gettext_lazy as _

View File

@ -12,9 +12,9 @@ from typing import Dict, List
from langchain_core.prompts import PromptTemplate from langchain_core.prompts import PromptTemplate
from chat.flow.common import Answer from application.flow.common import Answer
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.form_node.i_form_node import IFormNode from application.flow.step_node.form_node.i_form_node import IFormNode
def write_context(step_variable: Dict, global_variable: Dict, node, workflow): def write_context(step_variable: Dict, global_variable: Dict, node, workflow):

View File

@ -11,7 +11,7 @@ from typing import Type
from django.db.models import QuerySet from django.db.models import QuerySet
from rest_framework import serializers 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 common.field.common import ObjectField
from tools.models.tool import Tool from tools.models.tool import Tool

View File

@ -13,8 +13,8 @@ from typing import Dict
from django.db.models import QuerySet from django.db.models import QuerySet
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.function_lib_node.i_function_lib_node import IFunctionLibNode from application.flow.step_node.function_lib_node.i_function_lib_node import IFunctionLibNode
from common.exception.app_exception import AppApiException from common.exception.app_exception import AppApiException
from common.utils.function_code import FunctionExecutor from common.utils.function_code import FunctionExecutor
from common.utils.rsa_util import rsa_long_decrypt from common.utils.rsa_util import rsa_long_decrypt

View File

@ -12,7 +12,7 @@ from typing import Type
from django.core import validators from django.core import validators
from rest_framework import serializers 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.exception.app_exception import AppApiException
from common.field.common import ObjectField from common.field.common import ObjectField

View File

@ -10,8 +10,8 @@ import json
import time import time
from typing import Dict from typing import Dict
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.function_node.i_function_node import IFunctionNode from application.flow.step_node.function_node.i_function_node import IFunctionNode
from common.utils.function_code import FunctionExecutor from common.utils.function_code import FunctionExecutor
from maxkb.const import CONFIG from maxkb.const import CONFIG

View File

@ -5,7 +5,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class ImageGenerateNodeSerializer(serializers.Serializer):

View File

@ -5,8 +5,8 @@ from typing import List
import requests import requests
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.image_generate_step_node.i_image_generate_node import IImageGenerateNode 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 common.utils.common import bytes_to_uploaded_file
from knowledge.serializers.file import FileSerializer from knowledge.serializers.file import FileSerializer
from models_provider.tools import get_model_instance_by_model_user_id from models_provider.tools import get_model_instance_by_model_user_id

View File

@ -4,7 +4,7 @@ from typing import Type
from rest_framework import serializers 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 _ from django.utils.translation import gettext_lazy as _

View File

@ -8,8 +8,8 @@ from typing import List, Dict
from django.db.models import QuerySet from django.db.models import QuerySet
from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage, AIMessage from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage, AIMessage
from chat.flow.i_step_node import NodeResult, INode from application.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.step_node.image_understand_step_node.i_image_understand_node import IImageUnderstandNode
from knowledge.models import File from knowledge.models import File
from models_provider.tools import get_model_instance_by_model_user_id from models_provider.tools import get_model_instance_by_model_user_id

View File

@ -5,7 +5,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class McpNodeSerializer(serializers.Serializer):

View File

@ -5,8 +5,8 @@ from typing import List
from langchain_mcp_adapters.client import MultiServerMCPClient from langchain_mcp_adapters.client import MultiServerMCPClient
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.mcp_node.i_mcp_node import IMcpNode from application.flow.step_node.mcp_node.i_mcp_node import IMcpNode
class BaseMcpNode(IMcpNode): class BaseMcpNode(IMcpNode):

View File

@ -11,7 +11,7 @@ from typing import Type
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers 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): class QuestionNodeSerializer(serializers.Serializer):

View File

@ -15,8 +15,8 @@ from django.db.models import QuerySet
from langchain.schema import HumanMessage, SystemMessage from langchain.schema import HumanMessage, SystemMessage
from langchain_core.messages import BaseMessage from langchain_core.messages import BaseMessage
from chat.flow.i_step_node import NodeResult, INode from application.flow.i_step_node import NodeResult, INode
from chat.flow.step_node.question_node.i_question_node import IQuestionNode from application.flow.step_node.question_node.i_question_node import IQuestionNode
from models_provider.models import Model from models_provider.models import Model
from models_provider.tools import get_model_instance_by_model_user_id, get_model_credential from models_provider.tools import get_model_instance_by_model_user_id, get_model_credential

View File

@ -10,7 +10,7 @@ from typing import Type
from rest_framework import serializers 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 _ from django.utils.translation import gettext_lazy as _

View File

@ -10,8 +10,8 @@ from typing import List
from langchain_core.documents import Document from langchain_core.documents import Document
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.reranker_node.i_reranker_node import IRerankerNode from application.flow.step_node.reranker_node.i_reranker_node import IRerankerNode
from models_provider.tools import get_model_instance_by_model_user_id from models_provider.tools import get_model_instance_by_model_user_id

View File

@ -12,7 +12,7 @@ from typing import Type
from django.core import validators from django.core import validators
from rest_framework import serializers 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 common.utils.common import flat_map
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _

View File

@ -11,8 +11,8 @@ from typing import List, Dict
from django.db.models import QuerySet from django.db.models import QuerySet
from django.db import connection from django.db import connection
from chat.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from chat.flow.step_node.search_dataset_node.i_search_dataset_node import ISearchDatasetStepNode from application.flow.step_node.search_dataset_node.i_search_dataset_node import ISearchDatasetStepNode
from common.config.embedding_config import VectorStore from common.config.embedding_config import VectorStore
from common.db.search import native_search from common.db.search import native_search
from common.utils.common import get_file_content from common.utils.common import get_file_content

View File

@ -4,7 +4,7 @@ from typing import Type
from rest_framework import serializers 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 _ from django.utils.translation import gettext_lazy as _

Some files were not shown because too many files have changed in this diff Show More