Skip to main content

examples/studio/actions/plan_queries.ex

defmodule Jido.Runic.Examples.Studio.Actions.PlanQueries do
  @moduledoc "Generate search queries and an outline seed from a topic."

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

  use Jido.Action,
    name: "studio_plan_queries",
    description: "Plans research queries for a topic",
    schema: [
      topic: [type: :string, required: true]
    ],
    output_schema: @output_schema

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

  @impl true
  def run(%{topic: topic}, _context) do
    prompt = """
    You are a research planner. Given the topic "#{topic}":
    1. Generate 3 specific search queries that would surface useful information.
    2. Suggest an outline with 3-5 section titles.
    """

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

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