Skip to main content

embeddingcache

PyPI license python black isort tests

Retrieve text embeddings, but cache them locally if we have already computed them.

Motivation

If you are doing a handful of different NLP tasks, or have a single NLP pipeline you keep tuning, you probably don't want to recompute embeddings. Hence, we cache them.

Quickstart

pip install embeddingcache
from embeddingcache.embeddingcache import get_embeddings
embeddings = get_embeddings(
            strs=["hi", "I love Berlin."],
            embedding_model="all-MiniLM-L6-v2",
            db_directory=Path("dbs/"),
            verbose=True,
        )

Design assumptions

We use SQLite3 to cache embeddings. [This could be adapted easily, since we use SQLAlchemy.]

We assume read-heavy loads, with one concurrent writer. (However, we retry on write failures.)

We shard SQLite3 into two databases: hashstring.db: hashstring table. Each row is a (unique, primary key) SHA512 hash to text (also unique). Both fields are indexed.

[embedding_model_name].db: embedding table. Each row is a (unique, primary key) SHA512 hash to a 1-dim numpy (float32) vector, which we serialize to the table as bytes.

Developer instructions

pre-commit install
pip install -e .
pytest

TODO

  • Update pyproject.toml
  • Add tests
  • Consider other hash functions?
  • float32 and float64 support
  • Consider adding optional joblib for caching?
  • Different ways of computing embeddings (e.g. using an API) rather than locally
  • S3 backup and/or
  • WAL
  • LiteStream
  • Retry on write errors
  • Other DB backends
  • Best practices: Give specific OpenAI version number.
  • RocksDB / RocksDB-cloud?
  • Include model name in DB for sanity check on slugify.
  • Validate on numpy array size.
  • Validate BLOB size for hashes.
  • Add optional libraries like openai and sentence-transformers
    • Also consider other embedding providers, e.g. cohere
    • And libs just for devs
  • Consider the max_length of each text to embed, warn if we exceed
  • pdoc3 and/or sphinx
  • Normalize embeddings by default, but add option
  • Option to return torch tensors
  • Consider reusing the same DB connection instead of creating it from scratch every time.
  • Add batch_size parameter?
  • Test check for collisions
  • Use logging not verbose output.
  • Rewrite using classes.
  • Fix dependabot.
  • Don't keep re-using DB session, store it in the class or global
  • DRY.
  • Suggest to use versioned OpenAI model
  • Add device to sentence transformers
  • Allow fast_sentence_transformers
  • Test that things work if there are duplicate strings
  • Remove DBs after test
  • Do we have to have nested embedding.embedding for all calls?
  • codecov and code quality shields

Metadata

Release files for embeddingcache 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for embeddingcache 0.1.0
File Size Uploaded
embeddingcache-0.1.0.tar.gz 11.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for embeddingcache 0.1.0
File Interpreter ABI Platform
embeddingcache-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.3 kB

Release files / embeddingcache-0.1.0.tar.gz

Download URL embeddingcache-0.1.0.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a1e617b220d8fcdf0dbc391ec4575d5b7debe6b7659eadbc6800dd9491d54e06
BLAKE2b-256 checksum
How to use checksums
339494db8fd64a06d5f0894c6cc66447d4ffcfda30f1b5e0bd653731e65eb569
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release files / embeddingcache-0.1.0-py3-none-any.whl

Download URL embeddingcache-0.1.0-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fb7a2fab718d9d1f9780441879b147986129a9f04cf322713c03ab3a7c893346
BLAKE2b-256 checksum
How to use checksums
c5be4475025e728c00ab4c22c12d71a8d08c8e1bd7d58121a54ff38e93adad9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page