How do you run this in terminal? I tried it here ```elixir defmodule UberForIceCream.Dspy.Question do use Ash.Resource, domain: UberForIceCream.Dspy, data_layer: AshPostgres.DataLayer, extensions: [AshPhoenix, AshAi] postgres do table "questions" repo UberForIceCream.Repo end code_interface do define :create define :read define :update define :get_by_id, action: :read, get_by: :id define :analyze_sentiment end actions do default_accept :* defaults [:create, :read, :update, :destroy] # <<<<<<<<<<<<<<<<<<<< THIS IS THE ACTION >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> action :analyze_sentiment, :atom do constraints one_of: [:positive, :negative] description """ Analyzes the sentiment of a given piece of text to determine if it is overall positive or negative. """ argument :text, :string do allow_nil? false description "The text for analysis" end run prompt( LangChain.ChatModels.ChatOpenAI.new!(%{ model: "gpt-4o"}), # setting `tools: true` allows it to use all exposed tools in your app tools: false # alternatively you can restrict it to only a set of tools # tools: [:list, :of, :tool, :names] # provide an optional prompt, which is an EEx template # prompt: "Analyze the sentiment of the following text: <%= @input.arguments.description %>" ) end end attributes do uuid_v7_primary_key :id attribute :q_text, :string do allow_nil? false public? true end attribute :topics, {:array, :string} do public? true end end end ``` `analyze_sentiment` in terminal , I got ``` iex(9)> Question.analyze_sentiment() {:error, %Ash.Error.Invalid{ errors: [ %Ash.Error.Changes.Required{ field: :text, type: :argument, resource: UberForIceCream.Dspy.Question, splode: Ash.Error, bread_crumbs: [], vars: [], path: [], stacktrace: #Splode.Stacktrace<>, class: :invalid } ] }} iex(10)> Question.analyze_sentiment("asdf") ** (Protocol.UndefinedError) protocol Enumerable not implemented for type BitString Got value: "asdf" ``` Why does it need enumerable?