Packages
fnord
0.7.19
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
lib/ai/tools/default/prompt.ex
defmodule AI.Tools.Default.Prompt do
@behaviour AI.Tools
@impl AI.Tools
def ui_note_on_request(%{"op" => "create"} = args), do: {"Creating prompt entry", args["text"]}
def ui_note_on_request(%{"op" => "update"} = args), do: {"Updating prompt entry", args["text"]}
def ui_note_on_request(%{"op" => "delete"} = args), do: {"Deleting prompt entry", args["id"]}
@impl AI.Tools
def ui_note_on_result(_args, result), do: {"Prompt modified successfully", inspect(result)}
@impl AI.Tools
def read_args(args) do
args
|> Map.fetch("op")
|> case do
{:ok, "create"} ->
with {:ok, text} <- Map.fetch(args, "text") do
{:ok, %{"op" => "create", "text" => String.trim(text)}}
else
_ -> {:error, :missing_argument, "text"}
end
{:ok, "update"} ->
with {:ok, id} <- Map.fetch(args, "id"),
{:ok, text} <- Map.fetch(args, "text") do
{:ok, %{"op" => "update", "id" => String.trim(id), "text" => String.trim(text)}}
else
_ -> {:error, :missing_argument, "id, text"}
end
{:ok, "delete"} ->
with {:ok, id} <- Map.fetch(args, "id") do
{:ok, %{"op" => "delete", "id" => String.trim(id)}}
else
_ -> {:error, :missing_argument, "id"}
end
:error ->
{:error, :missing_argument, "op"}
{:ok, other} when is_binary(other) ->
{:error, :invalid_argument, "op"}
end
end
@impl AI.Tools
def spec do
%{
type: "function",
function: %{
name: "prompt",
description: """
You are able to manage the instructions in your own system prompt using
this tool. Each instruction in your system prompt is identified by an
ID (displayed in angle brackets) which can be used to update or delete
the entry later.
""",
parameters: %{
type: "object",
required: ["op"],
properties: %{
op: %{
type: "string",
description: "Valid options: [create | update | delete]"
},
id: %{
type: "string",
description:
"The ID of the prompt instruction to update or delete. Required for update/delete operations."
},
text: %{
type: "string",
description:
"The text of the prompt instruction. Required for create/update operations."
}
}
}
}
}
end
@impl AI.Tools
def call(%{"op" => "create", "text" => text}) do
with {:ok, id} <- Store.DefaultProject.Prompt.create(text) do
{:ok, "Prompt entry created succesfully (ID: #{id})"}
end
end
def call(%{"op" => "update", "id" => id, "text" => text}) do
with {:ok, id} <- Store.DefaultProject.Prompt.update(id, text) do
{:ok, "Prompt entry updated successfully (ID: #{id})"}
end
end
def call(%{"op" => "delete", "id" => id}) do
with {:ok, id} <- Store.DefaultProject.Prompt.delete(id) do
{:ok, "Prompt entry deleted successfully (ID: #{id})"}
end
end
end