Browser Stream Refactor Fast Follow (#4070)

This commit is contained in:
Jonathan Dobson
2025-11-21 22:30:03 -05:00
committed by GitHub
parent 7c189818d9
commit c73581b414
3 changed files with 11 additions and 4 deletions

View File

@@ -16,6 +16,7 @@ import typing as t
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import structlog import structlog
from playwright.async_api import Browser, BrowserContext, Page, Playwright
from skyvern.forge.sdk.routes.streaming.channels.cdp import CdpChannel from skyvern.forge.sdk.routes.streaming.channels.cdp import CdpChannel
@@ -26,6 +27,11 @@ LOG = structlog.get_logger()
class ExecutionChannel(CdpChannel): class ExecutionChannel(CdpChannel):
# Explicitly declare inherited attributes for mypy when follow_imports = skip
browser: Browser | None
browser_context: BrowserContext | None
page: Page | None
pw: Playwright | None
""" """
ExecutionChannel. ExecutionChannel.
""" """
@@ -44,7 +50,7 @@ class ExecutionChannel(CdpChannel):
} }
""" """
selected_text = await self.evaluate_js(js_expression, self.page) selected_text = await self.evaluate_js(js_expression)
if isinstance(selected_text, str) or selected_text is None: if isinstance(selected_text, str) or selected_text is None:
LOG.info( LOG.info(

View File

@@ -121,7 +121,7 @@ class MessageChannel:
return base | {"browser_session_id": self.browser_session.persistent_browser_session_id} return base | {"browser_session_id": self.browser_session.persistent_browser_session_id}
if self.workflow_run: if self.workflow_run:
return base | {"workflow_run_id": self.workflow_run.id} return base | {"workflow_run_id": self.workflow_run.workflow_run_id}
return base return base
@@ -174,8 +174,8 @@ class MessageChannel:
datums.append(data) datums.append(data)
except asyncio.TimeoutError: except asyncio.TimeoutError:
break break
except RuntimeError: except RuntimeError as ex:
if "not connected" in str(RuntimeError).lower(): if "not connected" in str(ex).lower():
break break
except Exception: except Exception:
LOG.exception(f"{self.class_name} Failed to receive message from message channel", **self.identity) LOG.exception(f"{self.class_name} Failed to receive message from message channel", **self.identity)

View File

@@ -82,6 +82,7 @@ async def messages(
browser_session_id=browser_session_id, browser_session_id=browser_session_id,
workflow_run_id=workflow_run_id, workflow_run_id=workflow_run_id,
) )
await websocket.close(code=1002)
return return
message_channel: MessageChannel message_channel: MessageChannel