Source code for agentscope_runtime.sandbox.enums
# -*- coding: utf-8 -*-
from enum import Enum, EnumMeta
[docs]
class DynamicEnum(Enum, metaclass=DynamicEnumMeta):
[docs]
def __init__(self, value): # pylint: disable=unused-argument
self.builtin = True
[docs]
@classmethod
def add_member(cls, name: str, value=None):
if name in cls.__members__:
raise ValueError(f"Member '{name}' already exists.")
if value is None:
value = name.lower()
# Add new member
new_member = cls._create_pseudo_member(name, value)
new_member.builtin = False
cls._member_map_[name] = new_member
cls._value2member_map_[value] = new_member
# Update ordered members
cls._member_names_.append(name)
@classmethod
def _create_pseudo_member(cls, name, value):
temp = object.__new__(cls)
temp._value_ = value
temp._name_ = name
temp.__objclass__ = cls
return temp
[docs]
@classmethod
def get_builtin_members(cls):
return [member for member in cls if getattr(member, "builtin", False)]
[docs]
@classmethod
def get_dynamic_members(cls):
return [
member for member in cls if not getattr(member, "builtin", False)
]
[docs]
def is_builtin(self):
return getattr(self, "builtin", False)
[docs]
class SandboxType(DynamicEnum):
"""Sandbox type enumeration"""
DUMMY = "dummy"
BASE = "base"
BROWSER = "browser"
FILESYSTEM = "filesystem"
GUI = "gui"
MOBILE = "mobile"
APPWORLD = "appworld"
BFCL = "bfcl"
AGENTBAY = "agentbay"