Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

2.0.0 - 2026-02-20

Changed

New erlang_python NIF Backend

  • Breaking: Replaced port-based stdio JSON communication with erlang_python 1.5.0 NIF integration
  • All Python providers now use direct py:call instead of subprocess communication
  • 2.7x improvement in batch throughput (936 vs 348 texts/sec with bge-small-en-v1.5)
  • Requires erlang_python 1.5.0+ as a dependency

New Modules

  • barrel_embed_py - Erlang wrapper for py:call with timeout support
  • priv/barrel_embed/nif_api.py - Thread-safe Python API for model caching

Removed

  • barrel_embed_port_server - Port-based Python server (replaced by NIF)
  • barrel_embed_python_queue - Rate limiting queue (erlang_python handles this)
  • priv/barrel_embed/server.py - Async stdio server
  • priv/barrel_embed/__main__.py - CLI entry point
  • priv/barrel_embed/providers/ - Provider classes (now in nif_api.py)

Migration

If you were using custom provider configurations, the API remains the same. The venv option is still supported and recommended:

{ok, State} = barrel_embed:init(#{
    embedder => {local, #{
        venv => "/path/to/.venv"
    }}
}).

1.0.0 - 2026-01-27

Added

Virtual Environment Support

  • Added venv configuration option for all Python providers (local, fastembed, splade, colbert, clip)
  • Proper venv activation in port environment (sets VIRTUAL_ENV, PATH, PYTHONPATH)
  • New scripts/setup_venv.sh for fast venv setup using uv
  • Requirements files for different installation profiles:
  • priv/requirements.txt - Default (sentence-transformers + uvloop)
  • priv/requirements-minimal.txt - Minimal (no ML libs)
  • priv/requirements-full.txt - All providers
  • Documentation: docs/venv-setup.md

CI Improvements

  • Added integration:venv job to test Erlang-Python venv communication
  • Python tests now use uv for faster dependency installation

Changed

  • setup_python_venv.sh now uses uv when available (falls back to pip)
  • Python queue default limit changed from schedulers/2 + 1 to schedulers * 2 + 1
  • Updated all Python provider documentation with venv examples

0.2.0 - 2026-01-27

Added

Cloud Providers

  • cohere - Cohere Embed API with input type optimization
  • voyage - Voyage AI for RAG and domain-specific embeddings (code, law, finance)
  • jina - Jina AI with 8K context and free tier
  • mistral - Mistral AI with EU data residency
  • azure - Azure OpenAI for enterprise compliance
  • bedrock - AWS Bedrock (Titan, Cohere models) with IAM and API key auth
  • vertex - Google Vertex AI for GCP ecosystem

Documentation

  • Provider comparison guide (docs/choosing-provider.md)
  • Developer guide for adding cloud providers (docs/dev/adding-provider.md)
  • Individual documentation pages for all cloud providers

Tooling

  • scripts/setup_python_venv.sh for one-command Python venv setup
  • Added --dev option for installing dev dependencies (test + uvloop)
  • Added --uvloop option to install uvloop via pyproject.toml extra
  • Added --test option to run Python tests after setup
  • Added -h/--help option for usage information
  • GitLab CI configuration (.gitlab-ci.yml)
  • Erlang tests with rebar3 eunit
  • Python tests with pytest
  • Dialyzer type checking
  • Xref cross-reference checks

Testing

  • Python test suite for uvloop integration (priv/tests/test_server.py)
  • uvloop detection and event loop policy tests
  • AsyncEmbedServer dispatch and handler tests
  • Concurrent task execution tests

Python Engine

  • Async request multiplexing for concurrent embeddings
  • Improved error handling and logging

Changed

  • Updated hackney dependency to 2.0.1 for HTTP/2 support
  • Provider init now properly loads modules before checking exports
  • Removed redundant application:ensure_all_started(hackney) from providers (hackney starts via app.src)

0.1.0 - 2026-01-14

Added

  • Initial release extracted from barrel_vectordb
  • Core embedding coordinator (barrel_embed) with provider chain and fallback support
  • Provider behaviour (barrel_embed_provider) for implementing custom providers
  • Python execution rate limiter (barrel_embed_python_queue)

Providers

  • local - Local Python with sentence-transformers
  • ollama - Ollama server API (supports both /api/embed and /api/embeddings)
  • openai - OpenAI Embeddings API
  • fastembed - FastEmbed ONNX-based embeddings (lighter than sentence-transformers)
  • splade - SPLADE sparse embeddings for hybrid search
    • embed_sparse/2, embed_batch_sparse/2 for native sparse vectors
    • Automatic sparse-to-dense conversion for compatibility
  • colbert - ColBERT multi-vector embeddings for fine-grained matching
    • embed_multi/2, embed_batch_multi/2 for token-level vectors
    • maxsim_score/2 for late interaction scoring
  • clip - CLIP image/text cross-modal embeddings
    • embed_image/2, embed_image_batch/2 for image embeddings
    • Text embeddings in same vector space for cross-modal search

Features

  • Batch embedding with configurable chunk size
  • Provider chain with automatic fallback on failure
  • Application supervision tree with ETS-based rate limiting
  • Comprehensive EUnit test suite