diff --git a/examples/critic.py b/examples/critic.py index 145d444..9f80c70 100644 --- a/examples/critic.py +++ b/examples/critic.py @@ -1,6 +1,6 @@ import asyncio -from narada import Narada, CriticConfig +from narada import CriticConfig, Narada from pydantic import BaseModel, Field diff --git a/packages/narada-core/src/narada_core/actions/critic.py b/packages/narada-core/src/narada_core/actions/critic.py index a8a3f23..04f5850 100644 --- a/packages/narada-core/src/narada_core/actions/critic.py +++ b/packages/narada-core/src/narada_core/actions/critic.py @@ -2,10 +2,10 @@ from typing import Any, Awaitable, Callable -from narada_core.models import Agent, CriticConfig from pydantic import BaseModel, create_model from narada_core.actions.models import AgentUsage, CriticResult +from narada_core.models import Agent, CriticConfig from narada_core.tracing.model import parse_action_trace _VALIDATION_VAR = "narada_validation_passed" diff --git a/packages/narada-pyodide/pyproject.toml b/packages/narada-pyodide/pyproject.toml index 15bcbdd..66e29bf 100644 --- a/packages/narada-pyodide/pyproject.toml +++ b/packages/narada-pyodide/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "narada-pyodide" -version = "0.0.48" +version = "0.0.49" description = "Pyodide-compatible Python client SDK for Narada" license = "Apache-2.0" readme = "README.md" diff --git a/packages/narada-pyodide/src/narada/__init__.py b/packages/narada-pyodide/src/narada/__init__.py index ce52c7c..1c5c77b 100644 --- a/packages/narada-pyodide/src/narada/__init__.py +++ b/packages/narada-pyodide/src/narada/__init__.py @@ -1,8 +1,8 @@ +from narada_core.actions.models import CriticResult from narada_core.errors import ( NaradaError, NaradaTimeoutError, ) -from narada_core.actions.models import CriticResult from narada_core.models import ( Agent, CriticConfig, diff --git a/packages/narada-pyodide/src/narada/client.py b/packages/narada-pyodide/src/narada/client.py index f5760db..abe5478 100644 --- a/packages/narada-pyodide/src/narada/client.py +++ b/packages/narada-pyodide/src/narada/client.py @@ -89,20 +89,33 @@ async def open_and_initialize_cloud_browser_window( "require_extension": require_extension, } - resp = await pyfetch( - endpoint_url, - method="POST", - headers=headers, - body=json.dumps(request_body), - ) - if not resp.ok: + response = None + for _ in range(3): + # Due to unknown network issues, sometimes create-and-initialize-cloud-browser-session API call fails. + try: + response = await pyfetch( + endpoint_url, + method="POST", + headers=headers, + body=json.dumps(request_body), + ) + if response.ok: + break + except Exception: + continue + + if response is None or not response.ok: + resp_status = response.status if response is not None else "unknown status" + resp_text = ( + await response.text() if response is not None else "unknown error" + ) raise RuntimeError( - "Failed to create and initialize cloud browser session: " - f"{resp.status} {await resp.text()}\n" + "Failed to create and initialize cloud browser session after 3 attempts: " + f"{resp_status}: {resp_text}\n" f"Endpoint URL: {endpoint_url}" ) - response_data = await resp.json() + response_data = await response.json() return CloudBrowserWindow( browser_window_id=response_data["browser_window_id"], session_id=response_data["session_id"], diff --git a/packages/narada/src/narada/__init__.py b/packages/narada/src/narada/__init__.py index 756eccf..719f28d 100644 --- a/packages/narada/src/narada/__init__.py +++ b/packages/narada/src/narada/__init__.py @@ -1,3 +1,4 @@ +from narada_core.actions.models import CriticResult from narada_core.errors import ( NaradaError, NaradaExtensionMissingError, @@ -7,7 +8,6 @@ NaradaUnsupportedBrowserError, UserAbortedError, ) -from narada_core.actions.models import CriticResult from narada_core.models import ( Agent, CriticConfig, diff --git a/uv.lock b/uv.lock index 2c454fd..e0d412f 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.48" +version = "0.0.49" source = { editable = "packages/narada-pyodide" } dependencies = [ { name = "narada-core" },