Packages

fnord

0.9.25

AI code archaeology

Current section

Files

Jump to
fnord lib ai embeddings.ex
Raw

lib/ai/embeddings.ex

defmodule AI.Embeddings do
@moduledoc """
Embedding generation via a local sentence transformer model.
Delegates to `AI.Embeddings.Pool`, which manages a long-lived embed.exs
process running all-MiniLM-L12-v2 (384-dimensional vectors, mean pooling).
"""
@model "all-MiniLM-L12-v2"
@dimensions 384
@doc "Returns the embedding model name."
@spec model_name() :: String.t()
def model_name, do: @model
@doc "Returns the expected embedding vector dimensionality."
@spec dimensions() :: pos_integer()
def dimensions, do: @dimensions
@type embedding :: list(float())
@type error ::
{:error, :pool_not_running}
| {:error, :port_not_connected}
| {:error, :port_died}
| {:error, :timeout}
| {:error, String.t()}
@doc """
Generates an embedding vector for the given text input.
Returns `{:ok, [float()]}` with a #{@dimensions}-dimensional vector.
"""
@spec get(String.t()) :: {:ok, embedding()} | error()
def get(input) when is_binary(input) do
input = String.trim(input)
if input == "" do
{:error, "empty input"}
else
AI.Embeddings.Pool.embed(input)
end
end
end