Skip to main content

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 -

Metadata

Release files for affine-vectordb 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 affine-vectordb 0.1.0
File Size Uploaded
affine_vectordb-0.1.0.tar.gz 20.9 kB Details

Built distribution (wheel)

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

Total release size: 37.1 kB

Release files / affine_vectordb-0.1.0.tar.gz

Download URL affine_vectordb-0.1.0.tar.gz
Size 20.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c99c24e3ba7744c6c8e28452f0fe2fd739b7ced80ab3c37732d979f0239a5862
BLAKE2b-256 checksum
How to use checksums
5b6959dcf805e7bcff6ea0f4c2185f43932133e245ae505f974307a8301af923
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2024.

Transparency log

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

Download URL affine_vectordb-0.1.0-py3-none-any.whl
Size 16.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3fd5ab649730c790ca83660e640de6827be456fc4522dd397f1feddf38d27afd
BLAKE2b-256 checksum
How to use checksums
f5c955c6def2ec286136690ad9744b4f9b33f609d53df74a1b434179a6e0f2af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2024.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

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