Skip to main content

examples/durable_interrupt_resume_graph.exs

alias BeamWeaver.Checkpoint.ETS, as: CheckpointETS
alias BeamWeaver.Graph
alias BeamWeaver.Graph.Compiled

checkpointer = CheckpointETS.new()
config = %{"configurable" => %{"thread_id" => "example-interrupt"}}

graph =
  Graph.new()
  |> Graph.add_node(:review, fn _state ->
    decision = Graph.interrupt(%{question: "approve?"})
    %{decision: decision}
  end)
  |> Graph.add_edge(Graph.start(), :review)
  |> Graph.add_edge(:review, Graph.end_node())
  |> Graph.compile!(checkpointer: checkpointer)

{:interrupted, interrupt} = Compiled.invoke(graph, %{}, config: config)
IO.puts(interrupt.value.question)

{:ok, %{decision: "approved"}} = Compiled.resume(graph, "approved", config: config)
IO.puts("approved")