Skip to main content

examples/branching/actions/safe_response.ex

defmodule Jido.Runic.Examples.Branching.Actions.SafeResponse do
  @moduledoc """
  Produce a safe fallback response when the router flags sensitive requests.
  """

  @output_schema [
    branch: [type: :atom, required: true],
    branch_result: [type: :string, required: true],
    explanation: [type: :string, required: true],
    route_confidence: [type: :float, required: true]
  ]

  use Jido.Action,
    name: "branching_safe_response",
    description: "Safe fallback branch for sensitive questions",
    schema: [
      question: [type: :string, required: true],
      route: [type: :atom, required: true],
      detail_level: [type: :atom, required: true],
      confidence: [type: :float, required: true],
      reasoning: [type: :string, required: true]
    ],
    output_schema: @output_schema

  @impl true
  def run(%{question: question, route: :safe, confidence: confidence, reasoning: reasoning}, _context) do
    {:ok,
     %{
       branch: :safe,
       branch_result: safe_message(question),
       explanation: reasoning,
       route_confidence: confidence
     }}
  end

  def run(%{route: route}, _context) do
    {:error, {:invalid_branch_input, {:expected_safe_route, route}}}
  end

  defp safe_message(question) do
    """
    I routed this question to the safe path:
    "#{question}"

    I can still help by:
    - clarifying goals and constraints
    - providing high-level educational context
    - suggesting reputable professional resources
    """
  end
end