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( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> 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( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.base.SandboxHandle
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._create_with_retries( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.base.SandboxHandle
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._effective_command( command: str, user: str | int | None ) -> str
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._exec( handle: nemo_gym.sandbox.providers.base.SandboxHandle, 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.base.SandboxExecResult
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._to_create_params( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> typing.Any | None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._verify_created_handle( handle: nemo_gym.sandbox.providers.base.SandboxHandle ) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider._with_generated_sandbox_id( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.base.SandboxSpec
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.aclose() -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.close( handle: nemo_gym.sandbox.providers.base.SandboxHandle, delete: bool = True ) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.connect( sandbox_id: str ) -> nemo_gym.sandbox.providers.base.SandboxHandle
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.create( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.base.SandboxHandle
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.create_batch( spec: nemo_gym.sandbox.providers.base.SandboxSpec, count: int, allow_partial: bool = False ) -> list[nemo_gym.sandbox.providers.base.SandboxHandle]
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.download_file( handle: nemo_gym.sandbox.providers.base.SandboxHandle, source_path: str, target_path: pathlib.Path ) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.exec( handle: nemo_gym.sandbox.providers.base.SandboxHandle, 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.base.SandboxExecResult
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.read_file( handle: nemo_gym.sandbox.providers.base.SandboxHandle, source_path: str ) -> bytes
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.status( handle: nemo_gym.sandbox.providers.base.SandboxHandle ) -> nemo_gym.sandbox.providers.base.SandboxStatus
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.upload_file( handle: nemo_gym.sandbox.providers.base.SandboxHandle, source_path: pathlib.Path, target_path: str ) -> None
nemo_gym.sandbox.providers.daytona.provider.DaytonaProvider.write_file( handle: nemo_gym.sandbox.providers.base.SandboxHandle, 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.
nemo_gym.sandbox.providers.daytona.provider.DaytonaProviderOptions.from_mapping( options: collections.abc.Mapping[str, typing.Any] | None ) -> nemo_gym.sandbox.providers.daytona.provider.DaytonaProviderOptions
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( spec: nemo_gym.sandbox.providers.base.SandboxSpec, 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.base.SandboxExecResult
nemo_gym.sandbox.providers.daytona.provider._exception_status_code( exception: BaseException ) -> int | None
nemo_gym.sandbox.providers.daytona.provider._extension_value( spec: nemo_gym.sandbox.providers.base.SandboxSpec, 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( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.base.SandboxSpec
nemo_gym.sandbox.providers.daytona.provider._provider_options( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> nemo_gym.sandbox.providers.daytona.provider.DaytonaProviderOptions
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( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> dict[str, str]
nemo_gym.sandbox.providers.daytona.provider._spec_snapshot_id( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> str | None
nemo_gym.sandbox.providers.daytona.provider._spec_volumes( spec: nemo_gym.sandbox.providers.base.SandboxSpec ) -> 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.base.SandboxStatus
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)