diff --git a/packages/narada-pyodide/pyproject.toml b/packages/narada-pyodide/pyproject.toml index 47dd6f1..62f8333 100644 --- a/packages/narada-pyodide/pyproject.toml +++ b/packages/narada-pyodide/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "narada-pyodide" -version = "0.0.53" +version = "0.0.54" description = "Pyodide-compatible Python client SDK for Narada" license = "Apache-2.0" readme = "README.md" diff --git a/packages/narada-pyodide/src/narada/client.py b/packages/narada-pyodide/src/narada/client.py index abe5478..fb7576a 100644 --- a/packages/narada-pyodide/src/narada/client.py +++ b/packages/narada-pyodide/src/narada/client.py @@ -1,5 +1,6 @@ from __future__ import annotations +import asyncio import json import logging import os @@ -90,7 +91,9 @@ async def open_and_initialize_cloud_browser_window( } response = None - for _ in range(3): + max_attempts = 3 + retry_backoff_seconds = (2.0, 4.0, 0.0) # no wait after last attempt + for attempt in range(max_attempts): # Due to unknown network issues, sometimes create-and-initialize-cloud-browser-session API call fails. try: response = await pyfetch( @@ -102,6 +105,7 @@ async def open_and_initialize_cloud_browser_window( if response.ok: break except Exception: + await asyncio.sleep(retry_backoff_seconds[attempt]) continue if response is None or not response.ok: @@ -110,7 +114,7 @@ async def open_and_initialize_cloud_browser_window( await response.text() if response is not None else "unknown error" ) raise RuntimeError( - "Failed to create and initialize cloud browser session after 3 attempts: " + "Failed to create and initialize cloud browser session after 3 attempts with backoff: " f"{resp_status}: {resp_text}\n" f"Endpoint URL: {endpoint_url}" ) diff --git a/uv.lock b/uv.lock index d298bf4..2f2b9a2 100644 --- a/uv.lock +++ b/uv.lock @@ -356,7 +356,7 @@ requires-dist = [{ name = "pydantic", specifier = "==2.12.5" }] [[package]] name = "narada-pyodide" -version = "0.0.53" +version = "0.0.54" source = { editable = "packages/narada-pyodide" } dependencies = [ { name = "narada-core" },