Skip to main content

A unified interface for vector databases

Project description

affine

badge

Affine is a Python library for providing a uniform and structured interface to various backing vector databases and approximate nearest neighbor libraries. It allows simple dataclass-like objects to describe collections together with a high-level query syntax for doing filtered vector search.

For vector databases, it currently supports:

  • qdrant
  • weaviate
  • pinecone

For local mode, the following approximate nearest neighbor libraries are supported:

  • FAISS
  • annoy
  • pynndescent
  • scikit-learn KDTree
  • naive/NumPy

Note: this project is very similar to vectordb-orm, which looks to be no longer maintained.

Installation

pip install affine-vectordb
# or `pip install "affine-vectordb[qdrant]"` for qdrant support
# `pip install "affine-vectordb[weaviate]"` for weaviate support
# `pip install "affine-vectordb[pinecone]"` for pinecone support

Basic Usage

from affine import Collection, Vector, Filter, Query

# Define a collection
class MyCollection(Collection):
    vec: Vector[3] # declare a 3-dimensional vector

    # support for additional fields for filtering
    a: int
    b: str

db = LocalEngine()

# Insert vectors
db.insert(MyCollection(vec=[0.1, 0.0, -0.5], a=1, b="foo"))
db.insert(MyCollection(vec=[1.3, 2.1, 3.6], a=2, b="bar"))
db.insert(MyCollection(vec=[-0.1, 0.2, 0.3], a=3, b="foo"))

# Query vectors
result: list[MyCollection] = (
    db.query(MyCollection)
    .filter(MyCollection.b == "foo")
    .similarity([2.8, 1.8, -4.5])
    .limit(1)
)

Engines

A fundamental notion of affine are Engine classes. All such classes conform to the same API for interchangeabillity (with the exception of a few engine-specific restrictions which are be mentioned below). There are two broad types of engines

  1. LocalEngine: this does nearest neighbor search on the executing machine, and supports a variety of libraries for the backing nearest neighborsearch (these are called the backend of the local engine).

  2. Vector database engines: these are engines that connect to a vector database service, such as QDrant, Weaviate, or Pinecone.

Vector Databases

The currently supported vector databases are:

Database Class Constructor arguments Notes
Qdrant affine.engine.QdrantEngine host: str hostname to use

port: int port to use
-
Weaviate affine.engine.WeaviateEngine host: str hostname to use

port: int port to use
-
Pinecone affine.engine.PineconeEngine api_key: Union[str, None] pinecone API key. if not provided, it will be read from the environment variable PINECONE_API_KEY.

spec: Union[ServerlessSpec, PodSpec, None] the PodSpec or ServerlessSpec object. If not provided, aServerlessSpec will be created from the environment variables PINECONE_CLOUD and PINECONE_REGION.
the Pinecone engine has the restriction that every collection must contain exactly one vector attribute.

Approximate Nearest Neighbor Libraries

The LocalEngine class provides an interface for doing nearest neighbor search on the executing machine, supporting a variety of libraries for the backing nearest neighborsearch. Which one is specified by the backend argument to the constructor. For example, to use annoy:

from affine.engine.local import LocalEngine, AnnoyBackend

db = LocalEngine(backend=AnnoyBackend(n_tress=10))

The options and settings for the various supported backends are as follows:

Library Class Constructor arguments Notes
naive/numpy affine.engine.local.NumPyBackend - -
scikit-learn KDTree affine.engine.local.KDTreeBackend keyword arguments that get passed directly to sklearn.neighbors.KDTree -
annoy affine.engine.local.AnnoyBackend n_trees: int number of trees to use
n_jobs: int defaults to -1
-
FAISS affine.engine.local.FAISSBackend index_factory_str: str -
PyNNDescent affine.engine.local.PyNNDescentBackend keyword arguments that get passed directly to pynndescent.NNDescent -

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

affine_vectordb-0.1.0.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

affine_vectordb-0.1.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file affine_vectordb-0.1.0.tar.gz.

File metadata

  • Download URL: affine_vectordb-0.1.0.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for affine_vectordb-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c99c24e3ba7744c6c8e28452f0fe2fd739b7ced80ab3c37732d979f0239a5862
MD5 853c7a3610973744cc42b317abb5ce09
BLAKE2b-256 5b6959dcf805e7bcff6ea0f4c2185f43932133e245ae505f974307a8301af923

See more details on using hashes here.

Provenance

The following attestation bundles were made for affine_vectordb-0.1.0.tar.gz:

Publisher: build-and-publish.yml on ekorman/affine

Attestations:

File details

Details for the file affine_vectordb-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for affine_vectordb-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3fd5ab649730c790ca83660e640de6827be456fc4522dd397f1feddf38d27afd
MD5 53d3b2296d6a2d74919936699f1ff9c3
BLAKE2b-256 f5c955c6def2ec286136690ad9744b4f9b33f609d53df74a1b434179a6e0f2af

See more details on using hashes here.

Provenance

The following attestation bundles were made for affine_vectordb-0.1.0-py3-none-any.whl:

Publisher: build-and-publish.yml on ekorman/affine

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page