diff --git a/koyeb/sandbox/sandbox.py b/koyeb/sandbox/sandbox.py index 6fbfa1d0..a752230e 100644 --- a/koyeb/sandbox/sandbox.py +++ b/koyeb/sandbox/sandbox.py @@ -15,7 +15,7 @@ from koyeb.api.api.deployments_api import DeploymentsApi from koyeb.api.exceptions import ApiException, NotFoundException -from koyeb.api.models.create_app import CreateApp, AppLifeCycle +from koyeb.api.models.create_app import AppLifeCycle, CreateApp from koyeb.api.models.create_service import CreateService, ServiceLifeCycle from koyeb.api.models.update_service import UpdateService @@ -115,6 +115,7 @@ def create( privileged: bool = False, registry_secret: Optional[str] = None, _experimental_enable_light_sleep: bool = False, + _experimental_deep_sleep_value: int = 3900, delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, @@ -189,6 +190,7 @@ def create( privileged=privileged, registry_secret=registry_secret, _experimental_enable_light_sleep=_experimental_enable_light_sleep, + _experimental_deep_sleep_value=_experimental_deep_sleep_value, delete_after_delay=delete_after_delay, delete_after_inactivity_delay=delete_after_inactivity_delay, app_id=app_id, @@ -221,6 +223,7 @@ def _create_sync( privileged: bool = False, registry_secret: Optional[str] = None, _experimental_enable_light_sleep: bool = False, + _experimental_deep_sleep_value: int = 3900, delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, @@ -269,6 +272,7 @@ def _create_sync( idle_timeout=idle_timeout, enable_tcp_proxy=enable_tcp_proxy, _experimental_enable_light_sleep=_experimental_enable_light_sleep, + _experimental_deep_sleep_value=_experimental_deep_sleep_value, ) service_life_cycle = ServiceLifeCycle( @@ -952,6 +956,7 @@ async def create( privileged: bool = False, registry_secret: Optional[str] = None, _experimental_enable_light_sleep: bool = False, + _experimental_deep_sleep_value: int = 3900, delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, @@ -972,7 +977,7 @@ async def create( api_token: Koyeb API token (if None, will try to get from KOYEB_API_TOKEN env var) timeout: Timeout for sandbox creation in seconds idle_timeout: Sleep timeout in seconds. Behavior depends on _experimental_enable_light_sleep: - - If _experimental_enable_light_sleep is True: sets light_sleep value (deep_sleep=3900) + - If _experimental_enable_light_sleep is True: sets light_sleep value (deep_sleep uses _experimental_deep_sleep_value) - If _experimental_enable_light_sleep is False: sets deep_sleep value - If 0: disables scale-to-zero (keep always-on) - If None: uses default values @@ -980,8 +985,10 @@ async def create( privileged: If True, run the container in privileged mode (default: False) registry_secret: Name of a Koyeb secret containing registry credentials for pulling private images. Create the secret via Koyeb dashboard or CLI first. - _experimental_enable_light_sleep: If True, uses idle_timeout for light_sleep and sets - deep_sleep=3900. If False, uses idle_timeout for deep_sleep (default: False) + _experimental_enable_light_sleep: If True, uses idle_timeout for light_sleep and configurable + deep_sleep (default: False) + _experimental_deep_sleep_value: Number of seconds for deep sleep when light sleep is enabled (default: 3900). + Only used if _experimental_enable_light_sleep is True delete_after_delay: If >0, automatically delete the sandbox if there was no activity after this many seconds since creation. delete_after_inactivity_delay: If >0, automatically delete the sandbox if service sleeps due to inactivity @@ -1019,6 +1026,7 @@ async def create( privileged=privileged, registry_secret=registry_secret, _experimental_enable_light_sleep=_experimental_enable_light_sleep, + _experimental_deep_sleep_value=_experimental_deep_sleep_value, delete_after_delay=delete_after_delay, delete_after_inactivity_delay=delete_after_inactivity_delay, app_id=app_id, diff --git a/koyeb/sandbox/utils.py b/koyeb/sandbox/utils.py index 2f86cc7a..71c64207 100644 --- a/koyeb/sandbox/utils.py +++ b/koyeb/sandbox/utils.py @@ -14,9 +14,9 @@ from koyeb.api.api import ( AppsApi, CatalogInstancesApi, + DeploymentsApi, InstancesApi, ServicesApi, - DeploymentsApi, ) from koyeb.api.models.deployment_definition import DeploymentDefinition from koyeb.api.models.deployment_definition_type import DeploymentDefinitionType @@ -241,6 +241,7 @@ def create_deployment_definition( idle_timeout: int = 300, enable_tcp_proxy: bool = False, _experimental_enable_light_sleep: bool = False, + _experimental_deep_sleep_value: int = 3900, ) -> DeploymentDefinition: """ Create deployment definition for a sandbox service. @@ -258,7 +259,9 @@ def create_deployment_definition( idle_timeout: Number of seconds to wait before sleeping the instance if it receives no traffic enable_tcp_proxy: If True, enables TCP proxy for direct TCP access to port 3031 _experimental_enable_light_sleep: If True, uses light sleep when reaching idle_timeout. - Light Sleep reduces cold starts to ~200ms. After scaling to zero, the service stays in Light Sleep for 3600s before going into Deep Sleep. + Light Sleep reduces cold starts to ~200ms. After scaling to zero, the service stays in Light Sleep for idle_timeout seconds before going into Deep Sleep. + _experimental_deep_sleep_value: Number of seconds for deep sleep when light sleep is enabled (default: 3900). + Only used if _experimental_enable_light_sleep is True. Ignored otherwise. Returns: DeploymentDefinition object @@ -287,10 +290,10 @@ def create_deployment_definition( if idle_timeout == 0: sleep_idle_delay = None elif _experimental_enable_light_sleep: - # Experimental mode: idle_timeout sets light_sleep value, deep_sleep is always 3900 + # Experimental mode: idle_timeout sets light_sleep value, deep_sleep uses _experimental_deep_sleep_value sleep_idle_delay = DeploymentScalingTargetSleepIdleDelay( light_sleep_value=idle_timeout, - deep_sleep_value=3900, + deep_sleep_value=_experimental_deep_sleep_value, ) else: # Normal mode: only use deep_sleep diff --git a/pyproject.toml b/pyproject.toml index 7855d95b..24b6790a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "koyeb-sdk" -version = "1.3.3" +version = "1.2.3" description = "Koyeb python sdk" authors = [{ name = "Koyeb team", email = "support@koyeb.com" }] license = "Apache-2.0" @@ -41,11 +41,11 @@ build-backend = "setuptools.build_meta" [dependency-groups] dev = [ - "autopep8>=2.3.2", - "flake8>=7.3.0", - "pydoc-markdown>=4.8.2", - "pytest>=8.4.2", - "tqdm>=4.67.1", + "autopep8>=2.3.2", + "flake8>=7.3.0", + "pydoc-markdown>=4.8.2", + "pytest>=8.4.2", + "tqdm>=4.67.1", ] [tool.pylint.'MESSAGES CONTROL'] diff --git a/uv.lock b/uv.lock index 1d0b82bc..27e14eb5 100644 --- a/uv.lock +++ b/uv.lock @@ -376,7 +376,7 @@ wheels = [ [[package]] name = "koyeb-sdk" -version = "1.2.2" +version = "1.2.3" source = { editable = "." } dependencies = [ { name = "pydantic" },