refactor(browser/browserbase): table-drive the 402 paid-feature fallbacks in create_session

This commit is contained in:
Teknium
2026-09-02 23:55:45 -07:00
parent c14cf9b7e0
commit 7f890ee265

View File

@@ -18,6 +18,13 @@ from plugins.browser._common import CloudBrowserProvider
logger = logging.getLogger(__name__)
# 402 fallbacks, in retry order: (session_config key, warning logged when dropped).
_PAID_FEATURE_FALLBACKS = (
("keepAlive", "keepAlive may require paid plan (402), retrying without it. "
"Sessions may timeout during long operations."),
("proxies", "Proxies unavailable (402), retrying without proxies. Bot detection may be less effective."),
)
class BrowserbaseBrowserProvider(CloudBrowserProvider):
"""Browserbase (https://browserbase.com) cloud browser backend."""
@@ -83,30 +90,22 @@ class BrowserbaseBrowserProvider(CloudBrowserProvider):
response = self._post_create(url, headers, session_config)
# 402 — paid features unavailable: drop keepAlive, then proxies, and retry.
proxies_fallback = keepalive_fallback = False
if response.status_code == 402 and enable_keep_alive:
keepalive_fallback = True
logger.warning(
"keepAlive may require paid plan (402), retrying without it. "
"Sessions may timeout during long operations.")
session_config.pop("keepAlive", None)
response = self._post_create(url, headers, session_config)
if response.status_code == 402 and enable_proxies:
proxies_fallback = True
logger.warning(
"Proxies unavailable (402), retrying without proxies. Bot detection may be less effective."
)
session_config.pop("proxies", None)
response = self._post_create(url, headers, session_config)
dropped = set()
for key, warning in _PAID_FEATURE_FALLBACKS:
if response.status_code == 402 and key in session_config:
dropped.add(key)
logger.warning(warning)
session_config.pop(key)
response = self._post_create(url, headers, session_config)
self._check_created(response)
session_data = response.json()
session_name = self._session_name(task_id)
features_enabled = {
"basic_stealth": True,
"proxies": enable_proxies and not proxies_fallback,
"proxies": enable_proxies and "proxies" not in dropped,
"advanced_stealth": enable_advanced_stealth,
"keep_alive": enable_keep_alive and not keepalive_fallback,
"keep_alive": enable_keep_alive and "keepAlive" not in dropped,
"custom_timeout": bool(custom_timeout_ms) and "timeout" in session_config,
}
feature_str = ", ".join(k for k, v in features_enabled.items() if v)