script gen bug - fix parameters input for non task blocks (#3683)
This commit is contained in:
@@ -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,
|
||||
),
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user