From 70adf8b9c6901c3c5cdf01d78e1c553ab68a16a3 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Sun, 23 Mar 2025 17:10:17 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'skyvern/'=20wi?= =?UTF-8?q?th=20remote=20'skyvern/'=20(#2005)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skyvern/forge/sdk/workflow/models/block.py | 90 ++++++++++++---------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/skyvern/forge/sdk/workflow/models/block.py b/skyvern/forge/sdk/workflow/models/block.py index fa43ec4a..c6ebddc6 100644 --- a/skyvern/forge/sdk/workflow/models/block.py +++ b/skyvern/forge/sdk/workflow/models/block.py @@ -211,6 +211,52 @@ class Block(BaseModel, abc.ABC): ) -> BlockResult: pass + async def _generate_workflow_run_block_description( + self, workflow_run_block_id: str, organization_id: str | None = None + ) -> None: + description = None + try: + block_data = self.model_dump( + exclude={ + "workflow_run_block_id", + "organization_id", + "task_id", + "workflow_run_id", + "parent_workflow_run_block_id", + "label", + "status", + "output", + "continue_on_failure", + "failure_reason", + "actions", + "created_at", + "modified_at", + }, + exclude_none=True, + ) + description_generation_prompt = prompt_engine.load_prompt( + "generate_workflow_run_block_description", + block=block_data, + ) + json_response = await app.SECONDARY_LLM_API_HANDLER( + prompt=description_generation_prompt, prompt_name="generate-workflow-run-block-description" + ) + description = json_response.get("summary") + LOG.info( + "Generated description for the workflow run block", + description=description, + workflow_run_block_id=workflow_run_block_id, + ) + except Exception as e: + LOG.exception("Failed to generate description for the workflow run block", error=e) + + if description: + await app.DATABASE.update_workflow_run_block( + workflow_run_block_id=workflow_run_block_id, + description=description, + organization_id=organization_id, + ) + async def execute_safe( self, workflow_run_id: str, @@ -231,48 +277,8 @@ class Block(BaseModel, abc.ABC): ) workflow_run_block_id = workflow_run_block.workflow_run_block_id - description = None - try: - block_data = self.model_dump( - exclude={ - "workflow_run_block_id", - "organization_id", - "task_id", - "workflow_run_id", - "parent_workflow_run_block_id", - "label", - "status", - "output", - "continue_on_failure", - "failure_reason", - "actions", - "created_at", - "modified_at", - }, - exclude_none=True, - ) - description_generation_prompt = prompt_engine.load_prompt( - "generate_workflow_run_block_description", - block=block_data, - ) - json_response = await app.SECONDARY_LLM_API_HANDLER( - prompt=description_generation_prompt, prompt_name="generate-workflow-run-block-description" - ) - description = json_response.get("summary") - LOG.info( - "Generated description for the workflow run block", - description=description, - workflow_run_block_id=workflow_run_block.workflow_run_block_id, - ) - except Exception as e: - LOG.exception("Failed to generate description for the workflow run block", error=e) - - if description: - workflow_run_block = await app.DATABASE.update_workflow_run_block( - workflow_run_block_id=workflow_run_block.workflow_run_block_id, - description=description, - organization_id=organization_id, - ) + # generate the description for the workflow run block asynchronously + asyncio.create_task(self._generate_workflow_run_block_description(workflow_run_block_id, organization_id)) # create a screenshot browser_state = app.BROWSER_MANAGER.get_for_workflow_run(workflow_run_id)