How to take some data which contains valid Elixir code format and execute it as Elixir code?

I am doing a POC for implementing an E2E workflow test application. And I think Elixir is perfect for such use case.

There is a feature I want to implement is: Given a set of existing steps(functions), the user should generate new workflow by themselves.
For example:

defmodule St.Workflow do
  def get_random_str(params) do
    IO.puts("generate random_str")
    # assign random string into _params

    params
  end

  def create_resource_group(params) do
    IO.puts("create resource group")

    params
  end

  def run_helm_exec_01(params) do
    IO.puts("do helm 01")
    params
  end

  def run_helm_exec_02(params) do
    IO.puts("do helm 02")
    params
  end

  def run_helm_exec_03(params) do
    IO.puts("do helm 03")
    params
  end

  # St.Workflow.workflow_01(%{})
  def workflow_01(params) do
    get_random_str(params)
    |> create_resource_group
    |> run_helm_exec_01
    |> run_helm_exec_02
    |> run_helm_exec_03
  end
  
  def install_helm(params) do
    run_helm_exec_01(params)
    |> run_helm_exec_02
    |> run_helm_exec_03
  end

  # St.Workflow.workflow_02(%{})
  def workflow_02(params) do
    get_random_str(params)
    |> create_resource_group
    |> install_helm
  end

  def eval_workflow(workflow_definition) do
    # A workflow_definition could be combination of existing functions in this module.
    # workflow_definition = "run_helm_exec_01(params)|> run_helm_exec_03"

    # how to run this? 
  end
end