SDK: small fixes and improvements (#4174)

This commit is contained in:
Stanislav Novosad
2025-12-02 17:34:41 -07:00
committed by GitHub
parent dfbd0a36cf
commit d310c5e39c
2 changed files with 17 additions and 6 deletions

View File

@@ -234,7 +234,7 @@ class Skyvern(AsyncSkyvern):
browser_session_id: str | None = None,
user_agent: str | None = None,
extra_http_headers: dict[str, str] | None = None,
publish_workflow: bool | None = None,
publish_workflow: bool = False,
include_action_history_in_verification: bool | None = None,
max_screenshot_scrolls: int | None = None,
browser_address: str | None = None,
@@ -383,7 +383,13 @@ class Skyvern(AsyncSkyvern):
await asyncio.sleep(DEFAULT_AGENT_HEARTBEAT_INTERVAL)
return WorkflowRunResponse.model_validate(workflow_run.model_dump())
async def launch_local_browser(self, *, headless: bool = False, port: int = DEFAULT_CDP_PORT) -> SkyvernBrowser:
async def launch_local_browser(
self,
*,
headless: bool = False,
port: int = DEFAULT_CDP_PORT,
args: list[str] | None = None,
) -> SkyvernBrowser:
"""Launch a new local Chromium browser with Chrome DevTools Protocol (CDP) enabled.
This method launches a browser on your local machine with remote debugging enabled,
@@ -392,15 +398,17 @@ class Skyvern(AsyncSkyvern):
Args:
headless: Whether to run the browser in headless mode. Defaults to False.
port: The port number for the CDP endpoint. Defaults to DEFAULT_CDP_PORT.
args: Additional command-line arguments to pass to Chromium. Defaults to None.
Example: ["--disable-blink-features=AutomationControlled", "--window-size=1920,1080"]
Returns:
SkyvernBrowser: A browser instance with Skyvern capabilities.
"""
playwright = await self._get_playwright()
browser = await playwright.chromium.launch(
headless=headless,
args=[f"--remote-debugging-port={port}"],
)
launch_args = [f"--remote-debugging-port={port}"]
if args:
launch_args.extend(args)
browser = await playwright.chromium.launch(headless=headless, args=launch_args)
browser_address = f"http://localhost:{port}"
browser_context = browser.contexts[0] if browser.contexts else await browser.new_context()
return SkyvernBrowser(self, browser_context, browser_address=browser_address)

View File

@@ -91,6 +91,7 @@ class SkyvernPageRun:
LOG.info("AI task is running, this may take a while", run_id=task_run.run_id)
task_run = await self._wait_for_run_completion(task_run.run_id, timeout)
LOG.info("AI task finished", run_id=task_run.run_id, status=task_run.status)
return TaskRunResponse.model_validate(task_run.model_dump())
async def login(
@@ -153,6 +154,7 @@ class SkyvernPageRun:
LOG.info("AI login workflow is running, this may take a while", run_id=workflow_run.run_id)
workflow_run = await self._wait_for_run_completion(workflow_run.run_id, timeout)
LOG.info("AI login workflow finished", run_id=workflow_run.run_id, status=workflow_run.status)
return WorkflowRunResponse.model_validate(workflow_run.model_dump())
async def workflow(
@@ -199,6 +201,7 @@ class SkyvernPageRun:
LOG.info("AI workflow is running, this may take a while", run_id=workflow_run.run_id)
workflow_run = await self._wait_for_run_completion(workflow_run.run_id, timeout)
LOG.info("AI workflow finished", run_id=workflow_run.run_id, status=workflow_run.status)
return WorkflowRunResponse.model_validate(workflow_run.model_dump())
async def _wait_for_run_completion(self, run_id: str, timeout: float) -> GetRunResponse: