SDK: log url when running tasks (#4189)

This commit is contained in:
Stanislav Novosad
2025-12-05 15:44:12 -07:00
committed by GitHub
parent 65e3388433
commit 1e97c58d4f
2 changed files with 60 additions and 8 deletions

View File

@@ -22,6 +22,10 @@ from skyvern.schemas.runs import ProxyLocation, RunEngine, RunStatus
LOG = structlog.get_logger()
def _get_browser_session_url(browser_session_id: str) -> str:
return f"https://app.skyvern.com/browser-session/{browser_session_id}"
class Skyvern(AsyncSkyvern):
"""Main entry point for the Skyvern SDK.
@@ -213,6 +217,11 @@ class Skyvern(AsyncSkyvern):
return obj
@property
def environment(self) -> SkyvernEnvironment | None:
"""Get the current Skyvern environment (CLOUD, STAGING, LOCAL, or None for embedded mode)."""
return self._environment
async def run_task(
self,
prompt: str,
@@ -453,7 +462,15 @@ class Skyvern(AsyncSkyvern):
"""
self._ensure_cloud_environment()
browser_session = await self.get_browser_session(browser_session_id)
LOG.info("Connecting to existing cloud browser session", browser_session_id=browser_session.browser_session_id)
if self._environment == SkyvernEnvironment.CLOUD:
LOG.info(
"Connecting to existing cloud browser session",
url=_get_browser_session_url(browser_session.browser_session_id),
)
else:
LOG.info(
"Connecting to existing cloud browser session", browser_session_id=browser_session.browser_session_id
)
return await self._connect_to_cloud_browser_session(browser_session)
async def launch_cloud_browser(
@@ -480,7 +497,13 @@ class Skyvern(AsyncSkyvern):
timeout=timeout,
proxy_location=proxy_location,
)
LOG.info("Launched new cloud browser session", browser_session_id=browser_session.browser_session_id)
if self._environment == SkyvernEnvironment.CLOUD:
LOG.info(
"Launched new cloud browser session",
url=_get_browser_session_url(browser_session.browser_session_id),
)
else:
LOG.info("Launched new cloud browser session", browser_session_id=browser_session.browser_session_id)
return await self._connect_to_cloud_browser_session(browser_session)
async def use_cloud_browser(
@@ -515,9 +538,23 @@ class Skyvern(AsyncSkyvern):
timeout=timeout,
proxy_location=proxy_location,
)
LOG.info("Launched new cloud browser session", browser_session_id=browser_session.browser_session_id)
if self._environment == SkyvernEnvironment.CLOUD:
LOG.info(
"Launched new cloud browser session",
url=_get_browser_session_url(browser_session.browser_session_id),
)
else:
LOG.info("Launched new cloud browser session", browser_session_id=browser_session.browser_session_id)
else:
LOG.info("Reusing existing cloud browser session", browser_session_id=browser_session.browser_session_id)
if self._environment == SkyvernEnvironment.CLOUD:
LOG.info(
"Reusing existing cloud browser session",
url=_get_browser_session_url(browser_session.browser_session_id),
)
else:
LOG.info(
"Reusing existing cloud browser session", browser_session_id=browser_session.browser_session_id
)
return await self._connect_to_cloud_browser_session(browser_session)

View File

@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Any
import structlog
from playwright.async_api import Page
from skyvern.client import GetRunResponse
from skyvern.client import GetRunResponse, SkyvernEnvironment
from skyvern.client.core import RequestOptions
from skyvern.client.types.workflow_run_response import WorkflowRunResponse
from skyvern.core.script_generations.skyvern_page import SkyvernPage
@@ -20,6 +20,10 @@ from skyvern.schemas.runs import RunEngine, RunStatus, TaskRunResponse
LOG = structlog.get_logger()
def _get_app_url_for_run(run_id: str) -> str:
return f"https://app.skyvern.com/runs/{run_id}"
class SkyvernPageRun:
"""Provides methods to run Skyvern tasks and workflows in the context of a browser page.
@@ -88,7 +92,10 @@ class SkyvernPageRun:
user_agent=user_agent,
request_options=RequestOptions(additional_headers={"X-User-Agent": "skyvern-sdk"}),
)
LOG.info("AI task is running, this may take a while", run_id=task_run.run_id)
if self._browser.skyvern.environment == SkyvernEnvironment.CLOUD:
LOG.info("AI task is running, this may take a while", url=_get_app_url_for_run(task_run.run_id))
else:
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)
@@ -151,7 +158,12 @@ class SkyvernPageRun:
extra_http_headers=extra_http_headers,
request_options=RequestOptions(additional_headers={"X-User-Agent": "skyvern-sdk"}),
)
LOG.info("AI login workflow is running, this may take a while", run_id=workflow_run.run_id)
if self._browser.skyvern.environment == SkyvernEnvironment.CLOUD:
LOG.info(
"AI login workflow is running, this may take a while", url=_get_app_url_for_run(workflow_run.run_id)
)
else:
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)
@@ -252,7 +264,10 @@ class SkyvernPageRun:
browser_address=self._browser.browser_address,
request_options=RequestOptions(additional_headers={"X-User-Agent": "skyvern-sdk"}),
)
LOG.info("AI workflow is running, this may take a while", run_id=workflow_run.run_id)
if self._browser.skyvern.environment == SkyvernEnvironment.CLOUD:
LOG.info("AI workflow is running, this may take a while", url=_get_app_url_for_run(workflow_run.run_id))
else:
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)