refactor(workflow): move variables package into core.workflow (#32750)

This commit is contained in:
-LAN- 2026-03-01 03:15:09 +08:00 committed by GitHub
parent 962df17a15
commit 1f0fca89a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
104 changed files with 201 additions and 245 deletions

View File

@ -140,8 +140,6 @@ ignore_imports =
core.workflow.nodes.llm.llm_utils -> core.entities.provider_entities core.workflow.nodes.llm.llm_utils -> core.entities.provider_entities
core.workflow.nodes.parameter_extractor.parameter_extractor_node -> core.model_manager core.workflow.nodes.parameter_extractor.parameter_extractor_node -> core.model_manager
core.workflow.nodes.question_classifier.question_classifier_node -> core.model_manager core.workflow.nodes.question_classifier.question_classifier_node -> core.model_manager
core.workflow.nodes.llm.llm_utils -> core.variables.segments
core.workflow.nodes.loop.entities -> core.variables.types
core.workflow.nodes.tool.tool_node -> core.tools.utils.message_transformer core.workflow.nodes.tool.tool_node -> core.tools.utils.message_transformer
core.workflow.nodes.tool.tool_node -> models core.workflow.nodes.tool.tool_node -> models
core.workflow.nodes.agent.agent_node -> models.model core.workflow.nodes.agent.agent_node -> models.model
@ -178,54 +176,6 @@ ignore_imports =
core.workflow.nodes.llm.file_saver -> core.tools.signature core.workflow.nodes.llm.file_saver -> core.tools.signature
core.workflow.nodes.llm.file_saver -> core.tools.tool_file_manager core.workflow.nodes.llm.file_saver -> core.tools.tool_file_manager
core.workflow.nodes.tool.tool_node -> core.tools.errors core.workflow.nodes.tool.tool_node -> core.tools.errors
core.workflow.conversation_variable_updater -> core.variables
core.workflow.graph_engine.entities.commands -> core.variables.variables
core.workflow.nodes.agent.agent_node -> core.variables.segments
core.workflow.nodes.answer.answer_node -> core.variables
core.workflow.nodes.code.code_node -> core.variables.segments
core.workflow.nodes.code.code_node -> core.variables.types
core.workflow.nodes.code.entities -> core.variables.types
core.workflow.nodes.document_extractor.node -> core.variables
core.workflow.nodes.document_extractor.node -> core.variables.segments
core.workflow.nodes.http_request.executor -> core.variables.segments
core.workflow.nodes.http_request.node -> core.variables.segments
core.workflow.nodes.human_input.entities -> core.variables.consts
core.workflow.nodes.iteration.iteration_node -> core.variables
core.workflow.nodes.iteration.iteration_node -> core.variables.segments
core.workflow.nodes.iteration.iteration_node -> core.variables.variables
core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.variables
core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.variables.segments
core.workflow.nodes.list_operator.node -> core.variables
core.workflow.nodes.list_operator.node -> core.variables.segments
core.workflow.nodes.llm.node -> core.variables
core.workflow.nodes.loop.loop_node -> core.variables
core.workflow.nodes.parameter_extractor.entities -> core.variables.types
core.workflow.nodes.parameter_extractor.exc -> core.variables.types
core.workflow.nodes.parameter_extractor.parameter_extractor_node -> core.variables.types
core.workflow.nodes.tool.tool_node -> core.variables.segments
core.workflow.nodes.tool.tool_node -> core.variables.variables
core.workflow.nodes.trigger_webhook.node -> core.variables.types
core.workflow.nodes.trigger_webhook.node -> core.variables.variables
core.workflow.nodes.variable_aggregator.entities -> core.variables.types
core.workflow.nodes.variable_aggregator.variable_aggregator_node -> core.variables.segments
core.workflow.nodes.variable_assigner.common.helpers -> core.variables
core.workflow.nodes.variable_assigner.common.helpers -> core.variables.consts
core.workflow.nodes.variable_assigner.common.helpers -> core.variables.types
core.workflow.nodes.variable_assigner.v1.node -> core.variables
core.workflow.nodes.variable_assigner.v2.helpers -> core.variables
core.workflow.nodes.variable_assigner.v2.node -> core.variables
core.workflow.nodes.variable_assigner.v2.node -> core.variables.consts
core.workflow.runtime.graph_runtime_state_protocol -> core.variables.segments
core.workflow.runtime.read_only_wrappers -> core.variables.segments
core.workflow.runtime.variable_pool -> core.variables
core.workflow.runtime.variable_pool -> core.variables.consts
core.workflow.runtime.variable_pool -> core.variables.segments
core.workflow.runtime.variable_pool -> core.variables.variables
core.workflow.utils.condition.processor -> core.variables
core.workflow.utils.condition.processor -> core.variables.segments
core.workflow.variable_loader -> core.variables
core.workflow.variable_loader -> core.variables.consts
core.workflow.workflow_type_encoder -> core.variables
core.workflow.nodes.agent.agent_node -> extensions.ext_database core.workflow.nodes.agent.agent_node -> extensions.ext_database
core.workflow.nodes.knowledge_index.knowledge_index_node -> extensions.ext_database core.workflow.nodes.knowledge_index.knowledge_index_node -> extensions.ext_database
core.workflow.nodes.llm.file_saver -> extensions.ext_database core.workflow.nodes.llm.file_saver -> extensions.ext_database

View File

@ -15,11 +15,11 @@ from controllers.console.app.error import (
from controllers.console.app.wraps import get_app_model from controllers.console.app.wraps import get_app_model
from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required
from controllers.web.error import InvalidArgumentError, NotFoundError from controllers.web.error import InvalidArgumentError, NotFoundError
from core.variables.segment_group import SegmentGroup
from core.variables.segments import ArrayFileSegment, FileSegment, Segment
from core.variables.types import SegmentType
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.file import helpers as file_helpers from core.workflow.file import helpers as file_helpers
from core.workflow.variables.segment_group import SegmentGroup
from core.workflow.variables.segments import ArrayFileSegment, FileSegment, Segment
from core.workflow.variables.types import SegmentType
from extensions.ext_database import db from extensions.ext_database import db
from factories.file_factory import build_from_mapping, build_from_mappings from factories.file_factory import build_from_mapping, build_from_mappings
from factories.variable_factory import build_segment_with_type from factories.variable_factory import build_segment_with_type

View File

@ -21,8 +21,8 @@ from controllers.console.app.workflow_draft_variable import (
from controllers.console.datasets.wraps import get_rag_pipeline from controllers.console.datasets.wraps import get_rag_pipeline
from controllers.console.wraps import account_initialization_required, setup_required from controllers.console.wraps import account_initialization_required, setup_required
from controllers.web.error import InvalidArgumentError, NotFoundError from controllers.web.error import InvalidArgumentError, NotFoundError
from core.variables.types import SegmentType
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.variables.types import SegmentType
from extensions.ext_database import db from extensions.ext_database import db
from factories.file_factory import build_from_mapping, build_from_mappings from factories.file_factory import build_from_mapping, build_from_mappings
from factories.variable_factory import build_segment_with_type from factories.variable_factory import build_segment_with_type

View File

@ -25,7 +25,6 @@ from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, Workfl
from core.db.session_factory import session_factory from core.db.session_factory import session_factory
from core.moderation.base import ModerationError from core.moderation.base import ModerationError
from core.moderation.input_moderation import InputModeration from core.moderation.input_moderation import InputModeration
from core.variables.variables import Variable
from core.workflow.enums import WorkflowType from core.workflow.enums import WorkflowType
from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel
from core.workflow.graph_engine.layers.base import GraphEngineLayer from core.workflow.graph_engine.layers.base import GraphEngineLayer
@ -34,6 +33,7 @@ from core.workflow.repositories.workflow_node_execution_repository import Workfl
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variable_loader import VariableLoader from core.workflow.variable_loader import VariableLoader
from core.workflow.variables.variables import Variable
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_redis import redis_client from extensions.ext_redis import redis_client

View File

@ -49,7 +49,6 @@ from core.plugin.impl.datasource import PluginDatasourceManager
from core.tools.entities.tool_entities import ToolProviderType from core.tools.entities.tool_entities import ToolProviderType
from core.tools.tool_manager import ToolManager from core.tools.tool_manager import ToolManager
from core.trigger.trigger_manager import TriggerManager from core.trigger.trigger_manager import TriggerManager
from core.variables.segments import ArrayFileSegment, FileSegment, Segment
from core.workflow.entities.pause_reason import HumanInputRequired from core.workflow.entities.pause_reason import HumanInputRequired
from core.workflow.entities.workflow_start_reason import WorkflowStartReason from core.workflow.entities.workflow_start_reason import WorkflowStartReason
from core.workflow.enums import ( from core.workflow.enums import (
@ -62,6 +61,7 @@ from core.workflow.enums import (
from core.workflow.file import FILE_MODEL_IDENTITY, File from core.workflow.file import FILE_MODEL_IDENTITY, File
from core.workflow.runtime import GraphRuntimeState from core.workflow.runtime import GraphRuntimeState
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables.segments import ArrayFileSegment, FileSegment, Segment
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from core.workflow.workflow_type_encoder import WorkflowRuntimeTypeConverter from core.workflow.workflow_type_encoder import WorkflowRuntimeTypeConverter
from extensions.ext_database import db from extensions.ext_database import db

View File

@ -11,7 +11,6 @@ from core.app.entities.app_invoke_entities import (
) )
from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
from core.app.workflow.node_factory import DifyNodeFactory from core.app.workflow.node_factory import DifyNodeFactory
from core.variables.variables import RAGPipelineVariable, RAGPipelineVariableInput
from core.workflow.entities.graph_init_params import GraphInitParams from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.enums import WorkflowType from core.workflow.enums import WorkflowType
from core.workflow.graph import Graph from core.workflow.graph import Graph
@ -21,6 +20,7 @@ from core.workflow.repositories.workflow_node_execution_repository import Workfl
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variable_loader import VariableLoader from core.workflow.variable_loader import VariableLoader
from core.workflow.variables.variables import RAGPipelineVariable, RAGPipelineVariableInput
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from extensions.ext_database import db from extensions.ext_database import db
from models.dataset import Document, Pipeline from models.dataset import Document, Pipeline

View File

@ -1,12 +1,12 @@
import logging import logging
from core.variables import VariableBase
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID
from core.workflow.conversation_variable_updater import ConversationVariableUpdater from core.workflow.conversation_variable_updater import ConversationVariableUpdater
from core.workflow.enums import NodeType from core.workflow.enums import NodeType
from core.workflow.graph_engine.layers.base import GraphEngineLayer from core.workflow.graph_engine.layers.base import GraphEngineLayer
from core.workflow.graph_events import GraphEngineEvent, NodeRunSucceededEvent from core.workflow.graph_events import GraphEngineEvent, NodeRunSucceededEvent
from core.workflow.nodes.variable_assigner.common import helpers as common_helpers from core.workflow.nodes.variable_assigner.common import helpers as common_helpers
from core.workflow.variables import VariableBase
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -5,7 +5,7 @@ from base64 import b64encode
from collections.abc import Mapping from collections.abc import Mapping
from typing import Any from typing import Any
from core.variables.utils import dumps_with_segments from core.workflow.variables.utils import dumps_with_segments
class TemplateTransformer(ABC): class TemplateTransformer(ABC):

View File

@ -1,7 +1,7 @@
import abc import abc
from typing import Protocol from typing import Protocol
from core.variables import VariableBase from core.workflow.variables import VariableBase
class ConversationVariableUpdater(Protocol): class ConversationVariableUpdater(Protocol):

View File

@ -11,7 +11,7 @@ from typing import Any
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from core.variables.variables import Variable from core.workflow.variables.variables import Variable
class CommandType(StrEnum): class CommandType(StrEnum):

View File

@ -25,7 +25,6 @@ from core.tools.entities.tool_entities import (
) )
from core.tools.tool_manager import ToolManager from core.tools.tool_manager import ToolManager
from core.tools.utils.message_transformer import ToolFileMessageTransformer from core.tools.utils.message_transformer import ToolFileMessageTransformer
from core.variables.segments import ArrayFileSegment, StringSegment
from core.workflow.enums import ( from core.workflow.enums import (
NodeType, NodeType,
SystemVariableKey, SystemVariableKey,
@ -44,6 +43,7 @@ from core.workflow.nodes.agent.entities import AgentNodeData, AgentOldVersionMod
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables.segments import ArrayFileSegment, StringSegment
from extensions.ext_database import db from extensions.ext_database import db
from factories import file_factory from factories import file_factory
from factories.agent_factory import get_plugin_agent_strategy from factories.agent_factory import get_plugin_agent_strategy

View File

@ -1,13 +1,13 @@
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from typing import Any from typing import Any
from core.variables import ArrayFileSegment, FileSegment, Segment
from core.workflow.enums import NodeExecutionType, NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeExecutionType, NodeType, WorkflowNodeExecutionStatus
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.answer.entities import AnswerNodeData from core.workflow.nodes.answer.entities import AnswerNodeData
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.base.template import Template from core.workflow.nodes.base.template import Template
from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser
from core.workflow.variables import ArrayFileSegment, FileSegment, Segment
class AnswerNode(Node[AnswerNodeData]): class AnswerNode(Node[AnswerNodeData]):

View File

@ -5,13 +5,13 @@ from typing import TYPE_CHECKING, Any, ClassVar, Protocol, cast
from core.helper.code_executor.code_node_provider import CodeNodeProvider from core.helper.code_executor.code_node_provider import CodeNodeProvider
from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider
from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider
from core.variables.segments import ArrayFileSegment
from core.variables.types import SegmentType
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.code.entities import CodeLanguage, CodeNodeData from core.workflow.nodes.code.entities import CodeLanguage, CodeNodeData
from core.workflow.nodes.code.limits import CodeNodeLimits from core.workflow.nodes.code.limits import CodeNodeLimits
from core.workflow.variables.segments import ArrayFileSegment
from core.workflow.variables.types import SegmentType
from .exc import ( from .exc import (
CodeNodeError, CodeNodeError,

View File

@ -3,9 +3,9 @@ from typing import Annotated, Literal
from pydantic import AfterValidator, BaseModel from pydantic import AfterValidator, BaseModel
from core.helper.code_executor.code_executor import CodeLanguage from core.helper.code_executor.code_executor import CodeLanguage
from core.variables.types import SegmentType
from core.workflow.nodes.base import BaseNodeData from core.workflow.nodes.base import BaseNodeData
from core.workflow.nodes.base.entities import VariableSelector from core.workflow.nodes.base.entities import VariableSelector
from core.workflow.variables.types import SegmentType
_ALLOWED_OUTPUT_FROM_CODE = frozenset( _ALLOWED_OUTPUT_FROM_CODE = frozenset(
[ [

View File

@ -21,12 +21,12 @@ from docx.table import Table
from docx.text.paragraph import Paragraph from docx.text.paragraph import Paragraph
from core.helper import ssrf_proxy from core.helper import ssrf_proxy
from core.variables import ArrayFileSegment
from core.variables.segments import ArrayStringSegment, FileSegment
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod, file_manager from core.workflow.file import File, FileTransferMethod, file_manager
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.variables import ArrayFileSegment
from core.workflow.variables.segments import ArrayStringSegment, FileSegment
from .entities import DocumentExtractorNodeData, UnstructuredApiConfig from .entities import DocumentExtractorNodeData, UnstructuredApiConfig
from .exc import DocumentExtractorError, FileDownloadError, TextExtractionError, UnsupportedFileTypeError from .exc import DocumentExtractorError, FileDownloadError, TextExtractionError, UnsupportedFileTypeError

View File

@ -11,10 +11,10 @@ import httpx
from json_repair import repair_json from json_repair import repair_json
from core.helper.ssrf_proxy import ssrf_proxy from core.helper.ssrf_proxy import ssrf_proxy
from core.variables.segments import ArrayFileSegment, FileSegment
from core.workflow.file.enums import FileTransferMethod from core.workflow.file.enums import FileTransferMethod
from core.workflow.file.file_manager import file_manager as default_file_manager from core.workflow.file.file_manager import file_manager as default_file_manager
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables.segments import ArrayFileSegment, FileSegment
from ..protocols import FileManagerProtocol, HttpClientProtocol from ..protocols import FileManagerProtocol, HttpClientProtocol
from .entities import ( from .entities import (

View File

@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, Any
from core.helper.ssrf_proxy import ssrf_proxy from core.helper.ssrf_proxy import ssrf_proxy
from core.tools.tool_file_manager import ToolFileManager from core.tools.tool_file_manager import ToolFileManager
from core.variables.segments import ArrayFileSegment
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod from core.workflow.file import File, FileTransferMethod
from core.workflow.file.file_manager import file_manager as default_file_manager from core.workflow.file.file_manager import file_manager as default_file_manager
@ -15,6 +14,7 @@ from core.workflow.nodes.base.entities import VariableSelector
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.http_request.executor import Executor from core.workflow.nodes.http_request.executor import Executor
from core.workflow.nodes.protocols import FileManagerProtocol, HttpClientProtocol from core.workflow.nodes.protocols import FileManagerProtocol, HttpClientProtocol
from core.workflow.variables.segments import ArrayFileSegment
from factories import file_factory from factories import file_factory
from .config import build_http_request_config, resolve_http_request_config from .config import build_http_request_config, resolve_http_request_config

View File

@ -10,10 +10,10 @@ from typing import Annotated, Any, ClassVar, Literal, Self
from pydantic import BaseModel, Field, field_validator, model_validator from pydantic import BaseModel, Field, field_validator, model_validator
from core.variables.consts import SELECTORS_LENGTH
from core.workflow.nodes.base import BaseNodeData from core.workflow.nodes.base import BaseNodeData
from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables.consts import SELECTORS_LENGTH
from .enums import ButtonStyle, DeliveryMethodType, EmailRecipientType, FormInputType, PlaceholderType, TimeoutUnit from .enums import ButtonStyle, DeliveryMethodType, EmailRecipientType, FormInputType, PlaceholderType, TimeoutUnit

View File

@ -7,9 +7,6 @@ from typing import TYPE_CHECKING, Any, NewType, cast
from typing_extensions import TypeIs from typing_extensions import TypeIs
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.variables import IntegerVariable, NoneSegment
from core.variables.segments import ArrayAnySegment, ArraySegment
from core.variables.variables import Variable
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID
from core.workflow.enums import ( from core.workflow.enums import (
NodeExecutionType, NodeExecutionType,
@ -36,6 +33,9 @@ from core.workflow.nodes.base import LLMUsageTrackingMixin
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.iteration.entities import ErrorHandleMode, IterationNodeData from core.workflow.nodes.iteration.entities import ErrorHandleMode, IterationNodeData
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables import IntegerVariable, NoneSegment
from core.workflow.variables.segments import ArrayAnySegment, ArraySegment
from core.workflow.variables.variables import Variable
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from .exc import ( from .exc import (

View File

@ -5,12 +5,6 @@ from typing import TYPE_CHECKING, Any, Literal
from core.app.app_config.entities import DatasetRetrieveConfigEntity from core.app.app_config.entities import DatasetRetrieveConfigEntity
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.model_runtime.utils.encoders import jsonable_encoder from core.model_runtime.utils.encoders import jsonable_encoder
from core.variables import (
ArrayFileSegment,
FileSegment,
StringSegment,
)
from core.variables.segments import ArrayObjectSegment
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import ( from core.workflow.enums import (
NodeType, NodeType,
@ -22,6 +16,12 @@ from core.workflow.nodes.base import LLMUsageTrackingMixin
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.llm.file_saver import FileSaverImpl, LLMFileSaver from core.workflow.nodes.llm.file_saver import FileSaverImpl, LLMFileSaver
from core.workflow.repositories.rag_retrieval_protocol import KnowledgeRetrievalRequest, RAGRetrievalProtocol, Source from core.workflow.repositories.rag_retrieval_protocol import KnowledgeRetrievalRequest, RAGRetrievalProtocol, Source
from core.workflow.variables import (
ArrayFileSegment,
FileSegment,
StringSegment,
)
from core.workflow.variables.segments import ArrayObjectSegment
from .entities import KnowledgeRetrievalNodeData from .entities import KnowledgeRetrievalNodeData
from .exc import ( from .exc import (

View File

@ -1,12 +1,12 @@
from collections.abc import Callable, Sequence from collections.abc import Callable, Sequence
from typing import Any, TypeAlias, TypeVar from typing import Any, TypeAlias, TypeVar
from core.variables import ArrayFileSegment, ArrayNumberSegment, ArrayStringSegment
from core.variables.segments import ArrayAnySegment, ArrayBooleanSegment, ArraySegment
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.file import File from core.workflow.file import File
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.variables import ArrayFileSegment, ArrayNumberSegment, ArrayStringSegment
from core.workflow.variables.segments import ArrayAnySegment, ArrayBooleanSegment, ArraySegment
from .entities import FilterOperator, ListOperatorNodeData, Order from .entities import FilterOperator, ListOperatorNodeData, Order
from .exc import InvalidConditionError, InvalidFilterValueError, InvalidKeyError, ListOperatorError from .exc import InvalidConditionError, InvalidFilterValueError, InvalidKeyError, ListOperatorError

View File

@ -12,10 +12,10 @@ from core.model_runtime.entities.llm_entities import LLMUsage
from core.model_runtime.entities.model_entities import AIModelEntity from core.model_runtime.entities.model_entities import AIModelEntity
from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel
from core.prompt.entities.advanced_prompt_entities import MemoryConfig from core.prompt.entities.advanced_prompt_entities import MemoryConfig
from core.variables.segments import ArrayAnySegment, ArrayFileSegment, FileSegment, NoneSegment, StringSegment
from core.workflow.enums import SystemVariableKey from core.workflow.enums import SystemVariableKey
from core.workflow.file.models import File from core.workflow.file.models import File
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables.segments import ArrayAnySegment, ArrayFileSegment, FileSegment, NoneSegment, StringSegment
from extensions.ext_database import db from extensions.ext_database import db
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from models.model import Conversation from models.model import Conversation

View File

@ -43,14 +43,6 @@ from core.prompt.entities.advanced_prompt_entities import CompletionModelPromptT
from core.prompt.utils.prompt_message_util import PromptMessageUtil from core.prompt.utils.prompt_message_util import PromptMessageUtil
from core.rag.entities.citation_metadata import RetrievalSourceMetadata from core.rag.entities.citation_metadata import RetrievalSourceMetadata
from core.tools.signature import sign_upload_file from core.tools.signature import sign_upload_file
from core.variables import (
ArrayFileSegment,
ArraySegment,
FileSegment,
NoneSegment,
ObjectSegment,
StringSegment,
)
from core.workflow.constants import SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import SYSTEM_VARIABLE_NODE_ID
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import ( from core.workflow.enums import (
@ -73,6 +65,14 @@ from core.workflow.nodes.base.node import Node
from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser
from core.workflow.nodes.llm.protocols import CredentialsProvider, ModelFactory from core.workflow.nodes.llm.protocols import CredentialsProvider, ModelFactory
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables import (
ArrayFileSegment,
ArraySegment,
FileSegment,
NoneSegment,
ObjectSegment,
StringSegment,
)
from extensions.ext_database import db from extensions.ext_database import db
from models.dataset import SegmentAttachmentBinding from models.dataset import SegmentAttachmentBinding
from models.model import UploadFile from models.model import UploadFile

View File

@ -3,9 +3,9 @@ from typing import Annotated, Any, Literal
from pydantic import AfterValidator, BaseModel, Field, field_validator from pydantic import AfterValidator, BaseModel, Field, field_validator
from core.variables.types import SegmentType
from core.workflow.nodes.base import BaseLoopNodeData, BaseLoopState, BaseNodeData from core.workflow.nodes.base import BaseLoopNodeData, BaseLoopState, BaseNodeData
from core.workflow.utils.condition.entities import Condition from core.workflow.utils.condition.entities import Condition
from core.workflow.variables.types import SegmentType
_VALID_VAR_TYPE = frozenset( _VALID_VAR_TYPE = frozenset(
[ [

View File

@ -6,7 +6,6 @@ from datetime import datetime
from typing import TYPE_CHECKING, Any, Literal, cast from typing import TYPE_CHECKING, Any, Literal, cast
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.variables import Segment, SegmentType
from core.workflow.enums import ( from core.workflow.enums import (
NodeExecutionType, NodeExecutionType,
NodeType, NodeType,
@ -31,6 +30,7 @@ from core.workflow.nodes.base import LLMUsageTrackingMixin
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.loop.entities import LoopCompletedReason, LoopNodeData, LoopVariableData from core.workflow.nodes.loop.entities import LoopCompletedReason, LoopNodeData, LoopVariableData
from core.workflow.utils.condition.processor import ConditionProcessor from core.workflow.utils.condition.processor import ConditionProcessor
from core.workflow.variables import Segment, SegmentType
from factories.variable_factory import TypeMismatchError, build_segment_with_type, segment_to_variable from factories.variable_factory import TypeMismatchError, build_segment_with_type, segment_to_variable
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now

View File

@ -8,9 +8,9 @@ from pydantic import (
) )
from core.prompt.entities.advanced_prompt_entities import MemoryConfig from core.prompt.entities.advanced_prompt_entities import MemoryConfig
from core.variables.types import SegmentType
from core.workflow.nodes.base import BaseNodeData from core.workflow.nodes.base import BaseNodeData
from core.workflow.nodes.llm.entities import ModelConfig, VisionConfig from core.workflow.nodes.llm.entities import ModelConfig, VisionConfig
from core.workflow.variables.types import SegmentType
_OLD_BOOL_TYPE_NAME = "bool" _OLD_BOOL_TYPE_NAME = "bool"
_OLD_SELECT_TYPE_NAME = "select" _OLD_SELECT_TYPE_NAME = "select"

View File

@ -1,6 +1,6 @@
from typing import Any from typing import Any
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
class ParameterExtractorNodeError(ValueError): class ParameterExtractorNodeError(ValueError):

View File

@ -24,7 +24,6 @@ from core.prompt.advanced_prompt_transform import AdvancedPromptTransform
from core.prompt.entities.advanced_prompt_entities import ChatModelMessage, CompletionModelPromptTemplate from core.prompt.entities.advanced_prompt_entities import ChatModelMessage, CompletionModelPromptTemplate
from core.prompt.simple_prompt_transform import ModelMode from core.prompt.simple_prompt_transform import ModelMode
from core.prompt.utils.prompt_message_util import PromptMessageUtil from core.prompt.utils.prompt_message_util import PromptMessageUtil
from core.variables.types import ArrayValidation, SegmentType
from core.workflow.enums import NodeType, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus
from core.workflow.file import File from core.workflow.file import File
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
@ -32,6 +31,7 @@ from core.workflow.nodes.base import variable_template_parser
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.llm import llm_utils from core.workflow.nodes.llm import llm_utils
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables.types import ArrayValidation, SegmentType
from factories.variable_factory import build_segment_with_type from factories.variable_factory import build_segment_with_type
from .entities import ParameterExtractorNodeData from .entities import ParameterExtractorNodeData

View File

@ -11,8 +11,6 @@ from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter
from core.tools.errors import ToolInvokeError from core.tools.errors import ToolInvokeError
from core.tools.tool_engine import ToolEngine from core.tools.tool_engine import ToolEngine
from core.tools.utils.message_transformer import ToolFileMessageTransformer from core.tools.utils.message_transformer import ToolFileMessageTransformer
from core.variables.segments import ArrayAnySegment, ArrayFileSegment
from core.variables.variables import ArrayAnyVariable
from core.workflow.enums import ( from core.workflow.enums import (
NodeType, NodeType,
SystemVariableKey, SystemVariableKey,
@ -23,6 +21,8 @@ from core.workflow.file import File, FileTransferMethod
from core.workflow.node_events import NodeEventBase, NodeRunResult, StreamChunkEvent, StreamCompletedEvent from core.workflow.node_events import NodeEventBase, NodeRunResult, StreamChunkEvent, StreamCompletedEvent
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser from core.workflow.nodes.base.variable_template_parser import VariableTemplateParser
from core.workflow.variables.segments import ArrayAnySegment, ArrayFileSegment
from core.workflow.variables.variables import ArrayAnyVariable
from extensions.ext_database import db from extensions.ext_database import db
from factories import file_factory from factories import file_factory
from models import ToolFile from models import ToolFile

View File

@ -2,14 +2,14 @@ import logging
from collections.abc import Mapping from collections.abc import Mapping
from typing import Any from typing import Any
from core.variables.types import SegmentType
from core.variables.variables import FileVariable
from core.workflow.constants import SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import SYSTEM_VARIABLE_NODE_ID
from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus
from core.workflow.enums import NodeExecutionType, NodeType from core.workflow.enums import NodeExecutionType, NodeType
from core.workflow.file import FileTransferMethod from core.workflow.file import FileTransferMethod
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.variables.types import SegmentType
from core.workflow.variables.variables import FileVariable
from factories import file_factory from factories import file_factory
from factories.variable_factory import build_segment_with_type from factories.variable_factory import build_segment_with_type

View File

@ -1,7 +1,7 @@
from pydantic import BaseModel from pydantic import BaseModel
from core.variables.types import SegmentType
from core.workflow.nodes.base import BaseNodeData from core.workflow.nodes.base import BaseNodeData
from core.workflow.variables.types import SegmentType
class AdvancedSettings(BaseModel): class AdvancedSettings(BaseModel):

View File

@ -1,10 +1,10 @@
from collections.abc import Mapping from collections.abc import Mapping
from core.variables.segments import Segment
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.variable_aggregator.entities import VariableAggregatorNodeData from core.workflow.nodes.variable_aggregator.entities import VariableAggregatorNodeData
from core.workflow.variables.segments import Segment
class VariableAggregatorNode(Node[VariableAggregatorNodeData]): class VariableAggregatorNode(Node[VariableAggregatorNodeData]):

View File

@ -3,9 +3,9 @@ from typing import Any, TypeVar
from pydantic import BaseModel from pydantic import BaseModel
from core.variables import Segment from core.workflow.variables import Segment
from core.variables.consts import SELECTORS_LENGTH from core.workflow.variables.consts import SELECTORS_LENGTH
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
# Use double underscore (`__`) prefix for internal variables # Use double underscore (`__`) prefix for internal variables
# to minimize risk of collision with user-defined variable names. # to minimize risk of collision with user-defined variable names.

View File

@ -1,7 +1,6 @@
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from core.variables import SegmentType, VariableBase
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
@ -9,6 +8,7 @@ from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.variable_assigner.common import helpers as common_helpers from core.workflow.nodes.variable_assigner.common import helpers as common_helpers
from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNodeError from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNodeError
from core.workflow.variables import SegmentType, VariableBase
from .node_data import VariableAssignerData, WriteMode from .node_data import VariableAssignerData, WriteMode

View File

@ -1,6 +1,6 @@
from typing import Any from typing import Any
from core.variables import SegmentType from core.workflow.variables import SegmentType
from .enums import Operation from .enums import Operation

View File

@ -2,14 +2,14 @@ import json
from collections.abc import Mapping, MutableMapping, Sequence from collections.abc import Mapping, MutableMapping, Sequence
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from core.variables import SegmentType, VariableBase
from core.variables.consts import SELECTORS_LENGTH
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.node_events import NodeRunResult from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.nodes.variable_assigner.common import helpers as common_helpers from core.workflow.nodes.variable_assigner.common import helpers as common_helpers
from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNodeError from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNodeError
from core.workflow.variables import SegmentType, VariableBase
from core.workflow.variables.consts import SELECTORS_LENGTH
from . import helpers from . import helpers
from .entities import VariableAssignerNodeData, VariableOperationItem from .entities import VariableAssignerNodeData, VariableOperationItem

View File

@ -2,8 +2,8 @@ from collections.abc import Mapping, Sequence
from typing import Any, Protocol from typing import Any, Protocol
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.variables.segments import Segment
from core.workflow.system_variable import SystemVariableReadOnlyView from core.workflow.system_variable import SystemVariableReadOnlyView
from core.workflow.variables.segments import Segment
class ReadOnlyVariablePool(Protocol): class ReadOnlyVariablePool(Protocol):

View File

@ -5,8 +5,8 @@ from copy import deepcopy
from typing import Any from typing import Any
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.variables.segments import Segment
from core.workflow.system_variable import SystemVariableReadOnlyView from core.workflow.system_variable import SystemVariableReadOnlyView
from core.workflow.variables.segments import Segment
from .graph_runtime_state import GraphRuntimeState from .graph_runtime_state import GraphRuntimeState
from .variable_pool import VariablePool from .variable_pool import VariablePool

View File

@ -8,10 +8,6 @@ from typing import Annotated, Any, Union, cast
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from core.variables import Segment, SegmentGroup, VariableBase
from core.variables.consts import SELECTORS_LENGTH
from core.variables.segments import FileSegment, ObjectSegment
from core.variables.variables import RAGPipelineVariableInput, Variable
from core.workflow.constants import ( from core.workflow.constants import (
CONVERSATION_VARIABLE_NODE_ID, CONVERSATION_VARIABLE_NODE_ID,
ENVIRONMENT_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID,
@ -20,6 +16,10 @@ from core.workflow.constants import (
) )
from core.workflow.file import File, FileAttribute, file_manager from core.workflow.file import File, FileAttribute, file_manager
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import Segment, SegmentGroup, VariableBase
from core.workflow.variables.consts import SELECTORS_LENGTH
from core.workflow.variables.segments import FileSegment, ObjectSegment
from core.workflow.variables.variables import RAGPipelineVariableInput, Variable
from factories import variable_factory from factories import variable_factory
VariableValue = Union[str, int, float, dict[str, object], list[object], File] VariableValue = Union[str, int, float, dict[str, object], list[object], File]

View File

@ -2,10 +2,10 @@ import json
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from typing import Literal, NamedTuple from typing import Literal, NamedTuple
from core.variables import ArrayFileSegment
from core.variables.segments import ArrayBooleanSegment, BooleanSegment
from core.workflow.file import FileAttribute, file_manager from core.workflow.file import FileAttribute, file_manager
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables import ArrayFileSegment
from core.workflow.variables.segments import ArrayBooleanSegment, BooleanSegment
from .entities import Condition, SubCondition, SupportedComparisonOperator from .entities import Condition, SubCondition, SupportedComparisonOperator

View File

@ -2,9 +2,9 @@ import abc
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from typing import Any, Protocol from typing import Any, Protocol
from core.variables import VariableBase
from core.variables.consts import SELECTORS_LENGTH
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.variables import VariableBase
from core.workflow.variables.consts import SELECTORS_LENGTH
class VariableLoader(Protocol): class VariableLoader(Protocol):

View File

@ -4,8 +4,6 @@ from uuid import uuid4
from pydantic import BaseModel, Discriminator, Field, Tag from pydantic import BaseModel, Discriminator, Field, Tag
from core.helper import encrypter
from .segments import ( from .segments import (
ArrayAnySegment, ArrayAnySegment,
ArrayBooleanSegment, ArrayBooleanSegment,
@ -27,6 +25,14 @@ from .segments import (
from .types import SegmentType from .types import SegmentType
def _obfuscated_token(token: str) -> str:
if not token:
return token
if len(token) <= 8:
return "*" * 20
return token[:6] + "*" * 12 + token[-2:]
class VariableBase(Segment): class VariableBase(Segment):
""" """
A variable is a segment that has a name. A variable is a segment that has a name.
@ -86,7 +92,7 @@ class SecretVariable(StringVariable):
@property @property
def log(self) -> str: def log(self) -> str:
return encrypter.obfuscated_token(self.value) return _obfuscated_token(self.value)
class NoneVariable(NoneSegment, VariableBase): class NoneVariable(NoneSegment, VariableBase):

View File

@ -4,8 +4,8 @@ from typing import Any, overload
from pydantic import BaseModel from pydantic import BaseModel
from core.variables import Segment
from core.workflow.file.models import File from core.workflow.file.models import File
from core.workflow.variables import Segment
class WorkflowRuntimeTypeConverter: class WorkflowRuntimeTypeConverter:

View File

@ -9,11 +9,11 @@ from opentelemetry.trace import Span
from opentelemetry.trace.status import Status, StatusCode from opentelemetry.trace.status import Status, StatusCode
from pydantic import BaseModel from pydantic import BaseModel
from core.variables import Segment
from core.workflow.enums import NodeType from core.workflow.enums import NodeType
from core.workflow.file.models import File from core.workflow.file.models import File
from core.workflow.graph_events import GraphNodeEventBase from core.workflow.graph_events import GraphNodeEventBase
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.variables import Segment
from extensions.otel.semconv.gen_ai import ChainAttributes, GenAIAttributes from extensions.otel.semconv.gen_ai import ChainAttributes, GenAIAttributes

View File

@ -8,9 +8,9 @@ from typing import Any
from opentelemetry.trace import Span from opentelemetry.trace import Span
from core.variables import Segment
from core.workflow.graph_events import GraphNodeEventBase from core.workflow.graph_events import GraphNodeEventBase
from core.workflow.nodes.base.node import Node from core.workflow.nodes.base.node import Node
from core.workflow.variables import Segment
from extensions.otel.parser.base import DefaultNodeOTelParser, safe_json_dumps from extensions.otel.parser.base import DefaultNodeOTelParser, safe_json_dumps
from extensions.otel.semconv.gen_ai import RetrieverAttributes from extensions.otel.semconv.gen_ai import RetrieverAttributes

View File

@ -3,8 +3,13 @@ from typing import Any, cast
from uuid import uuid4 from uuid import uuid4
from configs import dify_config from configs import dify_config
from core.variables.exc import VariableError from core.workflow.constants import (
from core.variables.segments import ( CONVERSATION_VARIABLE_NODE_ID,
ENVIRONMENT_VARIABLE_NODE_ID,
)
from core.workflow.file import File
from core.workflow.variables.exc import VariableError
from core.workflow.variables.segments import (
ArrayAnySegment, ArrayAnySegment,
ArrayBooleanSegment, ArrayBooleanSegment,
ArrayFileSegment, ArrayFileSegment,
@ -21,8 +26,8 @@ from core.variables.segments import (
Segment, Segment,
StringSegment, StringSegment,
) )
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from core.variables.variables import ( from core.workflow.variables.variables import (
ArrayAnyVariable, ArrayAnyVariable,
ArrayBooleanVariable, ArrayBooleanVariable,
ArrayFileVariable, ArrayFileVariable,
@ -39,11 +44,6 @@ from core.variables.variables import (
StringVariable, StringVariable,
VariableBase, VariableBase,
) )
from core.workflow.constants import (
CONVERSATION_VARIABLE_NODE_ID,
ENVIRONMENT_VARIABLE_NODE_ID,
)
from core.workflow.file import File
class UnsupportedSegmentTypeError(Exception): class UnsupportedSegmentTypeError(Exception):

View File

@ -1,7 +1,7 @@
from typing import TypedDict from typing import TypedDict
from core.variables.segments import Segment from core.workflow.variables.segments import Segment
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
class _VarTypedDict(TypedDict, total=False): class _VarTypedDict(TypedDict, total=False):

View File

@ -1,7 +1,7 @@
from flask_restx import fields from flask_restx import fields
from core.helper import encrypter from core.helper import encrypter
from core.variables import SecretVariable, SegmentType, VariableBase from core.workflow.variables import SecretVariable, SegmentType, VariableBase
from fields.member_fields import simple_account_fields from fields.member_fields import simple_account_fields
from libs.helper import TimestampField from libs.helper import TimestampField

View File

@ -22,8 +22,6 @@ from sqlalchemy import (
from sqlalchemy.orm import Mapped, declared_attr, mapped_column from sqlalchemy.orm import Mapped, declared_attr, mapped_column
from typing_extensions import deprecated from typing_extensions import deprecated
from core.variables import utils as variable_utils
from core.variables.variables import FloatVariable, IntegerVariable, StringVariable
from core.workflow.constants import ( from core.workflow.constants import (
CONVERSATION_VARIABLE_NODE_ID, CONVERSATION_VARIABLE_NODE_ID,
SYSTEM_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID,
@ -33,6 +31,8 @@ from core.workflow.entities.pause_reason import HumanInputRequired, PauseReason,
from core.workflow.enums import NodeType, WorkflowExecutionStatus from core.workflow.enums import NodeType, WorkflowExecutionStatus
from core.workflow.file.constants import maybe_file_object from core.workflow.file.constants import maybe_file_object
from core.workflow.file.models import File from core.workflow.file.models import File
from core.workflow.variables import utils as variable_utils
from core.workflow.variables.variables import FloatVariable, IntegerVariable, StringVariable
from extensions.ext_storage import Storage from extensions.ext_storage import Storage
from factories.variable_factory import TypeMismatchError, build_segment_with_type from factories.variable_factory import TypeMismatchError, build_segment_with_type
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
@ -46,7 +46,7 @@ if TYPE_CHECKING:
from constants import DEFAULT_FILE_NUMBER_LIMITS, HIDDEN_VALUE from constants import DEFAULT_FILE_NUMBER_LIMITS, HIDDEN_VALUE
from core.helper import encrypter from core.helper import encrypter
from core.variables import SecretVariable, Segment, SegmentType, VariableBase from core.workflow.variables import SecretVariable, Segment, SegmentType, VariableBase
from factories import variable_factory from factories import variable_factory
from libs import helper from libs import helper

View File

@ -10,7 +10,7 @@ from configs import dify_config
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.db.session_factory import session_factory from core.db.session_factory import session_factory
from core.llm_generator.llm_generator import LLMGenerator from core.llm_generator.llm_generator import LLMGenerator
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from extensions.ext_database import db from extensions.ext_database import db
from factories import variable_factory from factories import variable_factory
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now

View File

@ -1,7 +1,7 @@
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.orm import Session, sessionmaker
from core.variables.variables import VariableBase from core.workflow.variables.variables import VariableBase
from models import ConversationVariable from models import ConversationVariable

View File

@ -36,7 +36,6 @@ from core.rag.entities.event import (
) )
from core.repositories.factory import DifyCoreRepositoryFactory from core.repositories.factory import DifyCoreRepositoryFactory
from core.repositories.sqlalchemy_workflow_node_execution_repository import SQLAlchemyWorkflowNodeExecutionRepository from core.repositories.sqlalchemy_workflow_node_execution_repository import SQLAlchemyWorkflowNodeExecutionRepository
from core.variables.variables import VariableBase
from core.workflow.entities.workflow_node_execution import ( from core.workflow.entities.workflow_node_execution import (
WorkflowNodeExecution, WorkflowNodeExecution,
WorkflowNodeExecutionStatus, WorkflowNodeExecutionStatus,
@ -52,6 +51,7 @@ from core.workflow.nodes.node_mapping import LATEST_VERSION, NODE_TYPE_CLASSES_M
from core.workflow.repositories.workflow_node_execution_repository import OrderConfig from core.workflow.repositories.workflow_node_execution_repository import OrderConfig
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables.variables import VariableBase
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from extensions.ext_database import db from extensions.ext_database import db
from libs.infinite_scroll_pagination import InfiniteScrollPagination from libs.infinite_scroll_pagination import InfiniteScrollPagination

View File

@ -16,9 +16,9 @@ from werkzeug.exceptions import RequestEntityTooLarge
from configs import dify_config from configs import dify_config
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.tools.tool_file_manager import ToolFileManager from core.tools.tool_file_manager import ToolFileManager
from core.variables.types import SegmentType
from core.workflow.enums import NodeType from core.workflow.enums import NodeType
from core.workflow.file.models import FileTransferMethod from core.workflow.file.models import FileTransferMethod
from core.workflow.variables.types import SegmentType
from enums.quota_type import QuotaType from enums.quota_type import QuotaType
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_redis import redis_client from extensions.ext_redis import redis_client

View File

@ -6,7 +6,9 @@ from collections.abc import Mapping
from typing import Any, Generic, TypeAlias, TypeVar, overload from typing import Any, Generic, TypeAlias, TypeVar, overload
from configs import dify_config from configs import dify_config
from core.variables.segments import ( from core.workflow.file.models import File
from core.workflow.nodes.variable_assigner.common.helpers import UpdatedVariable
from core.workflow.variables.segments import (
ArrayFileSegment, ArrayFileSegment,
ArraySegment, ArraySegment,
BooleanSegment, BooleanSegment,
@ -18,9 +20,7 @@ from core.variables.segments import (
Segment, Segment,
StringSegment, StringSegment,
) )
from core.variables.utils import dumps_with_segments from core.workflow.variables.utils import dumps_with_segments
from core.workflow.file.models import File
from core.workflow.nodes.variable_assigner.common.helpers import UpdatedVariable
_MAX_DEPTH = 100 _MAX_DEPTH = 100

View File

@ -14,20 +14,20 @@ from sqlalchemy.sql.expression import and_, or_
from configs import dify_config from configs import dify_config
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.variables import Segment, StringSegment, VariableBase
from core.variables.consts import SELECTORS_LENGTH
from core.variables.segments import (
ArrayFileSegment,
FileSegment,
)
from core.variables.types import SegmentType
from core.variables.utils import dumps_with_segments
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.enums import SystemVariableKey from core.workflow.enums import SystemVariableKey
from core.workflow.file.models import File from core.workflow.file.models import File
from core.workflow.nodes import NodeType from core.workflow.nodes import NodeType
from core.workflow.nodes.variable_assigner.common.helpers import get_updated_variables from core.workflow.nodes.variable_assigner.common.helpers import get_updated_variables
from core.workflow.variable_loader import VariableLoader from core.workflow.variable_loader import VariableLoader
from core.workflow.variables import Segment, StringSegment, VariableBase
from core.workflow.variables.consts import SELECTORS_LENGTH
from core.workflow.variables.segments import (
ArrayFileSegment,
FileSegment,
)
from core.workflow.variables.types import SegmentType
from core.workflow.variables.utils import dumps_with_segments
from extensions.ext_storage import storage from extensions.ext_storage import storage
from factories.file_factory import StorageKeyLoader from factories.file_factory import StorageKeyLoader
from factories.variable_factory import build_segment, segment_to_variable from factories.variable_factory import build_segment, segment_to_variable

View File

@ -15,8 +15,6 @@ from core.app.apps.workflow.app_config_manager import WorkflowAppConfigManager
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.repositories import DifyCoreRepositoryFactory from core.repositories import DifyCoreRepositoryFactory
from core.repositories.human_input_repository import HumanInputFormRepositoryImpl from core.repositories.human_input_repository import HumanInputFormRepositoryImpl
from core.variables import VariableBase
from core.variables.variables import Variable
from core.workflow.entities import GraphInitParams, WorkflowNodeExecution from core.workflow.entities import GraphInitParams, WorkflowNodeExecution
from core.workflow.entities.pause_reason import HumanInputRequired from core.workflow.entities.pause_reason import HumanInputRequired
from core.workflow.enums import ErrorStrategy, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus from core.workflow.enums import ErrorStrategy, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus
@ -41,6 +39,8 @@ from core.workflow.repositories.human_input_form_repository import FormCreatePar
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variable_loader import load_into_variable_pool from core.workflow.variable_loader import load_into_variable_pool
from core.workflow.variables import VariableBase
from core.workflow.variables.variables import Variable
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from enums.cloud_plan import CloudPlan from enums.cloud_plan import CloudPlan
from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated

View File

@ -6,11 +6,11 @@ import pytest
from sqlalchemy import delete from sqlalchemy import delete
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from core.variables.segments import StringSegment
from core.variables.types import SegmentType
from core.variables.variables import StringVariable
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.nodes import NodeType from core.workflow.nodes import NodeType
from core.workflow.variables.segments import StringSegment
from core.workflow.variables.types import SegmentType
from core.workflow.variables.variables import StringVariable
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_storage import storage from extensions.ext_storage import storage
from factories.variable_factory import build_segment from factories.variable_factory import build_segment

View File

@ -5,7 +5,7 @@ import pytest
from sqlalchemy import delete from sqlalchemy import delete
from core.db.session_factory import session_factory from core.db.session_factory import session_factory
from core.variables.segments import StringSegment from core.workflow.variables.segments import StringSegment
from models import Tenant from models import Tenant
from models.enums import CreatorUserRole from models.enums import CreatorUserRole
from models.model import App, UploadFile from models.model import App, UploadFile
@ -191,7 +191,7 @@ class TestDeleteDraftVariablesWithOffloadIntegration:
@pytest.fixture @pytest.fixture
def setup_offload_test_data(self, app_and_tenant): def setup_offload_test_data(self, app_and_tenant):
tenant, app = app_and_tenant tenant, app = app_and_tenant
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
with session_factory.create_session() as session: with session_factory.create_session() as session:
@ -422,7 +422,7 @@ class TestDeleteDraftVariablesSessionCommit:
@pytest.fixture @pytest.fixture
def setup_offload_test_data(self, app_and_tenant): def setup_offload_test_data(self, app_and_tenant):
"""Create test data with offload files for session commit tests.""" """Create test data with offload files for session commit tests."""
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
tenant, app = app_and_tenant tenant, app = app_and_tenant

View File

@ -1,8 +1,8 @@
import pytest import pytest
from faker import Faker from faker import Faker
from core.variables.segments import StringSegment
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.variables.segments import StringSegment
from models import App, Workflow from models import App, Workflow
from models.enums import DraftVariableType from models.enums import DraftVariableType
from models.workflow import WorkflowDraftVariable from models.workflow import WorkflowDraftVariable
@ -467,7 +467,7 @@ class TestWorkflowDraftVariableService:
fake = Faker() fake = Faker()
app = self._create_test_app(db_session_with_containers, mock_external_service_dependencies, fake=fake) app = self._create_test_app(db_session_with_containers, mock_external_service_dependencies, fake=fake)
workflow = self._create_test_workflow(db_session_with_containers, app, fake=fake) workflow = self._create_test_workflow(db_session_with_containers, app, fake=fake)
from core.variables.variables import StringVariable from core.workflow.variables.variables import StringVariable
conv_var = StringVariable( conv_var = StringVariable(
id=fake.uuid4(), id=fake.uuid4(),
@ -650,7 +650,7 @@ class TestWorkflowDraftVariableService:
fake = Faker() fake = Faker()
app = self._create_test_app(db_session_with_containers, mock_external_service_dependencies, fake=fake) app = self._create_test_app(db_session_with_containers, mock_external_service_dependencies, fake=fake)
workflow = self._create_test_workflow(db_session_with_containers, app, fake=fake) workflow = self._create_test_workflow(db_session_with_containers, app, fake=fake)
from core.variables.variables import StringVariable from core.workflow.variables.variables import StringVariable
conv_var1 = StringVariable( conv_var1 = StringVariable(
id=fake.uuid4(), id=fake.uuid4(),

View File

@ -4,8 +4,8 @@ from unittest.mock import ANY, call, patch
import pytest import pytest
from core.db.session_factory import session_factory from core.db.session_factory import session_factory
from core.variables.segments import StringSegment from core.workflow.variables.segments import StringSegment
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from models import Tenant from models import Tenant
from models.enums import CreatorUserRole from models.enums import CreatorUserRole

View File

@ -13,8 +13,8 @@ from controllers.console.app.workflow_draft_variable import (
_WORKFLOW_DRAFT_VARIABLE_WITHOUT_VALUE_FIELDS, _WORKFLOW_DRAFT_VARIABLE_WITHOUT_VALUE_FIELDS,
_serialize_full_content, _serialize_full_content,
) )
from core.variables.types import SegmentType
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.variables.types import SegmentType
from factories.variable_factory import build_segment from factories.variable_factory import build_segment
from libs.datetime_utils import naive_utc_now from libs.datetime_utils import naive_utc_now
from libs.uuid_utils import uuidv7 from libs.uuid_utils import uuidv7

View File

@ -7,7 +7,7 @@ from sqlalchemy.orm import Session
from core.app.apps.advanced_chat.app_runner import AdvancedChatAppRunner from core.app.apps.advanced_chat.app_runner import AdvancedChatAppRunner
from core.app.entities.app_invoke_entities import AdvancedChatAppGenerateEntity, InvokeFrom from core.app.entities.app_invoke_entities import AdvancedChatAppGenerateEntity, InvokeFrom
from core.variables import SegmentType from core.workflow.variables import SegmentType
from factories import variable_factory from factories import variable_factory
from models import ConversationVariable, Workflow from models import ConversationVariable, Workflow

View File

@ -1,8 +1,8 @@
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from core.app.apps.common.workflow_response_converter import WorkflowResponseConverter from core.app.apps.common.workflow_response_converter import WorkflowResponseConverter
from core.variables.segments import ArrayFileSegment, FileSegment
from core.workflow.file import FILE_MODEL_IDENTITY, File, FileTransferMethod, FileType from core.workflow.file import FILE_MODEL_IDENTITY, File, FileTransferMethod, FileType
from core.workflow.variables.segments import ArrayFileSegment, FileSegment
class TestWorkflowResponseConverterFetchFilesFromVariableValue: class TestWorkflowResponseConverterFetchFilesFromVariableValue:

View File

@ -3,8 +3,6 @@ from datetime import datetime
from unittest.mock import Mock from unittest.mock import Mock
from core.app.layers.conversation_variable_persist_layer import ConversationVariablePersistenceLayer from core.app.layers.conversation_variable_persist_layer import ConversationVariablePersistenceLayer
from core.variables import StringVariable
from core.variables.segments import Segment
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.graph_engine.protocols.command_channel import CommandChannel from core.workflow.graph_engine.protocols.command_channel import CommandChannel
@ -13,6 +11,8 @@ from core.workflow.node_events import NodeRunResult
from core.workflow.nodes.variable_assigner.common import helpers as common_helpers from core.workflow.nodes.variable_assigner.common import helpers as common_helpers
from core.workflow.runtime.graph_runtime_state_protocol import ReadOnlyGraphRuntimeState from core.workflow.runtime.graph_runtime_state_protocol import ReadOnlyGraphRuntimeState
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import StringVariable
from core.workflow.variables.segments import Segment
class MockReadOnlyVariablePool: class MockReadOnlyVariablePool:

View File

@ -13,7 +13,6 @@ from core.app.layers.pause_state_persist_layer import (
_AdvancedChatAppGenerateEntityWrapper, _AdvancedChatAppGenerateEntityWrapper,
_WorkflowGenerateEntityWrapper, _WorkflowGenerateEntityWrapper,
) )
from core.variables.segments import Segment
from core.workflow.entities.pause_reason import SchedulingPause from core.workflow.entities.pause_reason import SchedulingPause
from core.workflow.graph_engine.entities.commands import GraphEngineCommand from core.workflow.graph_engine.entities.commands import GraphEngineCommand
from core.workflow.graph_engine.layers.base import GraphEngineLayerNotInitializedError from core.workflow.graph_engine.layers.base import GraphEngineLayerNotInitializedError
@ -24,6 +23,7 @@ from core.workflow.graph_events.graph import (
GraphRunSucceededEvent, GraphRunSucceededEvent,
) )
from core.workflow.runtime.graph_runtime_state_protocol import ReadOnlyVariablePool from core.workflow.runtime.graph_runtime_state_protocol import ReadOnlyVariablePool
from core.workflow.variables.segments import Segment
from models.model import AppMode from models.model import AppMode
from repositories.factory import DifyAPIRepositoryFactory from repositories.factory import DifyAPIRepositoryFactory

View File

@ -3,7 +3,10 @@ import dataclasses
from pydantic import BaseModel from pydantic import BaseModel
from core.helper import encrypter from core.helper import encrypter
from core.variables.segments import ( from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable
from core.workflow.variables.segments import (
ArrayAnySegment, ArrayAnySegment,
ArrayFileSegment, ArrayFileSegment,
ArrayNumberSegment, ArrayNumberSegment,
@ -19,8 +22,8 @@ from core.variables.segments import (
StringSegment, StringSegment,
get_segment_discriminator, get_segment_discriminator,
) )
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from core.variables.variables import ( from core.workflow.variables.variables import (
ArrayAnyVariable, ArrayAnyVariable,
ArrayFileVariable, ArrayFileVariable,
ArrayNumberVariable, ArrayNumberVariable,
@ -35,9 +38,6 @@ from core.variables.variables import (
StringVariable, StringVariable,
Variable, Variable,
) )
from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable
def test_segment_group_to_text(): def test_segment_group_to_text():

View File

@ -1,6 +1,6 @@
import pytest import pytest
from core.variables.types import ArrayValidation, SegmentType from core.workflow.variables.types import ArrayValidation, SegmentType
class TestSegmentTypeIsArrayType: class TestSegmentTypeIsArrayType:

View File

@ -10,8 +10,10 @@ from typing import Any
import pytest import pytest
from core.variables.segment_group import SegmentGroup from core.workflow.file.enums import FileTransferMethod, FileType
from core.variables.segments import ( from core.workflow.file.models import File
from core.workflow.variables.segment_group import SegmentGroup
from core.workflow.variables.segments import (
ArrayFileSegment, ArrayFileSegment,
BooleanSegment, BooleanSegment,
FileSegment, FileSegment,
@ -20,9 +22,7 @@ from core.variables.segments import (
ObjectSegment, ObjectSegment,
StringSegment, StringSegment,
) )
from core.variables.types import ArrayValidation, SegmentType from core.workflow.variables.types import ArrayValidation, SegmentType
from core.workflow.file.enums import FileTransferMethod, FileType
from core.workflow.file.models import File
def create_test_file( def create_test_file(

View File

@ -1,7 +1,7 @@
import pytest import pytest
from pydantic import ValidationError from pydantic import ValidationError
from core.variables import ( from core.workflow.variables import (
ArrayFileVariable, ArrayFileVariable,
ArrayVariable, ArrayVariable,
FloatVariable, FloatVariable,
@ -11,7 +11,7 @@ from core.variables import (
SegmentType, SegmentType,
StringVariable, StringVariable,
) )
from core.variables.variables import VariableBase from core.workflow.variables.variables import VariableBase
def test_frozen_variables(): def test_frozen_variables():

View File

@ -1,10 +1,10 @@
from core.variables.segments import ( from core.workflow.runtime import VariablePool
from core.workflow.variables.segments import (
BooleanSegment, BooleanSegment,
IntegerSegment, IntegerSegment,
NoneSegment, NoneSegment,
StringSegment, StringSegment,
) )
from core.workflow.runtime import VariablePool
class TestVariablePoolGetAndNestedAttribute: class TestVariablePoolGetAndNestedAttribute:

View File

@ -3,7 +3,6 @@
import json import json
from unittest.mock import MagicMock from unittest.mock import MagicMock
from core.variables import IntegerVariable, StringVariable
from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel
from core.workflow.graph_engine.entities.commands import ( from core.workflow.graph_engine.entities.commands import (
AbortCommand, AbortCommand,
@ -12,6 +11,7 @@ from core.workflow.graph_engine.entities.commands import (
UpdateVariablesCommand, UpdateVariablesCommand,
VariableUpdate, VariableUpdate,
) )
from core.workflow.variables import IntegerVariable, StringVariable
class TestRedisChannel: class TestRedisChannel:

View File

@ -4,7 +4,6 @@ import time
from unittest.mock import MagicMock from unittest.mock import MagicMock
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.variables import IntegerVariable, StringVariable
from core.workflow.entities.graph_init_params import GraphInitParams from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.entities.pause_reason import SchedulingPause from core.workflow.entities.pause_reason import SchedulingPause
from core.workflow.graph import Graph from core.workflow.graph import Graph
@ -20,6 +19,7 @@ from core.workflow.graph_engine.entities.commands import (
from core.workflow.graph_events import GraphRunAbortedEvent, GraphRunPausedEvent, GraphRunStartedEvent from core.workflow.graph_events import GraphRunAbortedEvent, GraphRunPausedEvent, GraphRunStartedEvent
from core.workflow.nodes.start.start_node import StartNode from core.workflow.nodes.start.start_node import StartNode
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.variables import IntegerVariable, StringVariable
from models.enums import UserFrom from models.enums import UserFrom

View File

@ -215,9 +215,9 @@ class TestMockTemplateTransformNode:
def test_mock_template_transform_node_with_variables(self): def test_mock_template_transform_node_with_variables(self):
"""Test that MockTemplateTransformNode processes templates with variables.""" """Test that MockTemplateTransformNode processes templates with variables."""
from core.variables import StringVariable
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.variables import StringVariable
# Create test parameters # Create test parameters
graph_init_params = GraphInitParams( graph_init_params = GraphInitParams(

View File

@ -21,15 +21,6 @@ from typing import Any
from core.app.workflow.node_factory import DifyNodeFactory from core.app.workflow.node_factory import DifyNodeFactory
from core.tools.utils.yaml_utils import _load_yaml_file from core.tools.utils.yaml_utils import _load_yaml_file
from core.variables import (
ArrayNumberVariable,
ArrayObjectVariable,
ArrayStringVariable,
FloatVariable,
IntegerVariable,
ObjectVariable,
StringVariable,
)
from core.workflow.entities.graph_init_params import GraphInitParams from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.graph import Graph from core.workflow.graph import Graph
from core.workflow.graph_engine import GraphEngine, GraphEngineConfig from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
@ -41,6 +32,15 @@ from core.workflow.graph_events import (
) )
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import (
ArrayNumberVariable,
ArrayObjectVariable,
ArrayStringVariable,
FloatVariable,
IntegerVariable,
ObjectVariable,
StringVariable,
)
from .test_mock_config import MockConfig from .test_mock_config import MockConfig
from .test_mock_factory import MockNodeFactory from .test_mock_factory import MockNodeFactory

View File

@ -1,6 +1,5 @@
from configs import dify_config from configs import dify_config
from core.helper.code_executor.code_executor import CodeLanguage from core.helper.code_executor.code_executor import CodeLanguage
from core.variables.types import SegmentType
from core.workflow.nodes.code.code_node import CodeNode from core.workflow.nodes.code.code_node import CodeNode
from core.workflow.nodes.code.entities import CodeNodeData from core.workflow.nodes.code.entities import CodeNodeData
from core.workflow.nodes.code.exc import ( from core.workflow.nodes.code.exc import (
@ -9,6 +8,7 @@ from core.workflow.nodes.code.exc import (
OutputValidationError, OutputValidationError,
) )
from core.workflow.nodes.code.limits import CodeNodeLimits from core.workflow.nodes.code.limits import CodeNodeLimits
from core.workflow.variables.types import SegmentType
CodeNode._limits = CodeNodeLimits( CodeNode._limits = CodeNodeLimits(
max_string_length=dify_config.CODE_MAX_STRING_LENGTH, max_string_length=dify_config.CODE_MAX_STRING_LENGTH,

View File

@ -2,8 +2,8 @@ import pytest
from pydantic import ValidationError from pydantic import ValidationError
from core.helper.code_executor.code_executor import CodeLanguage from core.helper.code_executor.code_executor import CodeLanguage
from core.variables.types import SegmentType
from core.workflow.nodes.code.entities import CodeNodeData from core.workflow.nodes.code.entities import CodeNodeData
from core.workflow.variables.types import SegmentType
class TestCodeNodeDataOutput: class TestCodeNodeDataOutput:

View File

@ -6,7 +6,6 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.variables import StringSegment
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import WorkflowNodeExecutionStatus from core.workflow.enums import WorkflowNodeExecutionStatus
from core.workflow.nodes.knowledge_retrieval.entities import ( from core.workflow.nodes.knowledge_retrieval.entities import (
@ -20,6 +19,7 @@ from core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node import Kno
from core.workflow.repositories.rag_retrieval_protocol import RAGRetrievalProtocol, Source from core.workflow.repositories.rag_retrieval_protocol import RAGRetrievalProtocol, Source
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import StringSegment
from models.enums import UserFrom from models.enums import UserFrom

View File

@ -5,9 +5,9 @@ from core.workflow.graph_engine.entities.graph import Graph
from core.workflow.graph_engine.entities.graph_init_params import GraphInitParams from core.workflow.graph_engine.entities.graph_init_params import GraphInitParams
from core.workflow.graph_engine.entities.graph_runtime_state import GraphRuntimeState from core.workflow.graph_engine.entities.graph_runtime_state import GraphRuntimeState
from core.variables import ArrayNumberSegment, ArrayStringSegment
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.nodes.list_operator.node import ListOperatorNode from core.workflow.nodes.list_operator.node import ListOperatorNode
from core.workflow.variables import ArrayNumberSegment, ArrayStringSegment
from models.workflow import WorkflowType from models.workflow import WorkflowType

View File

@ -20,7 +20,6 @@ from core.model_runtime.entities.message_entities import (
) )
from core.model_runtime.entities.model_entities import AIModelEntity, FetchFrom, ModelType from core.model_runtime.entities.model_entities import AIModelEntity, FetchFrom, ModelType
from core.model_runtime.model_providers.model_provider_factory import ModelProviderFactory from core.model_runtime.model_providers.model_provider_factory import ModelProviderFactory
from core.variables import ArrayAnySegment, ArrayFileSegment, NoneSegment
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.file import File, FileTransferMethod, FileType from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.nodes.llm import llm_utils from core.workflow.nodes.llm import llm_utils
@ -37,6 +36,7 @@ from core.workflow.nodes.llm.node import LLMNode
from core.workflow.nodes.llm.protocols import CredentialsProvider, ModelFactory from core.workflow.nodes.llm.protocols import CredentialsProvider, ModelFactory
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import ArrayAnySegment, ArrayFileSegment, NoneSegment
from models.enums import UserFrom from models.enums import UserFrom
from models.provider import ProviderType from models.provider import ProviderType

View File

@ -1,5 +1,5 @@
from core.variables.types import SegmentType
from core.workflow.nodes.parameter_extractor.entities import ParameterConfig from core.workflow.nodes.parameter_extractor.entities import ParameterConfig
from core.workflow.variables.types import SegmentType
class TestParameterConfig: class TestParameterConfig:

View File

@ -8,7 +8,6 @@ from typing import Any
import pytest import pytest
from core.model_runtime.entities import LLMMode from core.model_runtime.entities import LLMMode
from core.variables.types import SegmentType
from core.workflow.nodes.llm import ModelConfig, VisionConfig from core.workflow.nodes.llm import ModelConfig, VisionConfig
from core.workflow.nodes.parameter_extractor.entities import ParameterConfig, ParameterExtractorNodeData from core.workflow.nodes.parameter_extractor.entities import ParameterConfig, ParameterExtractorNodeData
from core.workflow.nodes.parameter_extractor.exc import ( from core.workflow.nodes.parameter_extractor.exc import (
@ -18,6 +17,7 @@ from core.workflow.nodes.parameter_extractor.exc import (
RequiredParameterMissingError, RequiredParameterMissingError,
) )
from core.workflow.nodes.parameter_extractor.parameter_extractor_node import ParameterExtractorNode from core.workflow.nodes.parameter_extractor.parameter_extractor_node import ParameterExtractorNode
from core.workflow.variables.types import SegmentType
from factories.variable_factory import build_segment_with_type from factories.variable_factory import build_segment_with_type

View File

@ -6,9 +6,6 @@ import pytest
from docx.oxml.text.paragraph import CT_P from docx.oxml.text.paragraph import CT_P
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.variables import ArrayFileSegment
from core.variables.segments import ArrayStringSegment
from core.variables.variables import StringVariable
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod from core.workflow.file import File, FileTransferMethod
@ -20,6 +17,9 @@ from core.workflow.nodes.document_extractor.node import (
_extract_text_from_pdf, _extract_text_from_pdf,
_extract_text_from_plain_text, _extract_text_from_plain_text,
) )
from core.workflow.variables import ArrayFileSegment
from core.workflow.variables.segments import ArrayStringSegment
from core.workflow.variables.variables import StringVariable
from models.enums import UserFrom from models.enums import UserFrom

View File

@ -6,7 +6,6 @@ import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.app.workflow.node_factory import DifyNodeFactory from core.app.workflow.node_factory import DifyNodeFactory
from core.variables import ArrayFileSegment
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.enums import WorkflowNodeExecutionStatus from core.workflow.enums import WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod, FileType from core.workflow.file import File, FileTransferMethod, FileType
@ -16,6 +15,7 @@ from core.workflow.nodes.if_else.if_else_node import IfElseNode
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.utils.condition.entities import Condition, SubCondition, SubVariableCondition from core.workflow.utils.condition.entities import Condition, SubCondition, SubVariableCondition
from core.workflow.variables import ArrayFileSegment
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom from models.enums import UserFrom

View File

@ -3,7 +3,6 @@ from unittest.mock import MagicMock
import pytest import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.variables import ArrayFileSegment
from core.workflow.enums import WorkflowNodeExecutionStatus from core.workflow.enums import WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod, FileType from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.nodes.list_operator.entities import ( from core.workflow.nodes.list_operator.entities import (
@ -17,6 +16,7 @@ from core.workflow.nodes.list_operator.entities import (
) )
from core.workflow.nodes.list_operator.exc import InvalidKeyError from core.workflow.nodes.list_operator.exc import InvalidKeyError
from core.workflow.nodes.list_operator.node import ListOperatorNode, _get_file_extract_string_func from core.workflow.nodes.list_operator.node import ListOperatorNode, _get_file_extract_string_func
from core.workflow.variables import ArrayFileSegment
from models.enums import UserFrom from models.enums import UserFrom

View File

@ -11,12 +11,12 @@ import pytest
from core.model_runtime.entities.llm_entities import LLMUsage from core.model_runtime.entities.llm_entities import LLMUsage
from core.tools.entities.tool_entities import ToolInvokeMessage from core.tools.entities.tool_entities import ToolInvokeMessage
from core.tools.utils.message_transformer import ToolFileMessageTransformer from core.tools.utils.message_transformer import ToolFileMessageTransformer
from core.variables.segments import ArrayFileSegment
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.file import File, FileTransferMethod, FileType from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.node_events import StreamChunkEvent, StreamCompletedEvent from core.workflow.node_events import StreamChunkEvent, StreamCompletedEvent
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables.segments import ArrayFileSegment
if TYPE_CHECKING: # pragma: no cover - imported for type checking only if TYPE_CHECKING: # pragma: no cover - imported for type checking only
from core.workflow.nodes.tool.tool_node import ToolNode from core.workflow.nodes.tool.tool_node import ToolNode

View File

@ -4,7 +4,6 @@ from uuid import uuid4
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.app.workflow.node_factory import DifyNodeFactory from core.app.workflow.node_factory import DifyNodeFactory
from core.variables import ArrayStringVariable, StringVariable
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph from core.workflow.graph import Graph
from core.workflow.graph_events.node import NodeRunSucceededEvent from core.workflow.graph_events.node import NodeRunSucceededEvent
@ -13,6 +12,7 @@ from core.workflow.nodes.variable_assigner.v1 import VariableAssignerNode
from core.workflow.nodes.variable_assigner.v1.node_data import WriteMode from core.workflow.nodes.variable_assigner.v1.node_data import WriteMode
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import ArrayStringVariable, StringVariable
from models.enums import UserFrom from models.enums import UserFrom
DEFAULT_NODE_ID = "node_id" DEFAULT_NODE_ID = "node_id"

View File

@ -1,6 +1,6 @@
from core.variables import SegmentType
from core.workflow.nodes.variable_assigner.v2.enums import Operation from core.workflow.nodes.variable_assigner.v2.enums import Operation
from core.workflow.nodes.variable_assigner.v2.helpers import is_input_value_valid from core.workflow.nodes.variable_assigner.v2.helpers import is_input_value_valid
from core.workflow.variables import SegmentType
def test_is_input_value_valid_overwrite_array_string(): def test_is_input_value_valid_overwrite_array_string():

View File

@ -4,13 +4,13 @@ from uuid import uuid4
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.app.workflow.node_factory import DifyNodeFactory from core.app.workflow.node_factory import DifyNodeFactory
from core.variables import ArrayStringVariable
from core.workflow.entities import GraphInitParams from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph from core.workflow.graph import Graph
from core.workflow.nodes.variable_assigner.v2 import VariableAssignerNode from core.workflow.nodes.variable_assigner.v2 import VariableAssignerNode
from core.workflow.nodes.variable_assigner.v2.enums import InputType, Operation from core.workflow.nodes.variable_assigner.v2.enums import InputType, Operation
from core.workflow.runtime import GraphRuntimeState, VariablePool from core.workflow.runtime import GraphRuntimeState, VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import ArrayStringVariable
from models.enums import UserFrom from models.enums import UserFrom
DEFAULT_NODE_ID = "node_id" DEFAULT_NODE_ID = "node_id"

View File

@ -3,7 +3,6 @@ from unittest.mock import patch
import pytest import pytest
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.variables import FileVariable, StringVariable
from core.workflow.entities.graph_init_params import GraphInitParams from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus
from core.workflow.file import File, FileTransferMethod, FileType from core.workflow.file import File, FileTransferMethod, FileType
@ -18,6 +17,7 @@ from core.workflow.nodes.trigger_webhook.node import TriggerWebhookNode
from core.workflow.runtime.graph_runtime_state import GraphRuntimeState from core.workflow.runtime.graph_runtime_state import GraphRuntimeState
from core.workflow.runtime.variable_pool import VariablePool from core.workflow.runtime.variable_pool import VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables import FileVariable, StringVariable
from models.enums import UserFrom from models.enums import UserFrom
from models.workflow import WorkflowType from models.workflow import WorkflowType

View File

@ -3,8 +3,12 @@ from collections import defaultdict
import pytest import pytest
from core.variables import FileSegment, StringSegment from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.variables.segments import ( from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable
from core.workflow.variables import FileSegment, StringSegment
from core.workflow.variables.segments import (
ArrayAnySegment, ArrayAnySegment,
ArrayFileSegment, ArrayFileSegment,
ArrayNumberSegment, ArrayNumberSegment,
@ -15,7 +19,7 @@ from core.variables.segments import (
NoneSegment, NoneSegment,
ObjectSegment, ObjectSegment,
) )
from core.variables.variables import ( from core.workflow.variables.variables import (
ArrayNumberVariable, ArrayNumberVariable,
ArrayObjectVariable, ArrayObjectVariable,
ArrayStringVariable, ArrayStringVariable,
@ -25,10 +29,6 @@ from core.variables.variables import (
StringVariable, StringVariable,
Variable, Variable,
) )
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID
from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable
from factories.variable_factory import build_segment, segment_to_variable from factories.variable_factory import build_segment, segment_to_variable

View File

@ -4,7 +4,6 @@ import pytest
from configs import dify_config from configs import dify_config
from core.helper.code_executor.code_executor import CodeLanguage from core.helper.code_executor.code_executor import CodeLanguage
from core.variables.variables import StringVariable
from core.workflow.constants import ( from core.workflow.constants import (
CONVERSATION_VARIABLE_NODE_ID, CONVERSATION_VARIABLE_NODE_ID,
ENVIRONMENT_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID,
@ -15,6 +14,7 @@ from core.workflow.nodes.code.code_node import CodeNode
from core.workflow.nodes.code.limits import CodeNodeLimits from core.workflow.nodes.code.limits import CodeNodeLimits
from core.workflow.runtime import VariablePool from core.workflow.runtime import VariablePool
from core.workflow.system_variable import SystemVariable from core.workflow.system_variable import SystemVariable
from core.workflow.variables.variables import StringVariable
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry

View File

@ -7,7 +7,8 @@ import pytest
from hypothesis import HealthCheck, given, settings from hypothesis import HealthCheck, given, settings
from hypothesis import strategies as st from hypothesis import strategies as st
from core.variables import ( from core.workflow.file import File, FileTransferMethod, FileType
from core.workflow.variables import (
ArrayNumberVariable, ArrayNumberVariable,
ArrayObjectVariable, ArrayObjectVariable,
ArrayStringVariable, ArrayStringVariable,
@ -16,8 +17,8 @@ from core.variables import (
SecretVariable, SecretVariable,
StringVariable, StringVariable,
) )
from core.variables.exc import VariableError from core.workflow.variables.exc import VariableError
from core.variables.segments import ( from core.workflow.variables.segments import (
ArrayAnySegment, ArrayAnySegment,
ArrayFileSegment, ArrayFileSegment,
ArrayNumberSegment, ArrayNumberSegment,
@ -32,8 +33,7 @@ from core.variables.segments import (
Segment, Segment,
StringSegment, StringSegment,
) )
from core.variables.types import SegmentType from core.workflow.variables.types import SegmentType
from core.workflow.file import File, FileTransferMethod, FileType
from factories import variable_factory from factories import variable_factory
from factories.variable_factory import TypeMismatchError, build_segment, build_segment_with_type from factories.variable_factory import TypeMismatchError, build_segment, build_segment_with_type

View File

@ -1,6 +1,6 @@
from uuid import uuid4 from uuid import uuid4
from core.variables import SegmentType from core.workflow.variables import SegmentType
from factories import variable_factory from factories import variable_factory
from models import ConversationVariable from models import ConversationVariable

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