Skip to content

Embedders

Embedders convert text into dense vectors used by the retrieval pipeline. They implement the Embedder protocol — duck-typed, no inheritance required — but production backends typically subclass SequentialEmbedder (in interfaces.py) and override embed_batch() to use the backend's native batching.

See Interfaces for the protocol definition and AsyncEmbedder for the async variant.

SentenceTransformerEmbedder

Note

Requires the sentence-transformers extra: uv pip install "emotional-memory[sentence-transformers]"

Importable from the top-level package once the extra is installed:

from emotional_memory import EmotionalMemory, InMemoryStore
from emotional_memory.embedders import SentenceTransformerEmbedder

em = EmotionalMemory(
    store=InMemoryStore(),
    embedder=SentenceTransformerEmbedder.make_bge_small(),
)

emotional_memory.embedders.sentence_transformers.SentenceTransformerEmbedder(model_name: str = 'all-MiniLM-L6-v2', *, device: str | None = None)

Bases: SequentialEmbedder

Wraps a sentence-transformers model as an :class:Embedder.

Overrides :meth:embed_batch to use the model's native batching (one forward pass for all texts) rather than the sequential fallback.

Parameters

model_name: Any model id accepted by :class:sentence_transformers.SentenceTransformer. Default is "all-MiniLM-L6-v2" — 384 dims, fast, multilingual-friendly enough for demos. Pick a larger model for production retrieval quality.

Class methods

:meth:make_bge_small — BAAI/bge-small-en-v1.5, 384 dims, recommended for benchmark and paper runs (2026 MTEB Retrieval tier-2 open-weights baseline). :meth:make_mpnet — all-mpnet-base-v2, 768 dims, legacy strong baseline.

Source code in src/emotional_memory/embedders/sentence_transformers.py
def __init__(self, model_name: str = "all-MiniLM-L6-v2", *, device: str | None = None) -> None:
    try:
        from sentence_transformers import SentenceTransformer
    except ImportError as exc:
        raise ImportError(
            "sentence-transformers is required for SentenceTransformerEmbedder.\n"
            "Install with: pip install 'emotional-memory[sentence-transformers]'"
        ) from exc

    if device is None:
        self._model = SentenceTransformer(model_name)
    else:
        self._model = SentenceTransformer(model_name, device=device)
    self._model_name = model_name
    self._device = device

make_bge_small() -> SentenceTransformerEmbedder classmethod

Return an instance using BAAI/bge-small-en-v1.5 (384 dims).

Recommended default for benchmark and paper runs: strong MTEB Retrieval baseline, fast inference, Apache-2.0 licence.

Source code in src/emotional_memory/embedders/sentence_transformers.py
@classmethod
def make_bge_small(cls) -> SentenceTransformerEmbedder:
    """Return an instance using ``BAAI/bge-small-en-v1.5`` (384 dims).

    Recommended default for benchmark and paper runs: strong MTEB Retrieval
    baseline, fast inference, Apache-2.0 licence.
    """
    return cls("BAAI/bge-small-en-v1.5")

make_mpnet() -> SentenceTransformerEmbedder classmethod

Return an instance using all-mpnet-base-v2 (768 dims).

Legacy strong baseline; heavier than bge-small but useful for comparison.

Source code in src/emotional_memory/embedders/sentence_transformers.py
@classmethod
def make_mpnet(cls) -> SentenceTransformerEmbedder:
    """Return an instance using ``all-mpnet-base-v2`` (768 dims).

    Legacy strong baseline; heavier than bge-small but useful for
    comparison.
    """
    return cls("all-mpnet-base-v2")