mirror of
https://github.com/langgenius/dify.git
synced 2026-05-03 00:48:04 +08:00
refactor: rename new runtime as sandbox feature
This commit is contained in:
@ -109,6 +109,7 @@ from .workflow import (
|
||||
WorkflowRun,
|
||||
WorkflowType,
|
||||
)
|
||||
from .workflow_features import WorkflowFeature, WorkflowFeatures
|
||||
|
||||
__all__ = [
|
||||
"APIBasedExtension",
|
||||
@ -202,6 +203,8 @@ __all__ = [
|
||||
"Workflow",
|
||||
"WorkflowAppLog",
|
||||
"WorkflowAppLogCreatedFrom",
|
||||
"WorkflowFeature",
|
||||
"WorkflowFeatures",
|
||||
"WorkflowNodeExecutionModel",
|
||||
"WorkflowNodeExecutionOffload",
|
||||
"WorkflowNodeExecutionTriggeredFrom",
|
||||
|
||||
@ -37,13 +37,13 @@ from extensions.ext_storage import Storage
|
||||
from factories.variable_factory import TypeMismatchError, build_segment_with_type
|
||||
from libs.datetime_utils import naive_utc_now
|
||||
from libs.uuid_utils import uuidv7
|
||||
from models.workflow_features import WorkflowFeature, WorkflowFeatures
|
||||
|
||||
from ._workflow_exc import NodeNotFoundError, WorkflowDataError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .model import AppMode, UploadFile
|
||||
|
||||
|
||||
from constants import DEFAULT_FILE_NUMBER_LIMITS, HIDDEN_VALUE
|
||||
from core.helper import encrypter
|
||||
from core.variables import SecretVariable, Segment, SegmentType, Variable
|
||||
@ -345,6 +345,9 @@ class Workflow(Base): # bug
|
||||
def features_dict(self) -> dict[str, Any]:
|
||||
return json.loads(self.features) if self.features else {}
|
||||
|
||||
def get_feature(self, key: WorkflowFeatures) -> WorkflowFeature:
|
||||
return WorkflowFeature.from_dict(self.features_dict.get(key.value))
|
||||
|
||||
def walk_nodes(
|
||||
self, specific_node_type: NodeType | None = None
|
||||
) -> Generator[tuple[str, Mapping[str, Any]], None, None]:
|
||||
|
||||
26
api/models/workflow_features.py
Normal file
26
api/models/workflow_features.py
Normal file
@ -0,0 +1,26 @@
|
||||
from collections.abc import Mapping
|
||||
from dataclasses import dataclass
|
||||
from enum import StrEnum
|
||||
from typing import Any
|
||||
|
||||
|
||||
class WorkflowFeatures(StrEnum):
|
||||
SANDBOX = "sandbox"
|
||||
SPEECH_TO_TEXT = "speech_to_text"
|
||||
TEXT_TO_SPEECH = "text_to_speech"
|
||||
RETRIEVER_RESOURCE = "retriever_resource"
|
||||
SENSITIVE_WORD_AVOIDANCE = "sensitive_word_avoidance"
|
||||
FILE_UPLOAD = "file_upload"
|
||||
SUGGESTED_QUESTIONS_AFTER_ANSWER = "suggested_questions_after_answer"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class WorkflowFeature:
|
||||
enabled: bool
|
||||
config: Mapping[str, Any]
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Mapping[str, Any] | None) -> "WorkflowFeature":
|
||||
if data is None or not isinstance(data, dict):
|
||||
return cls(enabled=False, config={})
|
||||
return cls(enabled=bool(data.get("enabled", False)), config=data)
|
||||
Reference in New Issue
Block a user