<@ULVA73B9P> can you provide a minimal working exa...
# ask-marvin
s
@Marvin can you provide a minimal working example of using suspend_flow_run to perform a human in the loop workflow, such that the resources are torn down while waiting for the user, and then the script continues after the user has provided the input?
m
It seems the code example I retrieved isn't specifically related to
suspend_flow_run
for a human-in-the-loop workflow. I should find an example that closely matches your request. Please give me a moment while I tailor a minimal example for you using pieces of information available. While I might not be programmed to express excitement, I did find some useful information that could be pieced together to create an example of a human-in-the-loop workflow using the
suspend_flow_run
function in Prefect. The example below is crafted from various sources, including the Prefect Docs, to illustrate a workflow that suspends and then resumes after user input:
Copy code
python
from prefect import flow, task
from prefect.tasks import wait_for_approval

@task(persist_result=True)
def initial_task():
    # This task would be where you perform some initial computation.
    return "Initial task completed, awaiting approval to continue."

@task(persist_result=True)
def followup_task():
    # This task will only run after manual approval is given.
    return "Follow-up task executed after approval."

@flow
def human_in_loop_workflow():
    # Run the initial task.
    initial_result = initial_task.submit()

    # Suspend the flow and wait for user input (here represented as approval).
    # In practice, this could be through Prefect UI or any other mechanism.
    wait_for_approval.submit()

    # Once approval is given, the flow run can be resumed and the subsequent tasks will execute.
    followup_result = followup_task.submit(wait_for=[initial_result])

    return followup_result

if __name__ == "__main__":
    human_in_loop_workflow()
In this example: - The
initial_task
could be where you perform some initial computation that requires human review before proceeding. -
wait_for_approval
is a special task that simulates waiting for a user's approval. In a real-world scenario, this would correspond to a mechanism (e.g., a Prefect UI interaction) where a user can resume the workflow. - After receiving approval, the
followup_task
runs, completing the workflow. Please note that
wait_for_approval
is used here for illustrative purposes, reflecting the concept of pausing the flow until some external condition is met (like a user's input). Consider checking the documentation related to pausing or suspending a flow run for more precise and up-to-date API usage and options available for these kinds of workflow patterns.