From 299ceb14f3079a84443b1405aa26e2939a708f95 Mon Sep 17 00:00:00 2001 From: Jonathan Dobson Date: Tue, 28 Oct 2025 14:01:49 -0400 Subject: [PATCH] make templating strictness easy to switch between (#3835) --- skyvern/config.py | 1 + skyvern/forge/sdk/workflow/models/block.py | 17 +++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/skyvern/config.py b/skyvern/config.py index ca401819..50bed6df 100644 --- a/skyvern/config.py +++ b/skyvern/config.py @@ -114,6 +114,7 @@ class Settings(BaseSettings): # Workflow constant parameters WORKFLOW_DOWNLOAD_DIRECTORY_PARAMETER_KEY: str = "SKYVERN_DOWNLOAD_DIRECTORY" + WORKFLOW_TEMPLATING_STRICTNESS: str = "strict" # options: "strict", "lax" WORKFLOW_WAIT_BLOCK_MAX_SEC: int = 30 * 60 # Saved browser session settings diff --git a/skyvern/forge/sdk/workflow/models/block.py b/skyvern/forge/sdk/workflow/models/block.py index add471e1..223f1b19 100644 --- a/skyvern/forge/sdk/workflow/models/block.py +++ b/skyvern/forge/sdk/workflow/models/block.py @@ -96,7 +96,11 @@ from skyvern.webeye.browser_factory import BrowserState from skyvern.webeye.utils.page import SkyvernFrame LOG = structlog.get_logger() -jinja_sandbox_env = SandboxedEnvironment(undefined=StrictUndefined) + +if settings.WORKFLOW_TEMPLATING_STRICTNESS == "strict": + jinja_sandbox_env = SandboxedEnvironment(undefined=StrictUndefined) +else: + jinja_sandbox_env = SandboxedEnvironment() # Mapping from TaskV2Status to the corresponding BlockStatus. Declared once at @@ -249,11 +253,12 @@ class Block(BaseModel, abc.ABC): if "workflow_run_id" not in template_data: template_data["workflow_run_id"] = workflow_run_context.workflow_run_id - if missing_variables := get_missing_variables(potential_template, template_data): - raise MissingJinjaVariables( - template=potential_template, - variables=missing_variables, - ) + if settings.WORKFLOW_TEMPLATING_STRICTNESS == "strict": + if missing_variables := get_missing_variables(potential_template, template_data): + raise MissingJinjaVariables( + template=potential_template, + variables=missing_variables, + ) return template.render(template_data)