Skip to main content

Python SDK for FerresDB vector database

Project description

FerresDB Python SDK

Python SDK for interacting with FerresDB vector database.

Installation

pip install ferres-db-python

Or install from source:

cd sdk/python
pip install -e .

Authentication

All data routes (collections, points, search, API keys) require authentication. Pass the API key when creating the client; the SDK sends the Authorization: Bearer <api_key> header on every request.

client = VectorDBClient(
    base_url="http://localhost:8080",
    api_key="ferres_sk_...",  # required for protected routes
)

Without api_key, the server will respond with 401 on protected routes.

Running FerresDB with Docker

To use the SDK against a real FerresDB instance, you can run the official images.

Pull images

docker pull ferresdb/ferres-db-core
docker pull ferresdb/ferres-db-frontend

Start the backend (API)

docker run -d \
  --name ferres-db-core \
  -p 8080:8080 \
  -e PORT=8080 \
  -e STORAGE_PATH=/data \
  -e FERRESDB_API_KEYS=ferres_sk_your_key_here \
  -v ferres-data:/data \
  ferresdb/ferres-db-core

Start the frontend (dashboard)

docker run -d \
  --name ferres-db-frontend \
  -p 3000:80 \
  -e VITE_API_BASE_URL=http://localhost:8080 \
  -e VITE_API_KEY=ferres_sk_your_key_here \
  ferresdb/ferres-db-frontend

Use the SDK

With the backend running at http://localhost:8080 and the same API key:

from vector_db_client import VectorDBClient

client = VectorDBClient(
    base_url="http://localhost:8080",
    api_key="ferres_sk_your_key_here",
)
# create collections, upsert, search, etc.

Quick Start

import asyncio
from vector_db_client import VectorDBClient, Point, DistanceMetric

async def main():
    # Create client (api_key required for collections, points, etc.)
    async with VectorDBClient(
        base_url="http://localhost:8080",
        api_key="ferres_sk_...",
    ) as client:
        # Create a collection
        collection = await client.create_collection(
            name="my-collection",
            dimension=128,
            distance=DistanceMetric.COSINE,
        )

        # Upsert points
        points = [
            Point(id="1", vector=[0.1, 0.2, 0.3], metadata={"text": "hello"}),
            Point(id="2", vector=[0.4, 0.5, 0.6], metadata={"text": "world"}),
        ]
        result = await client.upsert_points("my-collection", points)
        print(f"Upserted {result.upserted} points")

        # Search for similar vectors
        results = await client.search(
            collection="my-collection",
            vector=[0.1, 0.2, 0.3],
            limit=10,
        )
        for result in results:
            print(f"ID: {result.id}, Score: {result.score}")

asyncio.run(main())

Features

  • Type hints: Full type annotations for better IDE support
  • Automatic retry: Exponential backoff for transient failures
  • Structured logging: Uses structlog for better observability
  • Automatic batching: Large upsert operations are automatically split into batches
  • Async/await: Built on httpx for async operations

API Reference

VectorDBClient

__init__(base_url: str, api_key: str = None, timeout: int = 30)

Initialize the client.

  • base_url: Base URL of the FerresDB server (e.g., "http://localhost:8080")
  • api_key: Optional API key for authentication (recommended for all data routes)
  • timeout: Request timeout in seconds

create_collection(name: str, dimension: int, distance: DistanceMetric, enable_bm25: bool = None, bm25_text_field: str = None) -> Collection

Create a new collection. Use enable_bm25=True and bm25_text_field="content" for hybrid search.

list_collections() -> List[CollectionListItem]

List all collections.

list_keys() -> List[ApiKeyInfo]

List API keys (metadata only; requires Editor/Admin). Returns id, name, key_prefix, created_at.

create_key(name: str) -> CreateKeyResponse

Create a new API key. The raw key is returned only once; store it securely.

delete_key(key_id: int) -> None

Delete an API key by id (from list_keys or create_key).

delete_collection(name: str) -> None

Delete a collection.

upsert_points(collection: str, points: List[Point]) -> UpsertResult

Upsert points into a collection. Automatically batches if more than 1000 points.

delete_points(collection: str, ids: List[str]) -> None

Delete points by IDs.

search(collection: str, vector: List[float], limit: int = 10, filter: dict = None) -> List[SearchResult]

Search for similar vectors.

Models

Point

  • id: str: Point identifier
  • vector: List[float]: Vector coordinates
  • metadata: Dict[str, Any]: Arbitrary metadata

Collection

  • name: str: Collection name
  • dimension: int: Vector dimension
  • distance: DistanceMetric: Distance metric

SearchResult

  • id: str: Point ID
  • score: float: Similarity score
  • metadata: Dict[str, Any]: Point metadata

ApiKeyInfo

  • id: int: Key id
  • name: str: Display name
  • key_prefix: str: Prefix (raw key never returned in list)
  • created_at: int: Unix timestamp

CreateKeyResponse

  • id: int, name: str, key: str, key_prefix: str, created_at: intkey is the raw secret (returned only on create).

Exceptions

  • VectorDBError: Base exception
  • CollectionNotFoundError: Collection not found (404)
  • CollectionAlreadyExistsError: Collection already exists (409)
  • InvalidDimensionError: Invalid dimension (400)
  • InvalidPayloadError: Invalid payload (400)
  • InternalError: Internal server error (500)
  • ConnectionError: Connection error

Development

Install development dependencies:

pip install -e ".[dev]"

Run tests:

pytest

Format code:

black vector_db_client tests

Type checking:

mypy vector_db_client

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

ferres_db_python-0.2.0.tar.gz (25.6 kB view details)

Uploaded Source

Built Distribution

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

ferres_db_python-0.2.0-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file ferres_db_python-0.2.0.tar.gz.

File metadata

  • Download URL: ferres_db_python-0.2.0.tar.gz
  • Upload date:
  • Size: 25.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ferres_db_python-0.2.0.tar.gz
Algorithm Hash digest
SHA256 29fdd9e1a447872060be9a3265b11a33414a48fe3114ab875871415ccd309a3a
MD5 f03abb82e3a44bc8c6dac576b0966a87
BLAKE2b-256 a1171753b86caa0b1a8cd93fe0ed873ab07afd5d63db6c046de7af302cf35c6a

See more details on using hashes here.

File details

Details for the file ferres_db_python-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ferres_db_python-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c1bd5a39f8def7f693438ad4acf3638fe523d8f61c42309907d4ed9034084c0c
MD5 7a8ffc9438d47bcb639236c6960cd72c
BLAKE2b-256 0c9d0db4f7e168a8f06f8802bd832f9d71e11a5378c3614e7273ae9420bf9229

See more details on using hashes here.

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