Skip to main content

Adds pgvector support to TortoiseORM.

Project description

Tortoise Embeddings

Tortoise Embeddings adds pgvector support to TortoiseORM, enabling efficient vector storage and similarity search in PostgreSQL.

Features

  • Four Vector Field Types:
    • VectorField: Supports vector type.
    • HalfVectorField: Supports halfvec type.
    • BinaryVector: Supports bit type.
    • SparseVector: Supports sparsevec type.
  • Aerich Migration Support: Automatically includes vector-based types from your models into the migration scripts.
  • Similarity Operations:
    • Custom Functions: L2Distance, CosineDistance, InnerProduct, L1Distance, HammingDistance, JaccardDistance.
    • Custom Filters: Convenient filter suffixes - __l2, __cosine, __inner, __l1, __hamming, and __jaccard.
  • Works with numpy arrays and standard Python types.

Installation

pip install tortoise-embeddings

Make sure you have pgvector installed in your PostgreSQL database.

Usage

Define Your Models

from tortoise.models import Model
from tortoise.fields import IntField
from tortoise_embeddings import VectorField, HalfVectorField, BinaryVectorField, SparseVectorField

class Item(Model):
    id = IntField(primary_key=True)
    # Define a vector field with 3 dimensions
    embedding = VectorField(dimensions=3)
    # Support for other pgvector types
    half_embedding = HalfVectorField(dimensions=3)
    binary_embedding = BinaryVectorField(dimensions=4)
    sparse_embedding = SparseVectorField(dimensions=3)

Initialize with Custom Client

To enable binary codecs and migration support, use the provided AsyncpgDBClient:

from tortoise import Tortoise
import tortoise.backends.asyncpg
from tortoise_embeddings import VectorAsyncpgDBClient

# Override the client class for the asyncpg backend
tortoise.backends.asyncpg.client_class = VectorAsyncpgDBClient

async def init():
    await Tortoise.init(
        db_url='postgres://user:pass@host:port/db',
        modules={'models': ['your_models_module']}
    )
    await Tortoise.generate_schemas()

Similarity Search

Using Custom Filters (Recommended)

import numpy

target_vector = numpy.array([1.0, 0.0, 0.0])

# Find items where L2 distance is less than 0.5
items = await Item.filter(embedding__l2=(target_vector, 0.5))

# Find items where Cosine distance is less than 0.1
items = await Item.filter(embedding__cosine=(target_vector, 0.1))

Using Custom Functions

from tortoise_embeddings.similarity import L2Distance

target_vector = [1.0, 0.0, 0.0]

# Annotate results with distance and order by it
items = await Item.all().annotate(
    dist=L2Distance(Item._meta.fields_map['embedding'], target_vector, alias="dist")
).order_by("dist")

for item in items:
    print(f"Item {item.id} has distance {item.dist}")

Aerich Migrations

If you use aerich, simply use the AerichVectorPostgresDDL to ensure the vector extension is created:

# In your project configuration
from tortoise_embeddings import AerichVectorPostgresDDL
# This is usually handled automatically if you use the VectorAsyncpgDBClient

Development setup

Set the following environment variables:

Variable Description How to get?
PSQL_CONNECTION_STRING A connection string to a PostgreSQL database. postgres://user:password@host:port/database
GEMINI_API_KEY An API key to Google GenAI. (optional) Go to aistudio.google.com and create an API key.

Dependencies

  • tortoise-orm>=0.25.0,<1.0.0
  • aerich>=0.9.0
  • asyncpg>=0.31.0
  • pgvector>=0.4.0
  • numpy>=2.4.0

Running Tests

Tests require a PostgreSQL database with the pgvector extension.

export PSQL_CONNECTION_STRING="postgres://user:password@host:port/database"
export GEMINI_API_KEY="your_api_key" # Optional for Gemini integration tests
pytest tests/

Publishing

Execute the following command to generate the distributable files.

python -m build

License

Copyright 2026 Kotz

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

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

tortoise_embeddings-1.0.0.tar.gz (27.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tortoise_embeddings-1.0.0-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file tortoise_embeddings-1.0.0.tar.gz.

File metadata

  • Download URL: tortoise_embeddings-1.0.0.tar.gz
  • Upload date:
  • Size: 27.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tortoise_embeddings-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ad160e01bda5d12dd6d2226fd8aa1d6eb07402be80214b181983139c5566d38c
MD5 4ab29d562bd0ce98bf0269a7ed29f134
BLAKE2b-256 0a3c98fe65fffdad27d8e7bb7f0a8876c2f760b3d25abbb6271583b3af6afc48

See more details on using hashes here.

Provenance

The following attestation bundles were made for tortoise_embeddings-1.0.0.tar.gz:

Publisher: release.yml on Kaoticz/tortoise-embeddings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tortoise_embeddings-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tortoise_embeddings-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6dfd73334e5e6024193a8f89be6e955c5e1c1acf420708be30f09c13e0314f16
MD5 651e75e1a46412689da635fc0c514cbb
BLAKE2b-256 426375e921413757c331b552daf33f9675192b07e91600d57992c7eccf1b4aac

See more details on using hashes here.

Provenance

The following attestation bundles were made for tortoise_embeddings-1.0.0-py3-none-any.whl:

Publisher: release.yml on Kaoticz/tortoise-embeddings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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