Skip to content

Commit d76ad15

Browse files
authored
refactor(graph_engine): move observability layer and persistence laye… (#31620)
1 parent 144ef08 commit d76ad15

File tree

11 files changed

+37
-30
lines changed

11 files changed

+37
-30
lines changed

api/.importlinter

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ forbidden_modules =
104104
ignore_imports =
105105
core.workflow.nodes.loop.loop_node -> core.app.workflow.node_factory
106106
core.workflow.graph_engine.command_channels.redis_channel -> extensions.ext_redis
107-
core.workflow.graph_engine.layers.observability -> configs
108-
core.workflow.graph_engine.layers.observability -> extensions.otel.runtime
109-
core.workflow.graph_engine.layers.persistence -> core.ops.ops_trace_manager
107+
core.workflow.workflow_entry -> core.app.workflow.layers.observability
110108
core.workflow.graph_engine.worker_management.worker_pool -> configs
111109
core.workflow.nodes.agent.agent_node -> core.model_manager
112110
core.workflow.nodes.agent.agent_node -> core.provider_manager
@@ -147,7 +145,6 @@ ignore_imports =
147145
core.workflow.workflow_entry -> models.workflow
148146
core.workflow.nodes.agent.agent_node -> core.agent.entities
149147
core.workflow.nodes.agent.agent_node -> core.agent.plugin_entities
150-
core.workflow.graph_engine.layers.persistence -> core.app.entities.app_invoke_entities
151148
core.workflow.nodes.base.node -> core.app.entities.app_invoke_entities
152149
core.workflow.nodes.knowledge_index.knowledge_index_node -> core.app.entities.app_invoke_entities
153150
core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.app.app_config.entities
@@ -217,7 +214,6 @@ ignore_imports =
217214
core.workflow.nodes.llm.node -> core.llm_generator.output_parser.errors
218215
core.workflow.nodes.llm.node -> core.llm_generator.output_parser.structured_output
219216
core.workflow.nodes.llm.node -> core.model_manager
220-
core.workflow.graph_engine.layers.persistence -> core.ops.entities.trace_entity
221217
core.workflow.nodes.agent.entities -> core.prompt.entities.advanced_prompt_entities
222218
core.workflow.nodes.knowledge_retrieval.knowledge_retrieval_node -> core.prompt.simple_prompt_transform
223219
core.workflow.nodes.llm.entities -> core.prompt.entities.advanced_prompt_entities

api/core/app/apps/advanced_chat/app_runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
)
2222
from core.app.features.annotation_reply.annotation_reply import AnnotationReplyFeature
2323
from core.app.layers.conversation_variable_persist_layer import ConversationVariablePersistenceLayer
24+
from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
2425
from core.db.session_factory import session_factory
2526
from core.moderation.base import ModerationError
2627
from core.moderation.input_moderation import InputModeration
2728
from core.variables.variables import Variable
2829
from core.workflow.enums import WorkflowType
2930
from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel
3031
from core.workflow.graph_engine.layers.base import GraphEngineLayer
31-
from core.workflow.graph_engine.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
3232
from core.workflow.repositories.workflow_execution_repository import WorkflowExecutionRepository
3333
from core.workflow.repositories.workflow_node_execution_repository import WorkflowNodeExecutionRepository
3434
from core.workflow.runtime import GraphRuntimeState, VariablePool

api/core/app/apps/pipeline/pipeline_runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
InvokeFrom,
1010
RagPipelineGenerateEntity,
1111
)
12+
from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
1213
from core.app.workflow.node_factory import DifyNodeFactory
1314
from core.variables.variables import RAGPipelineVariable, RAGPipelineVariableInput
1415
from core.workflow.entities.graph_init_params import GraphInitParams
1516
from core.workflow.enums import WorkflowType
1617
from core.workflow.graph import Graph
17-
from core.workflow.graph_engine.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
1818
from core.workflow.graph_events import GraphEngineEvent, GraphRunFailedEvent
1919
from core.workflow.repositories.workflow_execution_repository import WorkflowExecutionRepository
2020
from core.workflow.repositories.workflow_node_execution_repository import WorkflowNodeExecutionRepository

api/core/app/apps/workflow/app_runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
from core.app.apps.workflow.app_config_manager import WorkflowAppConfig
88
from core.app.apps.workflow_app_runner import WorkflowBasedAppRunner
99
from core.app.entities.app_invoke_entities import InvokeFrom, WorkflowAppGenerateEntity
10+
from core.app.workflow.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
1011
from core.workflow.enums import WorkflowType
1112
from core.workflow.graph_engine.command_channels.redis_channel import RedisChannel
1213
from core.workflow.graph_engine.layers.base import GraphEngineLayer
13-
from core.workflow.graph_engine.layers.persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
1414
from core.workflow.repositories.workflow_execution_repository import WorkflowExecutionRepository
1515
from core.workflow.repositories.workflow_node_execution_repository import WorkflowNodeExecutionRepository
1616
from core.workflow.runtime import GraphRuntimeState, VariablePool
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"""Workflow-level GraphEngine layers that depend on outer infrastructure."""
2+
3+
from .observability import ObservabilityLayer
4+
from .persistence import PersistenceWorkflowInfo, WorkflowPersistenceLayer
5+
6+
__all__ = [
7+
"ObservabilityLayer",
8+
"PersistenceWorkflowInfo",
9+
"WorkflowPersistenceLayer",
10+
]
File renamed without changes.

api/core/workflow/graph_engine/layers/persistence.py renamed to api/core/app/workflow/layers/persistence.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
from core.workflow.node_events import NodeRunResult
4646
from core.workflow.repositories.workflow_execution_repository import WorkflowExecutionRepository
4747
from core.workflow.repositories.workflow_node_execution_repository import WorkflowNodeExecutionRepository
48-
from core.workflow.workflow_entry import WorkflowEntry
4948
from libs.datetime_utils import naive_utc_now
5049

5150

@@ -316,6 +315,9 @@ def _prepare_workflow_inputs(self) -> Mapping[str, Any]:
316315
# workflow inputs stay reusable without binding future runs to this conversation.
317316
continue
318317
inputs[f"sys.{field_name}"] = value
318+
# Local import to avoid circular dependency during app bootstrapping.
319+
from core.workflow.workflow_entry import WorkflowEntry
320+
319321
handled = WorkflowEntry.handle_special_values(inputs)
320322
return handled or {}
321323

api/core/workflow/graph_engine/layers/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88
from .base import GraphEngineLayer
99
from .debug_logging import DebugLoggingLayer
1010
from .execution_limits import ExecutionLimitsLayer
11-
from .observability import ObservabilityLayer
1211

1312
__all__ = [
1413
"DebugLoggingLayer",
1514
"ExecutionLimitsLayer",
1615
"GraphEngineLayer",
17-
"ObservabilityLayer",
1816
]

api/core/workflow/workflow_entry.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from configs import dify_config
88
from core.app.apps.exc import GenerateTaskStoppedError
99
from core.app.entities.app_invoke_entities import InvokeFrom
10+
from core.app.workflow.layers.observability import ObservabilityLayer
1011
from core.app.workflow.node_factory import DifyNodeFactory
1112
from core.file.models import File
1213
from core.workflow.constants import ENVIRONMENT_VARIABLE_NODE_ID
@@ -15,7 +16,7 @@
1516
from core.workflow.graph import Graph
1617
from core.workflow.graph_engine import GraphEngine
1718
from core.workflow.graph_engine.command_channels import InMemoryChannel
18-
from core.workflow.graph_engine.layers import DebugLoggingLayer, ExecutionLimitsLayer, ObservabilityLayer
19+
from core.workflow.graph_engine.layers import DebugLoggingLayer, ExecutionLimitsLayer
1920
from core.workflow.graph_engine.protocols.command_channel import CommandChannel
2021
from core.workflow.graph_events import GraphEngineEvent, GraphNodeEventBase, GraphRunFailedEvent
2122
from core.workflow.nodes import NodeType

api/tests/unit_tests/core/workflow/graph_engine/layers/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ def mock_tool_node():
9090
@pytest.fixture
9191
def mock_is_instrument_flag_enabled_false():
9292
"""Mock is_instrument_flag_enabled to return False."""
93-
with patch("core.workflow.graph_engine.layers.observability.is_instrument_flag_enabled", return_value=False):
93+
with patch("core.app.workflow.layers.observability.is_instrument_flag_enabled", return_value=False):
9494
yield
9595

9696

9797
@pytest.fixture
9898
def mock_is_instrument_flag_enabled_true():
9999
"""Mock is_instrument_flag_enabled to return True."""
100-
with patch("core.workflow.graph_engine.layers.observability.is_instrument_flag_enabled", return_value=True):
100+
with patch("core.app.workflow.layers.observability.is_instrument_flag_enabled", return_value=True):
101101
yield
102102

103103

0 commit comments

Comments
 (0)