mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
feat(sandbox): skill initialize & draft run
This commit is contained in:
@ -523,6 +523,7 @@ class AdvancedChatAppGenerator(MessageBasedAppGenerator):
|
||||
SandboxLayer(
|
||||
tenant_id=application_generate_entity.app_config.tenant_id,
|
||||
app_id=application_generate_entity.app_config.app_id,
|
||||
workflow_version=workflow.version,
|
||||
sandbox_id=application_generate_entity.workflow_run_id,
|
||||
sandbox_storage=ArchiveSandboxStorage(
|
||||
tenant_id=application_generate_entity.app_config.tenant_id,
|
||||
|
||||
@ -497,6 +497,7 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
||||
SandboxLayer(
|
||||
tenant_id=application_generate_entity.app_config.tenant_id,
|
||||
app_id=application_generate_entity.app_config.app_id,
|
||||
workflow_version=workflow.version,
|
||||
sandbox_id=application_generate_entity.workflow_execution_id,
|
||||
sandbox_storage=ArchiveSandboxStorage(
|
||||
tenant_id=application_generate_entity.app_config.tenant_id,
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import logging
|
||||
|
||||
from core.sandbox import SandboxManager
|
||||
from core.sandbox import AppAssetsInitializer, DifyCliInitializer, SandboxManager
|
||||
from core.sandbox.storage.sandbox_storage import SandboxStorage
|
||||
from core.virtual_environment.__base.virtual_environment import VirtualEnvironment
|
||||
from core.workflow.graph_engine.layers.base import GraphEngineLayer
|
||||
from core.workflow.graph_events.base import GraphEngineEvent
|
||||
from core.workflow.graph_events.graph import GraphRunPausedEvent
|
||||
from models.workflow import Workflow
|
||||
from services.app_asset_service import AppAssetService
|
||||
from services.sandbox.sandbox_provider_service import SandboxProviderService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -15,10 +18,18 @@ class SandboxInitializationError(Exception):
|
||||
|
||||
|
||||
class SandboxLayer(GraphEngineLayer):
|
||||
def __init__(self, tenant_id: str, app_id: str, sandbox_id: str, sandbox_storage: SandboxStorage) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
tenant_id: str,
|
||||
app_id: str,
|
||||
workflow_version: str,
|
||||
sandbox_id: str,
|
||||
sandbox_storage: SandboxStorage,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self._tenant_id = tenant_id
|
||||
self._app_id = app_id
|
||||
self._workflow_version = workflow_version
|
||||
self._sandbox_id = sandbox_id
|
||||
self._sandbox_storage = sandbox_storage
|
||||
|
||||
@ -31,16 +42,34 @@ class SandboxLayer(GraphEngineLayer):
|
||||
|
||||
def on_graph_start(self) -> None:
|
||||
try:
|
||||
# Initialize sandbox
|
||||
from core.sandbox import AppAssetsInitializer, DifyCliInitializer
|
||||
from services.sandbox.sandbox_provider_service import SandboxProviderService
|
||||
is_draft = self._workflow_version == Workflow.VERSION_DRAFT
|
||||
assets = AppAssetService.get_assets(self._tenant_id, self._app_id, is_draft=is_draft)
|
||||
if not assets:
|
||||
raise ValueError(
|
||||
f"No assets found for tid={self._tenant_id}, app_id={self._app_id}, wf={self._workflow_version}"
|
||||
)
|
||||
if is_draft:
|
||||
logger.info(
|
||||
"Building draft assets for tenant_id=%s, app_id=%s, workflow_version=%s, assets_id=%s",
|
||||
self._tenant_id,
|
||||
self._app_id,
|
||||
self._workflow_version,
|
||||
assets.id,
|
||||
)
|
||||
AppAssetService.build_assets(self._tenant_id, self._app_id, assets)
|
||||
|
||||
logger.info("Initializing sandbox for tenant_id=%s, app_id=%s", self._tenant_id, self._app_id)
|
||||
logger.info(
|
||||
"Initializing sandbox for tenant_id=%s, app_id=%s, workflow_version=%s, assets_id=%s",
|
||||
self._tenant_id,
|
||||
self._app_id,
|
||||
self._workflow_version,
|
||||
assets.id,
|
||||
)
|
||||
|
||||
builder = (
|
||||
SandboxProviderService.create_sandbox_builder(self._tenant_id)
|
||||
.initializer(DifyCliInitializer())
|
||||
.initializer(AppAssetsInitializer(self._tenant_id, self._app_id))
|
||||
.initializer(AppAssetsInitializer(self._tenant_id, self._app_id, assets.id))
|
||||
.initializer(DifyCliInitializer(self._tenant_id, self._app_id, assets.id))
|
||||
)
|
||||
sandbox = builder.build()
|
||||
|
||||
@ -65,10 +94,6 @@ class SandboxLayer(GraphEngineLayer):
|
||||
return
|
||||
|
||||
def on_graph_end(self, error: Exception | None) -> None:
|
||||
if self._sandbox_id is None:
|
||||
logger.debug("No workflow_execution_id set, nothing to release")
|
||||
return
|
||||
|
||||
sandbox = SandboxManager.unregister(self._sandbox_id)
|
||||
if sandbox is None:
|
||||
logger.debug("No sandbox to release for sandbox_id=%s", self._sandbox_id)
|
||||
|
||||
Reference in New Issue
Block a user