script gen bug - fix parameters input for non task blocks (#3683)

This commit is contained in:
Shuchang Zheng
2025-10-10 12:47:54 -07:00
committed by GitHub
parent ae7785d426
commit 89c712786d
2 changed files with 47 additions and 28 deletions

View File

@@ -944,6 +944,9 @@ def _build_goto_statement(block: dict[str, Any], data_variable_name: str | None
def _build_code_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
"""Build a skyvern.run_code statement."""
parameters = block.get("parameters", [])
parameter_list = [parameter["key"] for parameter in parameters]
args = [
cst.Arg(
keyword=cst.Name("code"),
@@ -963,7 +966,7 @@ def _build_code_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
),
cst.Arg(
keyword=cst.Name("parameters"),
value=_value(block.get("parameters", None)),
value=_value(parameter_list),
whitespace_after_arg=cst.ParenthesizedWhitespace(
indent=True,
),
@@ -985,6 +988,9 @@ def _build_code_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
def _build_file_upload_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
"""Build a skyvern.upload_file statement."""
parameters = block.get("parameters", [])
parameter_list = [parameter["key"] for parameter in parameters]
args = [
cst.Arg(
keyword=cst.Name("label"),
@@ -996,7 +1002,7 @@ def _build_file_upload_statement(block: dict[str, Any]) -> cst.SimpleStatementLi
),
cst.Arg(
keyword=cst.Name("parameters"),
value=_value(block.get("parameters", None)),
value=_value(parameter_list),
whitespace_after_arg=cst.ParenthesizedWhitespace(
indent=True,
last_line=cst.SimpleWhitespace(INDENT),
@@ -1289,10 +1295,12 @@ def _build_prompt_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
)
if block.get("parameters") is not None:
parameters = block.get("parameters", [])
parameter_list = [parameter["key"] for parameter in parameters]
args.append(
cst.Arg(
keyword=cst.Name("parameters"),
value=_value(block.get("parameters")),
value=_value(parameter_list),
whitespace_after_arg=cst.ParenthesizedWhitespace(
indent=True,
),

View File

@@ -1657,6 +1657,7 @@ class BlockValidationOutput:
context: skyvern_context.SkyvernContext
label: str
output_parameter: OutputParameter
input_parameters: list[PARAMETER_TYPE]
workflow: Workflow
workflow_id: str
workflow_run_id: str
@@ -1664,7 +1665,9 @@ class BlockValidationOutput:
browser_session_id: str | None = None
async def _validate_and_get_output_parameter(label: str | None = None) -> BlockValidationOutput:
async def _validate_and_get_output_parameter(
label: str | None = None, parameter_keys: list[str] | None = None
) -> BlockValidationOutput:
context = skyvern_context.ensure_context()
workflow_id = context.workflow_id
workflow_run_id = context.workflow_run_id
@@ -1694,10 +1697,18 @@ async def _validate_and_get_output_parameter(label: str | None = None) -> BlockV
modified_at=datetime.now(),
parameter_type=ParameterType.OUTPUT,
)
input_parameters = []
if parameter_keys:
for parameter_key in parameter_keys:
parameter = workflow.get_parameter(parameter_key)
if parameter:
input_parameters.append(parameter)
return BlockValidationOutput(
context=context,
label=label,
output_parameter=output_parameter,
input_parameters=input_parameters,
workflow=workflow,
workflow_id=workflow_id,
workflow_run_id=workflow_run_id,
@@ -1709,13 +1720,13 @@ async def _validate_and_get_output_parameter(label: str | None = None) -> BlockV
async def run_code(
code: str,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> dict[str, Any]:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
code_block = CodeBlock(
code=code,
label=block_validation_output.label,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
output_parameter=block_validation_output.output_parameter,
)
block_result = await code_block.execute_safe(
@@ -1729,7 +1740,7 @@ async def run_code(
async def upload_file(
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
storage_type: FileStorageType = FileStorageType.S3,
s3_bucket: str | None = None,
aws_access_key_id: str | None = None,
@@ -1740,7 +1751,7 @@ async def upload_file(
azure_blob_container_name: str | None = None,
path: str | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
if s3_bucket:
s3_bucket = _render_template_with_label(s3_bucket, label)
if aws_access_key_id:
@@ -1760,7 +1771,7 @@ async def upload_file(
file_upload_block = FileUploadBlock(
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
storage_type=FileStorageType(storage_type),
s3_bucket=s3_bucket,
aws_access_key_id=aws_access_key_id,
@@ -1786,9 +1797,9 @@ async def send_email(
body: str,
file_attachments: list[str] = [],
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
sender = _render_template_with_label(sender, label)
if isinstance(recipients, str):
recipients = render_list(_render_template_with_label(recipients, label))
@@ -1813,7 +1824,7 @@ async def send_email(
file_attachments=file_attachments,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
await send_email_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,
@@ -1827,16 +1838,16 @@ async def parse_pdf(
file_url: str,
schema: dict[str, Any] | None = None,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
file_url = _render_template_with_label(file_url, label)
pdf_parser_block = PDFParserBlock(
file_url=file_url,
json_schema=schema,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
await pdf_parser_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,
@@ -1851,9 +1862,9 @@ async def parse_file(
file_type: FileType,
schema: dict[str, Any] | None = None,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
file_url = _render_template_with_label(file_url, label)
file_parser_block = FileParserBlock(
file_url=file_url,
@@ -1861,7 +1872,7 @@ async def parse_file(
json_schema=schema,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
await file_parser_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,
@@ -1879,9 +1890,9 @@ async def http_request(
timeout: int = 30,
follow_redirects: bool = True,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
method = _render_template_with_label(method, label)
url = _render_template_with_label(url, label)
http_request_block = HttpRequestBlock(
@@ -1893,7 +1904,7 @@ async def http_request(
follow_redirects=follow_redirects,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
await http_request_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,
@@ -1906,15 +1917,15 @@ async def http_request(
async def goto(
url: str,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
url = _render_template_with_label(url, label)
goto_url_block = UrlBlock(
url=url,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
await goto_url_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,
@@ -1928,16 +1939,16 @@ async def prompt(
prompt: str,
schema: dict[str, Any] | None = None,
label: str | None = None,
parameters: list[PARAMETER_TYPE] | None = None,
parameters: list[str] | None = None,
) -> dict[str, Any] | list | str | None:
block_validation_output = await _validate_and_get_output_parameter(label)
block_validation_output = await _validate_and_get_output_parameter(label, parameters)
prompt = _render_template_with_label(prompt, label)
prompt_block = TextPromptBlock(
prompt=prompt,
json_schema=schema,
label=block_validation_output.label,
output_parameter=block_validation_output.output_parameter,
parameters=parameters or [],
parameters=block_validation_output.input_parameters,
)
result = await prompt_block.execute_safe(
workflow_run_id=block_validation_output.workflow_run_id,