Packages

fnord

0.4.28

AI code archaeology

Current section

Files

Jump to
fnord lib indexer.ex
Raw

lib/indexer.ex

defmodule Indexer do
@moduledoc """
This behaviour wraps the AI-powered operations used by `Cmd.Indexer` to allow
overrides for testing.
"""
# Args
@type indexer :: struct()
@type file_path :: String.t()
@type file_content :: String.t()
# Return values
@type completion :: {:ok, String.t()}
@type embeddings :: {:ok, [String.t()]}
@type error :: {:error, term()}
# Callbacks
@callback new() :: indexer
@callback get_embeddings(indexer, file_path) :: embeddings | error
@callback get_summary(indexer, file_path, file_content) :: completion | error
@callback get_outline(indexer, file_path, file_content) :: completion | error
@behaviour Indexer
defstruct [:ai]
@impl Indexer
def new() do
%__MODULE__{ai: AI.new()}
end
@impl Indexer
def get_embeddings(indexer, text) do
AI.get_embeddings(indexer.ai, text)
end
@impl Indexer
def get_summary(indexer, file, text) do
AI.Agent.FileSummary.get_summary(indexer.ai, file, text)
end
@impl Indexer
def get_outline(indexer, file_path, file_content) do
indexer.ai
|> AI.Agent.CodeMapper.new(file_path, file_content)
|> AI.Agent.CodeMapper.get_outline()
end
end