Current section
Files
Jump to
Current section
Files
lib/ai/prompt.ex
defmodule AI.Prompt do
@moduledoc """
Normalizes prompt and message inputs.
"""
@doc """
Returns `{messages, system}` or raises on invalid input.
"""
def standardize(opts) when is_map(opts) do
prompt = Map.get(opts, :prompt)
messages = Map.get(opts, :messages)
system = Map.get(opts, :system)
cond do
is_nil(prompt) and is_nil(messages) ->
raise AI.Errors.InvalidPromptError,
message: "prompt or messages must be defined",
prompt: opts
not is_nil(prompt) and not is_nil(messages) ->
raise AI.Errors.InvalidPromptError,
message: "prompt and messages cannot be defined at the same time",
prompt: opts
is_binary(prompt) ->
{[%{role: "user", content: prompt}], system}
is_list(prompt) ->
{prompt, system}
is_list(messages) ->
{messages, system}
true ->
raise AI.Errors.InvalidPromptError,
message: "prompt or messages must be defined",
prompt: opts
end
end
end