Python binding for pgvecto.rs
Project description
Python bindings for pgvector.rs
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_distancenegative_dot_product_distancenegative_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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcb4d66289cbda87e2a469101e56501b4f8fe08324a23fa5b4b86cf8ddc8cbd6
|
|
| MD5 |
f8853a58dd20dbaefc3be0dd2654c47e
|
|
| BLAKE2b-256 |
b060a5e6ff43fd3aeab21467e4a460aa92aba16e09d0bc5f3ebd7ed9bd5a73dc
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73008eebd53b27683d754b00686a582c7cdad51b3275fd827a0865e820744558
|
|
| MD5 |
2d04f1cb3d8af5493b6cd7ee980bbc1b
|
|
| BLAKE2b-256 |
ad87161843c768e6a0e91cd9f64ebce88b8edb4f1b0f188e15af80da3c6f9e3f
|