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:
|
def _build_code_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
|
||||||
"""Build a skyvern.run_code statement."""
|
"""Build a skyvern.run_code statement."""
|
||||||
|
parameters = block.get("parameters", [])
|
||||||
|
parameter_list = [parameter["key"] for parameter in parameters]
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
cst.Arg(
|
cst.Arg(
|
||||||
keyword=cst.Name("code"),
|
keyword=cst.Name("code"),
|
||||||
@@ -963,7 +966,7 @@ def _build_code_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
|
|||||||
),
|
),
|
||||||
cst.Arg(
|
cst.Arg(
|
||||||
keyword=cst.Name("parameters"),
|
keyword=cst.Name("parameters"),
|
||||||
value=_value(block.get("parameters", None)),
|
value=_value(parameter_list),
|
||||||
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
||||||
indent=True,
|
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:
|
def _build_file_upload_statement(block: dict[str, Any]) -> cst.SimpleStatementLine:
|
||||||
"""Build a skyvern.upload_file statement."""
|
"""Build a skyvern.upload_file statement."""
|
||||||
|
parameters = block.get("parameters", [])
|
||||||
|
parameter_list = [parameter["key"] for parameter in parameters]
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
cst.Arg(
|
cst.Arg(
|
||||||
keyword=cst.Name("label"),
|
keyword=cst.Name("label"),
|
||||||
@@ -996,7 +1002,7 @@ def _build_file_upload_statement(block: dict[str, Any]) -> cst.SimpleStatementLi
|
|||||||
),
|
),
|
||||||
cst.Arg(
|
cst.Arg(
|
||||||
keyword=cst.Name("parameters"),
|
keyword=cst.Name("parameters"),
|
||||||
value=_value(block.get("parameters", None)),
|
value=_value(parameter_list),
|
||||||
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
||||||
indent=True,
|
indent=True,
|
||||||
last_line=cst.SimpleWhitespace(INDENT),
|
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:
|
if block.get("parameters") is not None:
|
||||||
|
parameters = block.get("parameters", [])
|
||||||
|
parameter_list = [parameter["key"] for parameter in parameters]
|
||||||
args.append(
|
args.append(
|
||||||
cst.Arg(
|
cst.Arg(
|
||||||
keyword=cst.Name("parameters"),
|
keyword=cst.Name("parameters"),
|
||||||
value=_value(block.get("parameters")),
|
value=_value(parameter_list),
|
||||||
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
whitespace_after_arg=cst.ParenthesizedWhitespace(
|
||||||
indent=True,
|
indent=True,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1657,6 +1657,7 @@ class BlockValidationOutput:
|
|||||||
context: skyvern_context.SkyvernContext
|
context: skyvern_context.SkyvernContext
|
||||||
label: str
|
label: str
|
||||||
output_parameter: OutputParameter
|
output_parameter: OutputParameter
|
||||||
|
input_parameters: list[PARAMETER_TYPE]
|
||||||
workflow: Workflow
|
workflow: Workflow
|
||||||
workflow_id: str
|
workflow_id: str
|
||||||
workflow_run_id: str
|
workflow_run_id: str
|
||||||
@@ -1664,7 +1665,9 @@ class BlockValidationOutput:
|
|||||||
browser_session_id: str | None = None
|
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()
|
context = skyvern_context.ensure_context()
|
||||||
workflow_id = context.workflow_id
|
workflow_id = context.workflow_id
|
||||||
workflow_run_id = context.workflow_run_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(),
|
modified_at=datetime.now(),
|
||||||
parameter_type=ParameterType.OUTPUT,
|
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(
|
return BlockValidationOutput(
|
||||||
context=context,
|
context=context,
|
||||||
label=label,
|
label=label,
|
||||||
output_parameter=output_parameter,
|
output_parameter=output_parameter,
|
||||||
|
input_parameters=input_parameters,
|
||||||
workflow=workflow,
|
workflow=workflow,
|
||||||
workflow_id=workflow_id,
|
workflow_id=workflow_id,
|
||||||
workflow_run_id=workflow_run_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(
|
async def run_code(
|
||||||
code: str,
|
code: str,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> 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_block = CodeBlock(
|
||||||
code=code,
|
code=code,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
)
|
)
|
||||||
block_result = await code_block.execute_safe(
|
block_result = await code_block.execute_safe(
|
||||||
@@ -1729,7 +1740,7 @@ async def run_code(
|
|||||||
|
|
||||||
async def upload_file(
|
async def upload_file(
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = None,
|
||||||
storage_type: FileStorageType = FileStorageType.S3,
|
storage_type: FileStorageType = FileStorageType.S3,
|
||||||
s3_bucket: str | None = None,
|
s3_bucket: str | None = None,
|
||||||
aws_access_key_id: 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,
|
azure_blob_container_name: str | None = None,
|
||||||
path: str | None = None,
|
path: str | None = 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:
|
if s3_bucket:
|
||||||
s3_bucket = _render_template_with_label(s3_bucket, label)
|
s3_bucket = _render_template_with_label(s3_bucket, label)
|
||||||
if aws_access_key_id:
|
if aws_access_key_id:
|
||||||
@@ -1760,7 +1771,7 @@ async def upload_file(
|
|||||||
file_upload_block = FileUploadBlock(
|
file_upload_block = FileUploadBlock(
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
storage_type=FileStorageType(storage_type),
|
storage_type=FileStorageType(storage_type),
|
||||||
s3_bucket=s3_bucket,
|
s3_bucket=s3_bucket,
|
||||||
aws_access_key_id=aws_access_key_id,
|
aws_access_key_id=aws_access_key_id,
|
||||||
@@ -1786,9 +1797,9 @@ async def send_email(
|
|||||||
body: str,
|
body: str,
|
||||||
file_attachments: list[str] = [],
|
file_attachments: list[str] = [],
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = 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)
|
sender = _render_template_with_label(sender, label)
|
||||||
if isinstance(recipients, str):
|
if isinstance(recipients, str):
|
||||||
recipients = render_list(_render_template_with_label(recipients, label))
|
recipients = render_list(_render_template_with_label(recipients, label))
|
||||||
@@ -1813,7 +1824,7 @@ async def send_email(
|
|||||||
file_attachments=file_attachments,
|
file_attachments=file_attachments,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
await send_email_block.execute_safe(
|
await send_email_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
@@ -1827,16 +1838,16 @@ async def parse_pdf(
|
|||||||
file_url: str,
|
file_url: str,
|
||||||
schema: dict[str, Any] | None = None,
|
schema: dict[str, Any] | None = None,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = 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_url = _render_template_with_label(file_url, label)
|
||||||
pdf_parser_block = PDFParserBlock(
|
pdf_parser_block = PDFParserBlock(
|
||||||
file_url=file_url,
|
file_url=file_url,
|
||||||
json_schema=schema,
|
json_schema=schema,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
await pdf_parser_block.execute_safe(
|
await pdf_parser_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
@@ -1851,9 +1862,9 @@ async def parse_file(
|
|||||||
file_type: FileType,
|
file_type: FileType,
|
||||||
schema: dict[str, Any] | None = None,
|
schema: dict[str, Any] | None = None,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = 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_url = _render_template_with_label(file_url, label)
|
||||||
file_parser_block = FileParserBlock(
|
file_parser_block = FileParserBlock(
|
||||||
file_url=file_url,
|
file_url=file_url,
|
||||||
@@ -1861,7 +1872,7 @@ async def parse_file(
|
|||||||
json_schema=schema,
|
json_schema=schema,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
await file_parser_block.execute_safe(
|
await file_parser_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
@@ -1879,9 +1890,9 @@ async def http_request(
|
|||||||
timeout: int = 30,
|
timeout: int = 30,
|
||||||
follow_redirects: bool = True,
|
follow_redirects: bool = True,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = 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)
|
method = _render_template_with_label(method, label)
|
||||||
url = _render_template_with_label(url, label)
|
url = _render_template_with_label(url, label)
|
||||||
http_request_block = HttpRequestBlock(
|
http_request_block = HttpRequestBlock(
|
||||||
@@ -1893,7 +1904,7 @@ async def http_request(
|
|||||||
follow_redirects=follow_redirects,
|
follow_redirects=follow_redirects,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
await http_request_block.execute_safe(
|
await http_request_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
@@ -1906,15 +1917,15 @@ async def http_request(
|
|||||||
async def goto(
|
async def goto(
|
||||||
url: str,
|
url: str,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = 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)
|
url = _render_template_with_label(url, label)
|
||||||
goto_url_block = UrlBlock(
|
goto_url_block = UrlBlock(
|
||||||
url=url,
|
url=url,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
await goto_url_block.execute_safe(
|
await goto_url_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
@@ -1928,16 +1939,16 @@ async def prompt(
|
|||||||
prompt: str,
|
prompt: str,
|
||||||
schema: dict[str, Any] | None = None,
|
schema: dict[str, Any] | None = None,
|
||||||
label: str | None = None,
|
label: str | None = None,
|
||||||
parameters: list[PARAMETER_TYPE] | None = None,
|
parameters: list[str] | None = None,
|
||||||
) -> dict[str, Any] | list | str | 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 = _render_template_with_label(prompt, label)
|
||||||
prompt_block = TextPromptBlock(
|
prompt_block = TextPromptBlock(
|
||||||
prompt=prompt,
|
prompt=prompt,
|
||||||
json_schema=schema,
|
json_schema=schema,
|
||||||
label=block_validation_output.label,
|
label=block_validation_output.label,
|
||||||
output_parameter=block_validation_output.output_parameter,
|
output_parameter=block_validation_output.output_parameter,
|
||||||
parameters=parameters or [],
|
parameters=block_validation_output.input_parameters,
|
||||||
)
|
)
|
||||||
result = await prompt_block.execute_safe(
|
result = await prompt_block.execute_safe(
|
||||||
workflow_run_id=block_validation_output.workflow_run_id,
|
workflow_run_id=block_validation_output.workflow_run_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user