Files
deer-flow/backend/src/sandbox/sandbox_provider.py

54 lines
1.4 KiB
Python
Raw Normal View History

2026-01-14 07:19:34 +08:00
from abc import ABC, abstractmethod
from src.config import get_app_config
from src.reflection import resolve_class
from src.sandbox.sandbox import Sandbox
class SandboxProvider(ABC):
"""Abstract base class for sandbox providers"""
@abstractmethod
2026-01-15 13:22:30 +08:00
def acquire(self, thread_id: str | None = None) -> str:
2026-01-14 12:32:34 +08:00
"""Acquire a sandbox environment and return its ID.
2026-01-14 07:19:34 +08:00
Returns:
The ID of the acquired sandbox environment.
"""
pass
@abstractmethod
2026-01-14 12:32:34 +08:00
def get(self, sandbox_id: str) -> Sandbox | None:
2026-01-14 07:19:34 +08:00
"""Get a sandbox environment by ID.
Args:
sandbox_id: The ID of the sandbox environment to retain.
"""
pass
@abstractmethod
def release(self, sandbox_id: str) -> None:
"""Release a sandbox environment.
Args:
sandbox_id: The ID of the sandbox environment to destroy.
"""
pass
_default_sandbox_provider: SandboxProvider | None = None
2026-01-15 13:22:30 +08:00
def get_sandbox_provider(**kwargs) -> SandboxProvider:
2026-01-14 07:19:34 +08:00
"""Get the sandbox provider.
Returns:
A sandbox provider.
"""
global _default_sandbox_provider
if _default_sandbox_provider is None:
config = get_app_config()
cls = resolve_class(config.sandbox.use, SandboxProvider)
2026-01-15 13:22:30 +08:00
_default_sandbox_provider = cls(**kwargs)
2026-01-14 07:19:34 +08:00
return _default_sandbox_provider