2026-03-17 11:55:36 -07:00
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
from daytona import CreateSandboxFromSnapshotParams, Daytona, DaytonaConfig
|
|
|
|
|
from langchain_daytona import DaytonaSandbox
|
|
|
|
|
|
2026-05-02 06:51:34 +08:00
|
|
|
DEFAULT_DAYTONA_SANDBOX_SNAPSHOT = "daytonaio/sandbox:0.6.0"
|
|
|
|
|
DAYTONA_SANDBOX_SNAPSHOT_ENV = "DAYTONA_SANDBOX_SNAPSHOT"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _get_daytona_sandbox_params() -> CreateSandboxFromSnapshotParams:
|
|
|
|
|
snapshot = os.getenv(DAYTONA_SANDBOX_SNAPSHOT_ENV, DEFAULT_DAYTONA_SANDBOX_SNAPSHOT).strip()
|
|
|
|
|
if not snapshot:
|
|
|
|
|
raise ValueError(f"{DAYTONA_SANDBOX_SNAPSHOT_ENV} must not be empty")
|
|
|
|
|
return CreateSandboxFromSnapshotParams(snapshot=snapshot)
|
2026-03-17 11:55:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_daytona_sandbox(sandbox_id: str | None = None):
|
|
|
|
|
api_key = os.getenv("DAYTONA_API_KEY")
|
|
|
|
|
if not api_key:
|
|
|
|
|
raise ValueError("DAYTONA_API_KEY environment variable is required")
|
|
|
|
|
|
|
|
|
|
daytona = Daytona(config=DaytonaConfig(api_key=api_key))
|
|
|
|
|
|
|
|
|
|
if sandbox_id:
|
|
|
|
|
sandbox = daytona.get(sandbox_id)
|
|
|
|
|
else:
|
2026-05-02 06:51:34 +08:00
|
|
|
sandbox = daytona.create(params=_get_daytona_sandbox_params())
|
2026-03-17 11:55:36 -07:00
|
|
|
|
|
|
|
|
return DaytonaSandbox(sandbox=sandbox)
|