Current section

Files

Jump to
codex_sdk lib codex voice simple_workflow.ex
Raw

lib/codex/voice/simple_workflow.ex

defmodule Codex.Voice.SimpleWorkflow do
@moduledoc """
A simple workflow that uses a function to process transcriptions.
## Example
workflow = SimpleWorkflow.new(fn text ->
["You said: \#{text}"]
end)
pipeline = Pipeline.new(workflow: workflow)
"""
@behaviour Codex.Voice.Workflow
defstruct [:handler, :greeting]
@type handler :: (String.t() -> Enumerable.t())
@type t :: %__MODULE__{
handler: handler(),
greeting: String.t() | nil
}
@doc "Create a new simple workflow."
@spec new(handler(), keyword()) :: t()
def new(handler, opts \\ []) when is_function(handler, 1) do
%__MODULE__{
handler: handler,
greeting: Keyword.get(opts, :greeting)
}
end
@impl Codex.Voice.Workflow
def run(%__MODULE__{handler: handler}, transcription) do
handler.(transcription)
end
@impl Codex.Voice.Workflow
def on_start(%__MODULE__{greeting: nil}), do: []
def on_start(%__MODULE__{greeting: greeting}), do: [greeting]
end