diff --git a/api/controllers/cli_api/dify_cli/cli_api.py b/api/controllers/cli_api/dify_cli/cli_api.py index 58b55a3bc3..e99095903a 100644 --- a/api/controllers/cli_api/dify_cli/cli_api.py +++ b/api/controllers/cli_api/dify_cli/cli_api.py @@ -1,4 +1,3 @@ -from dify_graph.file.helpers import get_signed_file_url_for_plugin from flask import abort from flask_restx import Resource from pydantic import BaseModel @@ -23,6 +22,7 @@ from core.session.cli_api import CliContext from core.skill.entities import ToolInvocationRequest from core.tools.entities.tool_entities import ToolProviderType from core.tools.tool_manager import ToolManager +from dify_graph.file.helpers import get_signed_file_url_for_plugin from libs.helper import length_prefixed_response from models.account import Account from models.model import EndUser, Tenant diff --git a/api/controllers/console/workspace/sandbox_providers.py b/api/controllers/console/workspace/sandbox_providers.py index 2543f6342c..98dbb9b1f9 100644 --- a/api/controllers/console/workspace/sandbox_providers.py +++ b/api/controllers/console/workspace/sandbox_providers.py @@ -1,12 +1,12 @@ import logging -from dify_graph.model_runtime.utils.encoders import jsonable_encoder from flask import request from flask_restx import Resource, fields from pydantic import BaseModel from controllers.console import console_ns from controllers.console.wraps import account_initialization_required, setup_required +from dify_graph.model_runtime.utils.encoders import jsonable_encoder from libs.login import current_account_with_tenant, login_required from services.sandbox.sandbox_provider_service import SandboxProviderService diff --git a/api/core/agent/agent_app_runner.py b/api/core/agent/agent_app_runner.py index 9c4f6ed3e2..b5a2cd1ef5 100644 --- a/api/core/agent/agent_app_runner.py +++ b/api/core/agent/agent_app_runner.py @@ -8,6 +8,11 @@ from core.agent.entities import AgentEntity, AgentLog, AgentResult from core.agent.patterns.strategy_factory import StrategyFactory from core.app.apps.base_app_queue_manager import PublishFrom from core.app.entities.queue_entities import QueueAgentThoughtEvent, QueueMessageEndEvent, QueueMessageFileEvent +from core.prompt.agent_history_prompt_transform import AgentHistoryPromptTransform +from core.tools.__base.tool import Tool +from core.tools.entities.tool_entities import ToolInvokeMeta +from core.tools.tool_engine import ToolEngine +from dify_graph.file import file_manager from dify_graph.model_runtime.entities import ( AssistantPromptMessage, LLMResult, @@ -20,11 +25,6 @@ from dify_graph.model_runtime.entities import ( UserPromptMessage, ) from dify_graph.model_runtime.entities.message_entities import ImagePromptMessageContent, PromptMessageContentUnionTypes -from core.prompt.agent_history_prompt_transform import AgentHistoryPromptTransform -from core.tools.__base.tool import Tool -from core.tools.entities.tool_entities import ToolInvokeMeta -from core.tools.tool_engine import ToolEngine -from dify_graph.file import file_manager from models.model import Message logger = logging.getLogger(__name__) diff --git a/api/core/agent/patterns/base.py b/api/core/agent/patterns/base.py index 950a6594da..f3d31fdbc0 100644 --- a/api/core/agent/patterns/base.py +++ b/api/core/agent/patterns/base.py @@ -11,6 +11,8 @@ from typing import TYPE_CHECKING, Any from core.agent.entities import AgentLog, AgentResult, ExecutionContext from core.model_manager import ModelInstance +from core.tools.entities.tool_entities import ToolInvokeMessage, ToolInvokeMeta +from dify_graph.file import File from dify_graph.model_runtime.entities import ( AssistantPromptMessage, LLMResult, @@ -21,8 +23,6 @@ from dify_graph.model_runtime.entities import ( ) from dify_graph.model_runtime.entities.llm_entities import LLMUsage from dify_graph.model_runtime.entities.message_entities import TextPromptMessageContent -from core.tools.entities.tool_entities import ToolInvokeMessage, ToolInvokeMeta -from dify_graph.file import File if TYPE_CHECKING: from core.tools.__base.tool import Tool diff --git a/api/core/agent/patterns/function_call.py b/api/core/agent/patterns/function_call.py index af3f577d1a..ba5fd7902f 100644 --- a/api/core/agent/patterns/function_call.py +++ b/api/core/agent/patterns/function_call.py @@ -12,6 +12,8 @@ from collections.abc import Generator from typing import Any, Union from core.agent.entities import AgentLog, AgentResult +from core.tools.entities.tool_entities import ToolInvokeMeta +from dify_graph.file import File from dify_graph.model_runtime.entities import ( AssistantPromptMessage, LLMResult, @@ -22,8 +24,6 @@ from dify_graph.model_runtime.entities import ( PromptMessageTool, ToolPromptMessage, ) -from core.tools.entities.tool_entities import ToolInvokeMeta -from dify_graph.file import File from .base import AgentPattern diff --git a/api/core/agent/patterns/react.py b/api/core/agent/patterns/react.py index e11b775c5a..a7032dfa20 100644 --- a/api/core/agent/patterns/react.py +++ b/api/core/agent/patterns/react.py @@ -9,6 +9,7 @@ from typing import TYPE_CHECKING, Any, Union from core.agent.entities import AgentLog, AgentResult, AgentScratchpadUnit, ExecutionContext from core.agent.output_parser.cot_output_parser import CotAgentOutputParser from core.model_manager import ModelInstance +from dify_graph.file import File from dify_graph.model_runtime.entities import ( AssistantPromptMessage, LLMResult, @@ -17,7 +18,6 @@ from dify_graph.model_runtime.entities import ( PromptMessage, SystemPromptMessage, ) -from dify_graph.file import File from .base import AgentPattern, ToolInvokeHook diff --git a/api/core/agent/patterns/strategy_factory.py b/api/core/agent/patterns/strategy_factory.py index 6d41571449..96809b4921 100644 --- a/api/core/agent/patterns/strategy_factory.py +++ b/api/core/agent/patterns/strategy_factory.py @@ -6,8 +6,8 @@ from typing import TYPE_CHECKING from core.agent.entities import AgentEntity, ExecutionContext from core.model_manager import ModelInstance -from dify_graph.model_runtime.entities.model_entities import ModelFeature from dify_graph.file.models import File +from dify_graph.model_runtime.entities.model_entities import ModelFeature from .base import AgentPattern, ToolInvokeHook from .function_call import FunctionCallStrategy diff --git a/api/core/app/layers/sandbox_layer.py b/api/core/app/layers/sandbox_layer.py index 1d91f73e40..89f75aedac 100644 --- a/api/core/app/layers/sandbox_layer.py +++ b/api/core/app/layers/sandbox_layer.py @@ -1,10 +1,9 @@ import logging +from core.sandbox import Sandbox from dify_graph.graph_engine.layers.base import GraphEngineLayer from dify_graph.graph_events.base import GraphEngineEvent -from core.sandbox import Sandbox - logger = logging.getLogger(__name__) diff --git a/api/core/memory/node_token_buffer_memory.py b/api/core/memory/node_token_buffer_memory.py index 687169c721..9dea875e39 100644 --- a/api/core/memory/node_token_buffer_memory.py +++ b/api/core/memory/node_token_buffer_memory.py @@ -22,6 +22,8 @@ from sqlalchemy.orm import Session from core.memory.base import BaseMemory from core.model_manager import ModelInstance +from core.prompt.utils.extract_thread_messages import extract_thread_messages +from dify_graph.file import file_manager from dify_graph.model_runtime.entities import ( AssistantPromptMessage, MultiModalPromptMessageContent, @@ -32,8 +34,6 @@ from dify_graph.model_runtime.entities import ( UserPromptMessage, ) from dify_graph.model_runtime.entities.message_entities import PromptMessageContentUnionTypes -from core.prompt.utils.extract_thread_messages import extract_thread_messages -from dify_graph.file import file_manager from extensions.ext_database import db from models.model import Message from models.workflow import WorkflowNodeExecutionModel diff --git a/api/core/sandbox/bash/dify_cli.py b/api/core/sandbox/bash/dify_cli.py index 1c18daaee3..2d7d2544f8 100644 --- a/api/core/sandbox/bash/dify_cli.py +++ b/api/core/sandbox/bash/dify_cli.py @@ -5,11 +5,11 @@ from typing import TYPE_CHECKING, Any from pydantic import BaseModel, Field -from dify_graph.model_runtime.utils.encoders import jsonable_encoder from core.session.cli_api import CliApiSession from core.skill.entities import ToolDependencies, ToolReference from core.tools.entities.tool_entities import ToolParameter, ToolProviderType from core.virtual_environment.__base.entities import Arch, OperatingSystem +from dify_graph.model_runtime.utils.encoders import jsonable_encoder from ..entities import DifyCli diff --git a/api/core/tools/__base/tool.py b/api/core/tools/__base/tool.py index b3598c7578..948319c9d8 100644 --- a/api/core/tools/__base/tool.py +++ b/api/core/tools/__base/tool.py @@ -8,8 +8,6 @@ from typing import TYPE_CHECKING, Any if TYPE_CHECKING: # pragma: no cover from models.model import File -from dify_graph.model_runtime.entities.message_entities import PromptMessageTool - from core.tools.__base.tool_runtime import ToolRuntime from core.tools.entities.tool_entities import ( ToolEntity, @@ -17,6 +15,7 @@ from core.tools.entities.tool_entities import ( ToolParameter, ToolProviderType, ) +from dify_graph.model_runtime.entities.message_entities import PromptMessageTool class Tool(ABC): diff --git a/api/core/workflow/nodes/command/node.py b/api/core/workflow/nodes/command/node.py index f4256bc0c1..2c5204e7ef 100644 --- a/api/core/workflow/nodes/command/node.py +++ b/api/core/workflow/nodes/command/node.py @@ -2,19 +2,18 @@ import logging from collections.abc import Mapping, Sequence from typing import Any -from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus -from dify_graph.nodes.base.entities import VariableSelector -from dify_graph.nodes.base.node import Node -from dify_graph.nodes.base.variable_template_parser import VariableTemplateParser - from core.sandbox import sandbox_debug from core.sandbox.bash.session import SANDBOX_READY_TIMEOUT from core.virtual_environment.__base.command_future import CommandCancelledError, CommandTimeoutError from core.virtual_environment.__base.helpers import submit_command, with_connection -from dify_graph.node_events import NodeRunResult -from dify_graph.nodes.base import variable_template_parser from core.workflow.nodes.command.entities import CommandNodeData from core.workflow.nodes.command.exc import CommandExecutionError +from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus +from dify_graph.node_events import NodeRunResult +from dify_graph.nodes.base import variable_template_parser +from dify_graph.nodes.base.entities import VariableSelector +from dify_graph.nodes.base.node import Node +from dify_graph.nodes.base.variable_template_parser import VariableTemplateParser logger = logging.getLogger(__name__) diff --git a/api/core/workflow/nodes/file_upload/node.py b/api/core/workflow/nodes/file_upload/node.py index 2d2582387f..e45f7018c4 100644 --- a/api/core/workflow/nodes/file_upload/node.py +++ b/api/core/workflow/nodes/file_upload/node.py @@ -5,17 +5,16 @@ from collections.abc import Mapping, Sequence from pathlib import PurePosixPath from typing import Any, cast -from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus -from dify_graph.nodes.base.node import Node -from dify_graph.variables.segments import ArrayStringSegment, FileSegment - from core.sandbox.bash.session import SANDBOX_READY_TIMEOUT from core.virtual_environment.__base.command_future import CommandCancelledError, CommandTimeoutError from core.virtual_environment.__base.helpers import pipeline +from core.zip_sandbox import SandboxDownloadItem +from dify_graph.enums import NodeType, WorkflowNodeExecutionStatus from dify_graph.file import File, FileTransferMethod from dify_graph.node_events import NodeRunResult +from dify_graph.nodes.base.node import Node from dify_graph.variables import ArrayFileSegment -from core.zip_sandbox import SandboxDownloadItem +from dify_graph.variables.segments import ArrayStringSegment, FileSegment from .entities import FileUploadNodeData from .exc import FileUploadDownloadError, FileUploadNodeError diff --git a/api/dify_graph/context/__init__.py b/api/dify_graph/context/__init__.py index b3109c04d4..4e96858a9c 100644 --- a/api/dify_graph/context/__init__.py +++ b/api/dify_graph/context/__init__.py @@ -17,6 +17,7 @@ from dify_graph.context.execution_context import ( register_context_capturer, reset_context_provider, ) + __all__ = [ "AppContext", "ContextProviderNotFoundError", diff --git a/api/dify_graph/nodes/agent/agent_node.py b/api/dify_graph/nodes/agent/agent_node.py index 98e1c748be..65fa597f64 100644 --- a/api/dify_graph/nodes/agent/agent_node.py +++ b/api/dify_graph/nodes/agent/agent_node.py @@ -517,9 +517,8 @@ class AgentNode(Node[AgentNodeData]): Fetch memory instance for saving node memory. This is a simplified version that doesn't require model_instance. """ - from dify_graph.model_runtime.entities.model_entities import ModelType - from core.model_manager import ModelManager + from dify_graph.model_runtime.entities.model_entities import ModelType node_data = self.node_data if not node_data.memory: diff --git a/api/services/skill_service.py b/api/services/skill_service.py index 6acee37fc3..3876916d7e 100644 --- a/api/services/skill_service.py +++ b/api/services/skill_service.py @@ -18,8 +18,6 @@ from collections.abc import Mapping from functools import reduce from typing import Any, cast -from dify_graph.enums import NodeType - from core.app.entities.app_asset_entities import AppAssetFileTree, AppAssetNode from core.sandbox.entities.config import AppAssets from core.skill.assembler import SkillBundleAssembler, SkillDocumentAssembler @@ -28,6 +26,7 @@ from core.skill.entities.skill_document import SkillDocument from core.skill.entities.skill_metadata import SkillMetadata from core.skill.entities.tool_dependencies import ToolDependencies, ToolDependency from core.skill.skill_manager import SkillManager +from dify_graph.enums import NodeType from models.model import App from services.app_asset_service import AppAssetService diff --git a/api/services/workflow/nested_node_graph_service.py b/api/services/workflow/nested_node_graph_service.py index 9f89a27032..3e9eeb9e5b 100644 --- a/api/services/workflow/nested_node_graph_service.py +++ b/api/services/workflow/nested_node_graph_service.py @@ -7,9 +7,9 @@ extracting values from list[PromptMessage] variables. from typing import Any -from dify_graph.enums import NodeType from sqlalchemy.orm import Session +from dify_graph.enums import NodeType from dify_graph.model_runtime.entities import LLMMode from services.model_provider_service import ModelProviderService from services.workflow.entities import NestedNodeGraphRequest, NestedNodeGraphResponse, NestedNodeParameterSchema diff --git a/api/tests/unit_tests/core/agent/patterns/test_base.py b/api/tests/unit_tests/core/agent/patterns/test_base.py index 50696a6d97..c5a65bd6d2 100644 --- a/api/tests/unit_tests/core/agent/patterns/test_base.py +++ b/api/tests/unit_tests/core/agent/patterns/test_base.py @@ -4,10 +4,10 @@ from decimal import Decimal from unittest.mock import MagicMock import pytest -from dify_graph.model_runtime.entities.llm_entities import LLMUsage from core.agent.entities import AgentLog, ExecutionContext from core.agent.patterns.base import AgentPattern +from dify_graph.model_runtime.entities.llm_entities import LLMUsage class ConcreteAgentPattern(AgentPattern): diff --git a/api/tests/unit_tests/core/agent/patterns/test_function_call.py b/api/tests/unit_tests/core/agent/patterns/test_function_call.py index a5c07749bc..a2764a8a99 100644 --- a/api/tests/unit_tests/core/agent/patterns/test_function_call.py +++ b/api/tests/unit_tests/core/agent/patterns/test_function_call.py @@ -4,6 +4,8 @@ from decimal import Decimal from unittest.mock import MagicMock import pytest + +from core.agent.entities import AgentLog, ExecutionContext from dify_graph.model_runtime.entities.llm_entities import LLMUsage from dify_graph.model_runtime.entities.message_entities import ( PromptMessageTool, @@ -11,8 +13,6 @@ from dify_graph.model_runtime.entities.message_entities import ( UserPromptMessage, ) -from core.agent.entities import AgentLog, ExecutionContext - @pytest.fixture def mock_model_instance(): diff --git a/api/tests/unit_tests/core/agent/patterns/test_strategy_factory.py b/api/tests/unit_tests/core/agent/patterns/test_strategy_factory.py index 79ff155af6..ec35cc56b6 100644 --- a/api/tests/unit_tests/core/agent/patterns/test_strategy_factory.py +++ b/api/tests/unit_tests/core/agent/patterns/test_strategy_factory.py @@ -3,12 +3,12 @@ from unittest.mock import MagicMock import pytest -from dify_graph.model_runtime.entities.model_entities import ModelFeature from core.agent.entities import AgentEntity, ExecutionContext from core.agent.patterns.function_call import FunctionCallStrategy from core.agent.patterns.react import ReActStrategy from core.agent.patterns.strategy_factory import StrategyFactory +from dify_graph.model_runtime.entities.model_entities import ModelFeature @pytest.fixture diff --git a/api/tests/unit_tests/core/agent/test_agent_app_runner.py b/api/tests/unit_tests/core/agent/test_agent_app_runner.py index fc02d87dfc..98eb8a9f52 100644 --- a/api/tests/unit_tests/core/agent/test_agent_app_runner.py +++ b/api/tests/unit_tests/core/agent/test_agent_app_runner.py @@ -4,10 +4,10 @@ from decimal import Decimal from unittest.mock import MagicMock, patch import pytest -from dify_graph.model_runtime.entities.llm_entities import LLMUsage from core.agent.entities import AgentEntity, AgentLog, AgentPromptEntity, AgentResult from dify_graph.model_runtime.entities import SystemPromptMessage, UserPromptMessage +from dify_graph.model_runtime.entities.llm_entities import LLMUsage class TestOrganizePromptMessages: diff --git a/api/tests/unit_tests/core/app/apps/test_workflow_app_runner_stream_chunk.py b/api/tests/unit_tests/core/app/apps/test_workflow_app_runner_stream_chunk.py index e891a9edba..5cd250b7d5 100644 --- a/api/tests/unit_tests/core/app/apps/test_workflow_app_runner_stream_chunk.py +++ b/api/tests/unit_tests/core/app/apps/test_workflow_app_runner_stream_chunk.py @@ -2,8 +2,8 @@ from unittest.mock import MagicMock from core.app.apps.base_app_queue_manager import PublishFrom from core.app.apps.workflow_app_runner import WorkflowBasedAppRunner -from dify_graph.graph_events import NodeRunStreamChunkEvent from dify_graph.enums import NodeType +from dify_graph.graph_events import NodeRunStreamChunkEvent class DummyQueueManager: diff --git a/api/tests/unit_tests/core/file/test_file_manager.py b/api/tests/unit_tests/core/file/test_file_manager.py index b4eb7d3a21..6e8e0d4492 100644 --- a/api/tests/unit_tests/core/file/test_file_manager.py +++ b/api/tests/unit_tests/core/file/test_file_manager.py @@ -2,14 +2,13 @@ from unittest.mock import patch -from dify_graph.model_runtime.entities.message_entities import ImagePromptMessageContent +from dify_graph.file import File, FileTransferMethod, FileType from dify_graph.file.file_manager import ( _encode_file_ref, restore_multimodal_content, to_prompt_message_content, ) - -from dify_graph.file import File, FileTransferMethod, FileType +from dify_graph.model_runtime.entities.message_entities import ImagePromptMessageContent class TestEncodeFileRef: diff --git a/api/tests/unit_tests/core/llm_generator/output_parser/test_file_ref.py b/api/tests/unit_tests/core/llm_generator/output_parser/test_file_ref.py index d237dee68c..714374cdd7 100644 --- a/api/tests/unit_tests/core/llm_generator/output_parser/test_file_ref.py +++ b/api/tests/unit_tests/core/llm_generator/output_parser/test_file_ref.py @@ -3,7 +3,6 @@ Unit tests for sandbox file path detection and conversion. """ import pytest -from dify_graph.variables.segments import ArrayFileSegment, FileSegment from core.llm_generator.output_parser.file_ref import ( FILE_PATH_DESCRIPTION_SUFFIX, @@ -14,6 +13,7 @@ from core.llm_generator.output_parser.file_ref import ( is_file_path_property, ) from dify_graph.file import File, FileTransferMethod, FileType +from dify_graph.variables.segments import ArrayFileSegment, FileSegment def _build_file(file_id: str) -> File: diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_response_coordinator.py b/api/tests/unit_tests/core/workflow/graph_engine/test_response_coordinator.py index d6b833e5e4..5020f948b4 100644 --- a/api/tests/unit_tests/core/workflow/graph_engine/test_response_coordinator.py +++ b/api/tests/unit_tests/core/workflow/graph_engine/test_response_coordinator.py @@ -7,15 +7,14 @@ from dify_graph.enums import NodeType from dify_graph.graph.graph import Graph from dify_graph.graph_engine.response_coordinator.coordinator import ResponseStreamCoordinator from dify_graph.graph_engine.response_coordinator.session import ResponseSession -from dify_graph.nodes.base.entities import BaseNodeData -from dify_graph.nodes.base.template import Template, VariableSegment - from dify_graph.graph_events import ( ChunkType, NodeRunStreamChunkEvent, ToolCall, ToolResult, ) +from dify_graph.nodes.base.entities import BaseNodeData +from dify_graph.nodes.base.template import Template, VariableSegment from dify_graph.runtime import VariablePool diff --git a/api/tests/unit_tests/core/workflow/nodes/command/test_command_node.py b/api/tests/unit_tests/core/workflow/nodes/command/test_command_node.py index 3d1936b6a0..351b7ce7e4 100644 --- a/api/tests/unit_tests/core/workflow/nodes/command/test_command_node.py +++ b/api/tests/unit_tests/core/workflow/nodes/command/test_command_node.py @@ -4,9 +4,6 @@ from io import BytesIO from typing import Any from unittest.mock import MagicMock -from dify_graph.enums import WorkflowNodeExecutionStatus -from dify_graph.system_variable import SystemVariable - from core.entities.provider_entities import BasicProviderConfig from core.virtual_environment.__base.entities import ( Arch, @@ -19,10 +16,12 @@ from core.virtual_environment.__base.entities import ( from core.virtual_environment.__base.virtual_environment import VirtualEnvironment from core.virtual_environment.channel.queue_transport import QueueTransportReadCloser from core.virtual_environment.channel.transport import NopTransportWriteCloser +from core.workflow.nodes.command.node import CommandNode from dify_graph.entities import GraphInitParams from dify_graph.entities.graph_init_params import DIFY_RUN_CONTEXT_KEY -from core.workflow.nodes.command.node import CommandNode +from dify_graph.enums import WorkflowNodeExecutionStatus from dify_graph.runtime import GraphRuntimeState, VariablePool +from dify_graph.system_variable import SystemVariable class FakeVirtualEnvironment(VirtualEnvironment): diff --git a/api/tests/unit_tests/core/workflow/nodes/test_llm_node_streaming.py b/api/tests/unit_tests/core/workflow/nodes/test_llm_node_streaming.py index 521de01e8f..3204b349ec 100644 --- a/api/tests/unit_tests/core/workflow/nodes/test_llm_node_streaming.py +++ b/api/tests/unit_tests/core/workflow/nodes/test_llm_node_streaming.py @@ -3,12 +3,12 @@ from collections.abc import Generator from typing import Any import pytest -from dify_graph.model_runtime.entities.llm_entities import LLMUsage -from dify_graph.entities.tool_entities import ToolResultStatus -from dify_graph.nodes.llm.node import LLMNode from dify_graph.entities import ToolCallResult +from dify_graph.entities.tool_entities import ToolResultStatus +from dify_graph.model_runtime.entities.llm_entities import LLMUsage from dify_graph.node_events import ModelInvokeCompletedEvent, NodeEventBase +from dify_graph.nodes.llm.node import LLMNode class _StubModelInstance: