Script run - take screenshot for the workflow run block (#3437)

This commit is contained in:
Shuchang Zheng
2025-09-14 23:43:10 -07:00
committed by GitHub
parent 41cab31fcc
commit 6f212ff327

View File

@@ -27,6 +27,7 @@ from skyvern.forge.sdk.core import skyvern_context
from skyvern.forge.sdk.models import Step, StepStatus from skyvern.forge.sdk.models import Step, StepStatus
from skyvern.forge.sdk.schemas.files import FileInfo from skyvern.forge.sdk.schemas.files import FileInfo
from skyvern.forge.sdk.schemas.tasks import Task, TaskOutput, TaskStatus from skyvern.forge.sdk.schemas.tasks import Task, TaskOutput, TaskStatus
from skyvern.forge.sdk.schemas.workflow_runs import WorkflowRunBlock
from skyvern.forge.sdk.workflow.models.block import ( from skyvern.forge.sdk.workflow.models.block import (
CodeBlock, CodeBlock,
FileParserBlock, FileParserBlock,
@@ -271,6 +272,33 @@ async def execute_script(
LOG.info("Script executed successfully", script_id=script_id) LOG.info("Script executed successfully", script_id=script_id)
async def _take_workflow_run_block_screenshot(
workflow_run_id: str,
organization_id: str,
workflow_run_block: WorkflowRunBlock,
) -> None:
"""
This function is a copy of the block screenshot logic from the execute_safe function in the block.py file.
"""
browser_state = app.BROWSER_MANAGER.get_for_workflow_run(workflow_run_id)
if not browser_state:
LOG.warning("No browser state found when creating workflow_run_block", workflow_run_id=workflow_run_id)
else:
screenshot = await browser_state.take_fullpage_screenshot(
use_playwright_fullpage=app.EXPERIMENTATION_PROVIDER.is_feature_enabled_cached(
"ENABLE_PLAYWRIGHT_FULLPAGE",
workflow_run_id,
properties={"organization_id": str(organization_id)},
)
)
if screenshot:
await app.ARTIFACT_MANAGER.create_workflow_run_block_artifact(
workflow_run_block=workflow_run_block,
artifact_type=ArtifactType.SCREENSHOT_LLM,
data=screenshot,
)
async def _create_workflow_block_run_and_task( async def _create_workflow_block_run_and_task(
block_type: BlockType, block_type: BlockType,
prompt: str | None = None, prompt: str | None = None,
@@ -343,6 +371,12 @@ async def _create_workflow_block_run_and_task(
organization_id=organization_id, organization_id=organization_id,
) )
await _take_workflow_run_block_screenshot(
workflow_run_id=workflow_run_id,
organization_id=organization_id,
workflow_run_block=workflow_run_block,
)
context.step_id = step_id context.step_id = step_id
context.task_id = task_id context.task_id = task_id