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
- Dashboard: http://localhost:3000
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 identifiervector: List[float]: Vector coordinatesmetadata: Dict[str, Any]: Arbitrary metadata
Collection
name: str: Collection namedimension: int: Vector dimensiondistance: DistanceMetric: Distance metric
SearchResult
id: str: Point IDscore: float: Similarity scoremetadata: Dict[str, Any]: Point metadata
ApiKeyInfo
id: int: Key idname: str: Display namekey_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: int—keyis the raw secret (returned only on create).
Exceptions
VectorDBError: Base exceptionCollectionNotFoundError: 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29fdd9e1a447872060be9a3265b11a33414a48fe3114ab875871415ccd309a3a
|
|
| MD5 |
f03abb82e3a44bc8c6dac576b0966a87
|
|
| BLAKE2b-256 |
a1171753b86caa0b1a8cd93fe0ed873ab07afd5d63db6c046de7af302cf35c6a
|
File details
Details for the file ferres_db_python-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ferres_db_python-0.2.0-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1bd5a39f8def7f693438ad4acf3638fe523d8f61c42309907d4ed9034084c0c
|
|
| MD5 |
7a8ffc9438d47bcb639236c6960cd72c
|
|
| BLAKE2b-256 |
0c9d0db4f7e168a8f06f8802bd832f9d71e11a5378c3614e7273ae9420bf9229
|