Skip to main content

Python binding for pgvecto.rs

Project description

Python bindings for pgvector.rs

pdm-managed

Currently supports SQLAlchemy.

Usage

Install from PyPI:

pip install pgvecto_rs

See the usage examples:

SQLAlchemy

Install SQLAlchemy and psycopg3

pip install "psycopg[binary]" sqlalchemy

Then write your code. For example:

import numpy as np
from sqlalchemy import create_engine, select, insert, types
from sqlalchemy import Integer, String
from pgvector_rs.sqlalchemy import Vector
from sqlalchemy.orm import Session, DeclarativeBase, mapped_column, Mapped

URL = "postgresql+psycopg://<...>"

# Define the ORM model


class Base(DeclarativeBase):
    pass


class Document(Base):
    __tablename__ = "documents"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    text: Mapped[str] = mapped_column(String)
    embedding: Mapped[np.ndarray] = mapped_column(Vector(3))

    def __repr__(self) -> str:
        return f"{self.text}: {self.embedding}"


# Connect to the DB and create the table
engine = create_engine(URL)
Document.metadata.create_all(engine)

with Session(engine) as session:
    # Insert 3 rows into the table
    t1 = insert(Document).values(text="hello world", embedding=[1, 2, 3])
    t2 = insert(Document).values(text="hello postgres", embedding=[1, 2, 4])
    t3 = insert(Document).values(text="hello pgvecto.rs", embedding=[1, 3, 4])
    for t in [t1, t2, t3]:
        session.execute(t)
    session.commit()

    # Select the row "hello pgvecto.rs"
    stmt = select(Document).where(Document.text == "hello pgvecto.rs")
    target = session.scalar(stmt)

    # Select all the rows and sort them
    # by the squared_euclidean_distance to "hello pgvecto.rs"
    stmt = select(
        Document.text,
        Document.embedding.squared_euclidean_distance(target.embedding).label(
            "distance"
        ),
    ).order_by("distance")
    for doc in session.execute(stmt):
        print(doc)

# Drop the table
Document.metadata.drop_all(engine)

The output will be:

('hello pgvecto.rs', 0.0)
('hello postgres', 1.0)
('hello world', 2.0)

All the operators include:

  • squared_euclidean_distance
  • negative_dot_product_distance
  • negative_cosine_distance

Development

This package is managed by PDM.

Set up things:

pdm venv create
pdm use # select the venv inside the project path
pdm sync

Run lint:

pdm run format
pdm run check

Run test in current environment:

pdm run test

Test

Tox is used to test the package locally.

Run test in all environment:

tox run

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

pgvecto_rs-0.1.1.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

pgvecto_rs-0.1.1-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file pgvecto_rs-0.1.1.tar.gz.

File metadata

  • Download URL: pgvecto_rs-0.1.1.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.9.3 CPython/3.10.12

File hashes

Hashes for pgvecto_rs-0.1.1.tar.gz
Algorithm Hash digest
SHA256 bcb4d66289cbda87e2a469101e56501b4f8fe08324a23fa5b4b86cf8ddc8cbd6
MD5 f8853a58dd20dbaefc3be0dd2654c47e
BLAKE2b-256 b060a5e6ff43fd3aeab21467e4a460aa92aba16e09d0bc5f3ebd7ed9bd5a73dc

See more details on using hashes here.

File details

Details for the file pgvecto_rs-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pgvecto_rs-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.9.3 CPython/3.10.12

File hashes

Hashes for pgvecto_rs-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 73008eebd53b27683d754b00686a582c7cdad51b3275fd827a0865e820744558
MD5 2d04f1cb3d8af5493b6cd7ee980bbc1b
BLAKE2b-256 ad87161843c768e6a0e91cd9f64ebce88b8edb4f1b0f188e15af80da3c6f9e3f

See more details on using hashes here.

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