nemo_gym.sandbox.providers.daytona.provider
nemo_gym.sandbox.providers.daytona.provider
Daytona provider implementation.
Module Contents
Classes
| Name | Description |
|---|---|
DaytonaBatchConfig | Client-side batch fanout settings. |
DaytonaConfigBase | Shared dataclass construction for Daytona provider config blocks. |
DaytonaConnectionConfig | Daytona API client connection settings. |
DaytonaCreateConfig | Daytona sandbox creation settings. |
DaytonaCreateError | Raised when Daytona cannot create a sandbox. |
DaytonaCreateTimeoutError | Raised when Daytona sandbox creation exceeds the client timeout. |
DaytonaCreateVerificationError | Raised when a newly-created Daytona sandbox cannot execute a probe command. |
DaytonaOperationConfig | Retry and timeout settings for Daytona operations after create. |
DaytonaProbeConfig | Post-create probe settings. |
DaytonaProvider | Provider backed by the Daytona Python SDK. |
DaytonaProviderOptions | Recognized per-sandbox create options read from SandboxSpec.provider_options. |
Functions
Data
API
class nemo_gym.sandbox.providers.daytona.provider.DaytonaBatchConfig(concurrency: int = 4)
Bases: DaytonaConfigBase
Client-side batch fanout settings.
nemo_gym.sandbox.providers.daytona.provider.DaytonaBatchConfig.__post_init__() -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaConfigBase()
Shared dataclass construction for Daytona provider config blocks.
nemo_gym.sandbox.providers.daytona.provider.DaytonaConfigBase.from_mapping(value: typing.Any) -> typing.Any
class nemo_gym.sandbox.providers.daytona.provider.DaytonaConnectionConfig(api_key: str | None = None,jwt_token: str | None = None,organization_id: str | None = None,api_url: str | None = None,server_url: str | None = None,target: str | None = None,connection_pool_maxsize: int | None = None,otel_enabled: bool | None = None)
Bases: DaytonaConfigBase
Daytona API client connection settings.
nemo_gym.sandbox.providers.daytona.provider.DaytonaConnectionConfig.__post_init__() -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateConfig(timeout_s: float = 60.0,retries: int = 2,retry_delay_s: float = 1.0,retry_max_delay_s: float = 30.0,language: str | None = None,os_user: str | None = None,public: bool | None = None,auto_stop_interval: int | None = None,auto_archive_interval: int | None = None,auto_delete_interval: int | None = None,ephemeral: bool | None = None,network_block_all: bool | None = None,network_allow_list: str | None = None)
Bases: DaytonaConfigBase
Daytona sandbox creation settings.
nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateConfig.__post_init__() -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateError()
Bases: SandboxCreateError
Raised when Daytona cannot create a sandbox.
class nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateTimeoutError()
Bases: DaytonaCreateError
Raised when Daytona sandbox creation exceeds the client timeout.
class nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateVerificationError()
Bases: SandboxCreateVerificationError
Raised when a newly-created Daytona sandbox cannot execute a probe command.
class nemo_gym.sandbox.providers.daytona.provider.DaytonaOperationConfig(retries: int = 3,retry_delay_s: float = 1.0,retry_max_delay_s: float = 15.0,command_retries: int = 0,command_timeout_margin_s: float = 60.0,file_timeout_s: int | None = 30 * 60,close_timeout_s: float | None = 60.0)
Bases: DaytonaConfigBase
Retry and timeout settings for Daytona operations after create.
nemo_gym.sandbox.providers.daytona.provider.DaytonaOperationConfig.__post_init__() -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaProbeConfig(command: str | None = 'printf nemo-rl-sandbox-ready',expected_stdout: str | None = 'nemo-rl-sandbox-ready',timeout_s: int = 30,deadline_s: float | None = None)
Bases: DaytonaConfigBase
Post-create probe settings.
nemo_gym.sandbox.providers.daytona.provider.DaytonaProbeConfig.__post_init__() -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider(connection: nemo_gym.sandbox.providers.daytona.provider.DaytonaConnectionConfig | collections.abc.Mapping[str, typing.Any] | None = None,create: nemo_gym.sandbox.providers.daytona.provider.DaytonaCreateConfig | collections.abc.Mapping[str, typing.Any] | None = None,probe: nemo_gym.sandbox.providers.daytona.provider.DaytonaProbeConfig | collections.abc.Mapping[str, typing.Any] | None = None,operations: nemo_gym.sandbox.providers.daytona.provider.DaytonaOperationConfig | collections.abc.Mapping[str, typing.Any] | None = None,batch: nemo_gym.sandbox.providers.daytona.provider.DaytonaBatchConfig | collections.abc.Mapping[str, typing.Any] | None = None)
Provider backed by the Daytona Python SDK.
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._await_operation(operation_factory: typing.Callable[[], typing.Awaitable[typing.Any]],operation: str,sandbox_id: str,timeout_s: float | None,retries: int | None = None) -> typing.Any
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._base_create_kwargs() -> dict[str, typing.Any]
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._client() -> typing.Any
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._command_retry_count() -> int
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._create_once(
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._create_with_retries(
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._effective_command(command: str,user: str | int | None) -> str
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._exec(command: str,cwd: str | None = None,env: dict[str, str] | None = None,timeout_s: int | None = None,user: str | int | None = None,retries: int | None = None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._to_create_params() -> typing.Any | None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._verify_created_handle() -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._with_generated_sandbox_id(
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.aclose() -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.close(delete: bool = True) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.connect(sandbox_id: str
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.create(
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.create_batch(count: int,allow_partial: bool = False
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.download_file(source_path: str,target_path: pathlib.Path) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.exec(command: str,cwd: str | None = None,env: dict[str, str] | None = None,timeout_s: int | None = None,user: str | int | None = None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.read_file(source_path: str) -> bytes
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.status(
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.upload_file(source_path: pathlib.Path,target_path: str) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.write_file(target_path: str,data: str | bytes) -> None
class nemo_gym.sandbox.providers.daytona.provider.DaytonaProviderOptions(extensions: collections.abc.Mapping[str, str] = dict(),snapshot_id: str | None = None,volumes: tuple[collections.abc.Mapping[str, typing.Any], ...] = ())
Recognized per-sandbox create options read from SandboxSpec.provider_options.
options: collections.abc.Mapping[str, typing.Any] | None
nemo_gym.sandbox.providers.daytona.provider._coerce_bool(name: str,value: typing.Any) -> bool
nemo_gym.sandbox.providers.daytona.provider._coerce_int(name: str,value: typing.Any) -> int
nemo_gym.sandbox.providers.daytona.provider._configured_or_extension(key: str,configured: typing.Any) -> typing.Any
nemo_gym.sandbox.providers.daytona.provider._daytona_error_types() -> dict[str, type[BaseException]]
nemo_gym.sandbox.providers.daytona.provider._daytona_exec_error_message(exception: BaseException) -> str
nemo_gym.sandbox.providers.daytona.provider._daytona_exec_error_result(exception: BaseException
nemo_gym.sandbox.providers.daytona.provider._exception_status_code(exception: BaseException) -> int | None
nemo_gym.sandbox.providers.daytona.provider._extension_value(key: str) -> str | None
nemo_gym.sandbox.providers.daytona.provider._has_retryable_error_marker(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._is_daytona_command_exec_error(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._is_empty_daytona_command_exec_error(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._is_missing_sandbox_delete_error(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._is_retryable_create_error(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._is_retryable_operation_error(exception: BaseException) -> bool
nemo_gym.sandbox.providers.daytona.provider._log_create_retry(retry_state: typing.Any) -> None
nemo_gym.sandbox.providers.daytona.provider._log_operation_retry(retry_state: typing.Any) -> None
nemo_gym.sandbox.providers.daytona.provider._mib_to_gib(name: str,value: typing.Any) -> int
nemo_gym.sandbox.providers.daytona.provider._normalize_spec(
nemo_gym.sandbox.providers.daytona.provider._provider_options(
nemo_gym.sandbox.providers.daytona.provider._quantity_to_int(name: str,value: typing.Any) -> int
nemo_gym.sandbox.providers.daytona.provider._require_daytona_sdk() -> tuple[typing.Any, typing.Any, typing.Any, typing.Any, typing.Any, typing.Any]
nemo_gym.sandbox.providers.daytona.provider._require_tenacity() -> tuple[typing.Any, typing.Any, typing.Any, typing.Any]
nemo_gym.sandbox.providers.daytona.provider._resources_requested(resources: nemo_gym.sandbox.providers.base.SandboxResources | collections.abc.Mapping[str, typing.Any]) -> bool
nemo_gym.sandbox.providers.daytona.provider._spec_extensions() -> dict[str, str]
nemo_gym.sandbox.providers.daytona.provider._spec_snapshot_id() -> str | None
nemo_gym.sandbox.providers.daytona.provider._spec_volumes() -> list[dict[str, typing.Any]] | None
nemo_gym.sandbox.providers.daytona.provider._string_map(values: dict[str, typing.Any]) -> dict[str, str]
nemo_gym.sandbox.providers.daytona.provider._supplied_config_keys(value: typing.Any,config_cls: type[typing.Any]) -> set[str]
nemo_gym.sandbox.providers.daytona.provider._to_resources(resources: nemo_gym.sandbox.providers.base.SandboxResources | collections.abc.Mapping[str, typing.Any]) -> typing.Any | None
nemo_gym.sandbox.providers.daytona.provider._to_sandbox_status(value: typing.Any
nemo_gym.sandbox.providers.daytona.provider._to_volume_mounts(volumes: list[dict[str, typing.Any]]) -> list[typing.Any]
nemo_gym.sandbox.providers.daytona.provider.DAYTONA_COMMAND_ERROR_PREFIX = 'Failed to execute command:'
nemo_gym.sandbox.providers.daytona.provider.DAYTONA_EXTENSION_PREFIX = 'daytona.'
nemo_gym.sandbox.providers.daytona.provider.LOGGER = logging.getLogger(__name__)
nemo_gym.sandbox.providers.daytona.provider.PROVIDER_OPTION_EXTENSIONS = 'extensions'
nemo_gym.sandbox.providers.daytona.provider.PROVIDER_OPTION_SNAPSHOT_ID = 'snapshot_id'
nemo_gym.sandbox.providers.daytona.provider.PROVIDER_OPTION_VOLUMES = 'volumes'
nemo_gym.sandbox.providers.daytona.provider.RETRYABLE_ERROR_MARKERS = ('connection refused', 'connection reset', 'gateway timeout', 'http 408', 'http ...
nemo_gym.sandbox.providers.daytona.provider.RETRYABLE_HTTP_STATUS_CODES = {408, 409, 425, 429, 500, 502, 503, 504}
nemo_gym.sandbox.providers.daytona.provider.SANDBOX_ID_LABEL = 'sandbox_id'
nemo_gym.sandbox.providers.daytona.provider.STATUS_CODE_RE = re.compile('(?:status code|http)\\D+(\\d{3})', re.IGNORECASE)