Skip to main content

examples/studio/actions/build_outline.ex

defmodule Jido.Runic.Examples.Studio.Actions.BuildOutline do
  @moduledoc "Build a structured article outline from research findings."

  @output_schema [
    topic: [type: :string, required: true],
    outline: [type: {:list, :string}, required: true]
  ]

  use Jido.Action,
    name: "studio_build_outline",
    description: "Builds an article outline from research summary",
    schema: [
      topic: [type: :string, required: true],
      research_summary: [type: :string, required: true]
    ],
    output_schema: @output_schema

  alias Jido.Runic.Examples.Studio.Actions.Helpers

  @impl true
  def run(%{topic: topic, research_summary: research_summary}, _context) do
    prompt = """
    You are a content strategist. Given the topic "#{topic}" and the following research summary,
    create a detailed article outline with a title and 3-5 section headings in markdown format.

    Research:
    #{research_summary}
    """

    case Helpers.generate_object(prompt, @output_schema) do
      {:ok, object} ->
        {:ok,
         %{
           topic: object["topic"] || topic,
           outline: object["outline"] || []
         }}

      {:error, reason} ->
        {:error, reason}
    end
  end
end