Packages

fnord

0.8.73

AI code archaeology

Current section

Files

Jump to
fnord lib ai tools list_projects.ex
Raw

lib/ai/tools/list_projects.ex

defmodule AI.Tools.ListProjects do
@moduledoc """
Lists all available projects except for the current project.
"""
@behaviour AI.Tools
@impl AI.Tools
def async?, do: true
@impl AI.Tools
def is_available?, do: true
@impl AI.Tools
def ui_note_on_request(_) do
{"Listing projects", "Listing other projects"}
end
@impl AI.Tools
def ui_note_on_result(_args, result) do
{"Projects listed", "Found #{length(result)} other project(s)"}
end
@impl AI.Tools
def tool_call_failure_message(_args, _reason), do: :default
@impl AI.Tools
def read_args(args), do: {:ok, args}
@impl AI.Tools
def spec() do
%{
type: "function",
function: %{
name: "list_projects_tool",
description: "Lists all other available projects, apart from the currently active one.",
parameters: %{
type: "object",
required: [],
properties: %{}
}
}
}
end
@impl AI.Tools
def call(_args) do
settings = Settings.new()
all_projects = Settings.list_projects(settings)
current_project =
case Settings.get_selected_project() do
{:ok, project} -> project
_ -> nil
end
filtered =
if current_project,
do: Enum.reject(all_projects, &(&1 == current_project)),
else: all_projects
{:ok, filtered}
end
end