barrel_embed (barrel_embed v2.3.0)

View Source

Embedding coordinator

Lightweight embedding generation for Erlang. Manages a chain of embedding providers with automatic fallback.

Providers

Local: - local: Local Python with sentence-transformers (CPU, no external calls) - ollama: Local Ollama server - fastembed: FastEmbed ONNX-based embeddings (lighter than sentence-transformers)

Cloud: - openai: OpenAI Embeddings API - cohere: Cohere Embed API - voyage: Voyage AI Embeddings - jina: Jina AI Embeddings - mistral: Mistral AI Embeddings (EU data residency) - azure: Azure OpenAI Embeddings - bedrock: AWS Bedrock Embeddings (Titan, Cohere) - vertex: Google Vertex AI Embeddings

Specialized: - splade: SPLADE sparse embeddings for hybrid search - colbert: ColBERT multi-vector embeddings for fine-grained matching - clip: CLIP image/text cross-modal embeddings

Configuration

   %% Local Python embeddings (requires Python + sentence-transformers)
   Embedder = {local, #{
       python => "python3",
       model => "BAAI/bge-base-en-v1.5"
   }}.
  
   %% Ollama server
   Embedder = {ollama, #{
       url => <<"http://localhost:11434">>,
       model => <<"nomic-embed-text">>
   }}.
  
   %% OpenAI API (requires API key)
   Embedder = {openai, #{
       api_key => <<"sk-...">>,  %% or set OPENAI_API_KEY env var
       model => <<"text-embedding-3-small">>
   }}.
  
   %% Provider chain with fallback
   Embedder = [
       {ollama, #{url => <<"http://localhost:11434">>}},
       {local, #{}}  %% fallback to CPU
   ].

Summary

Functions

Get the dimension of embeddings.

Generate embedding for a single text.

Generate embeddings for multiple texts.

Generate embeddings for multiple texts with options.

Check if uvloop is installed in the managed venv.

Get information about the current embedding configuration.

Initialize embedding state from configuration.

Install dependencies for a specific provider.

Refresh the managed venv. Deletes and recreates the venv with base dependencies.

Get the managed venv path.

Types

embed_state/0

-type embed_state() ::
          #{providers := [provider()], dimension := pos_integer(), batch_size := pos_integer()}.

provider/0

-type provider() :: {atom(), map()}.

provider_chain/0

-type provider_chain() :: [provider()] | provider().

Functions

dimension(_)

-spec dimension(embed_state() | undefined) -> pos_integer() | undefined.

Get the dimension of embeddings.

embed(Text, State)

-spec embed(binary(), embed_state() | undefined) -> {ok, [float()]} | {error, term()}.

Generate embedding for a single text.

embed_batch(Texts, State)

-spec embed_batch([binary()], embed_state() | undefined) -> {ok, [[float()]]} | {error, term()}.

Generate embeddings for multiple texts.

embed_batch(Texts, Options, _)

-spec embed_batch([binary()], map(), embed_state() | undefined) -> {ok, [[float()]]} | {error, term()}.

Generate embeddings for multiple texts with options.

has_uvloop()

-spec has_uvloop() -> boolean().

Check if uvloop is installed in the managed venv.

info(_)

-spec info(embed_state() | undefined) -> map().

Get information about the current embedding configuration.

init(Config)

-spec init(map()) -> {ok, embed_state() | undefined} | {error, term()}.

Initialize embedding state from configuration.

If no embedder key is present in Config, returns {ok, undefined}.

install_provider(Provider)

-spec install_provider(atom()) -> ok | {error, term()}.

Install dependencies for a specific provider.

refresh_venv()

-spec refresh_venv() -> {ok, string()} | {error, term()}.

Refresh the managed venv. Deletes and recreates the venv with base dependencies.

venv_path()

-spec venv_path() -> string().

Get the managed venv path.