ForcePilot/backend/package/yuxi/agents/backends/sandbox/sandbox_config.py

76 lines
2.0 KiB
Python

"""沙盒配置常量
定义沙盒系统的配置项,包括镜像、路径、超时等。
"""
from __future__ import annotations
import os
# 沙盒容器配置
DEFAULT_SANDBOX_IMAGE = "python:3.12-slim"
DEFAULT_SANDBOX_PORT = 8080
DEFAULT_CONTAINER_PREFIX = "yuxi-sandbox"
# 空闲超时配置(秒)
DEFAULT_IDLE_TIMEOUT = 600 # 10 分钟
IDLE_CHECK_INTERVAL = 60 # 1 分钟检查一次
# 最大并发沙盒数
DEFAULT_MAX_REPLICAS = 3
# 虚拟路径前缀(容器内)
VIRTUAL_PATH_PREFIX = "/mnt"
# 容器内用户数据路径
USER_DATA_PATH = f"{VIRTUAL_PATH_PREFIX}/user-data"
SKILLS_PATH = f"{VIRTUAL_PATH_PREFIX}/skills"
# 子目录
WORKSPACE_DIR = "workspace"
OUTPUTS_DIR = "outputs"
UPLOADS_DIR = "uploads"
LARGE_TOOL_RESULTS_DIR = "large_tool_results"
THREADS_DIR = "threads"
def get_sandbox_image() -> str:
"""获取沙盒镜像,默认使用配置值或环境变量"""
return os.getenv("YUXI_SANDBOX_IMAGE", DEFAULT_SANDBOX_IMAGE)
def get_sandbox_base_port() -> int:
"""获取沙盒基础端口"""
return int(os.getenv("YUXI_SANDBOX_BASE_PORT", str(DEFAULT_SANDBOX_PORT)))
def get_container_prefix() -> str:
"""获取容器名前缀"""
return os.getenv("YUXI_SANDBOX_CONTAINER_PREFIX", DEFAULT_CONTAINER_PREFIX)
def get_idle_timeout() -> int:
"""获取空闲超时时间(秒)"""
return int(os.getenv("YUXI_SANDBOX_IDLE_TIMEOUT", str(DEFAULT_IDLE_TIMEOUT)))
def get_max_replicas() -> int:
"""获取最大并发沙盒数"""
return int(os.getenv("YUXI_SANDBOX_MAX_REPLICAS", str(DEFAULT_MAX_REPLICAS)))
def get_sandbox_host() -> str:
"""获取沙盒主机地址(宿主机侧访问容器)"""
return os.getenv("YUXI_SANDBOX_HOST", "localhost")
def get_sandbox_provisioner_url() -> str:
return os.getenv("YUXI_SANDBOX_PROVISIONER_URL", "").strip()
def get_sandbox_security_opts() -> list[str]:
value = os.getenv("YUXI_SANDBOX_SECURITY_OPTS", "seccomp=unconfined").strip()
if not value:
return []
return [item.strip() for item in value.split(",") if item.strip()]