Python SDK for the PaveDB /v1 API
Project description
PaveDB Python SDK
Python SDK package for the PaveDB /v1 API.
Use pavedb-sdk when your code should talk to PaveDB from Python.
There are three runtime paths:
- Connect to a PaveDB server over HTTP.
- Install
pavedbalongside the SDK and use the sameClient/Collectionhandle API with a local embedded engine. - Use ephemeral local mode for temporary in-process stores during tests, notebooks, and short-lived experiments.
To run your own server instance, use the PaveDB core repository: GitLab / GitHub. The core repository remains the source of truth for the OpenAPI contract.
SDK source lives on GitLab and GitHub.
Install
pip install pavedb-sdk
SDK 0.1.x targets the PaveDB /v1 API. SDK package versions are
independent from PaveDB core release versions; use pavesdk.__version__
for the SDK release and pavesdk.PAVEDB_API_PREFIX for the wire API.
For local embedded/persisted mode:
pip install pavedb-sdk pavedb
Local Package Build
Build the local PyPI package artifacts with GNU Make:
gmake package
That creates the source distribution (.tar.gz) and wheel in dist/,
checks them with Twine, and copies them to artifacts/.
Upload targets are explicit and do not infer release channels from the version:
gmake pypitest-push
gmake pypi-push
Runnable HTTP examples are installed with the package:
python -m pavesdk.examples.http_search
python -m pavesdk.examples.observability
The SDK checkout also includes demo/20k_leagues.txt, which the examples use
via a hardcoded relative path.
HTTP Client
from pavesdk.client import connect
db = connect(
"http://localhost:8086",
api_key="super-sekret",
tenant="demo",
)
books = db.collection("books")
hits = books.search("captain nemo", k=3)
hits
[
{
"id": "note-1:0000",
"score": 0.86,
"text": "Captain Nemo commands the Nautilus.",
"meta": {"docid": "note-1", "kind": "note"},
},
{
"id": "note-2:0000",
"score": 0.73,
"text": "The Nautilus dives beneath the ice.",
"meta": {"docid": "note-2", "kind": "note"},
},
]
for hit in hits:
print(hit["score"], hit["meta"]["docid"], hit["text"][:80])
0.86 note-1 Captain Nemo commands the Nautilus.
0.73 note-2 The Nautilus dives beneath the ice.
connect("http://...") and connect("https://...") create an HttpClient.
Bare paths are local targets and require pavedb to be installed.
Collections
The API is handle-based: pick a collection once, then call methods on it.
from pavesdk.client import connect
db = connect("http://localhost:8086", api_key="super-sekret")
books = db.create_collection("books", tenant="demo")
books.add(
"Captain Nemo commands the Nautilus.",
docid="note-1",
metadata={"kind": "note"},
)
books.add_many([
("The Nautilus dives beneath the ice.", "note-2", None),
{
"text": "Nemo studies ocean currents.",
"docid": "note-3",
"metadata": {"kind": "note"},
},
])
matches = books.search(
"submarine captain",
k=5,
filters={"kind": "note"},
)
matches
[
{
"id": "note-1:0000",
"score": 0.81,
"text": "Captain Nemo commands the Nautilus.",
"meta": {"docid": "note-1", "kind": "note"},
},
{
"id": "note-3:0000",
"score": 0.69,
"text": "Nemo studies ocean currents.",
"meta": {"docid": "note-3", "kind": "note"},
},
]
Observability
Searches are logged by PaveDB. Use query inspection to see what ran, replay it against current data, and inspect the source chunks behind a document.
from pavesdk.client import connect
db = connect("http://localhost:8086", api_key="super-sekret")
books = db.collection("books", tenant="demo")
books.search("captain nemo", k=3)
latest = books.queries(limit=1)[0]
latest
{
"query_id": "0d4f5a1b-9e4b-41c7-8b3f-8f6b5de3e74a",
"tenant": "demo",
"collection": "books",
"query_text": "captain nemo",
"k": 3,
"filters": None,
"result_count": 2,
"latency_ms": 12.4,
"created_at": "2026-06-20T18:42:16.153201Z",
}
query = books.get_query(latest["query_id"])
query
{
"query_id": "0d4f5a1b-9e4b-41c7-8b3f-8f6b5de3e74a",
"tenant": "demo",
"collection": "books",
"query_text": "captain nemo",
"k": 3,
"filters": None,
"result_ids": ["note-1:0000", "note-2:0000"],
"result_count": 2,
"latency_ms": 12.4,
}
replayed = books.replay(query["query_id"])
replayed
[
{
"id": "note-1:0000",
"score": 0.86,
"text": "Captain Nemo commands the Nautilus.",
"meta": {"docid": "note-1", "kind": "note"},
},
{
"id": "note-2:0000",
"score": 0.73,
"text": "The Nautilus dives beneath the ice.",
"meta": {"docid": "note-2", "kind": "note"},
},
]
docid = replayed[0]["meta"]["docid"]
chunks = books.list_chunks(docid)
chunks
[
{
"rid": "note-1:0000",
"docid": "note-1",
"chunk": 0,
"text": "Captain Nemo commands the Nautilus.",
"metadata": {"kind": "note"},
}
]
chunk = books.get_chunk(chunks[0]["rid"])
chunk
{
"rid": "note-1:0000",
"docid": "note-1",
"chunk": 0,
"text": "Captain Nemo commands the Nautilus.",
"metadata": {"kind": "note"},
}
content = books.get_chunk_content(chunk["rid"])
content
{
"content": b"Captain Nemo commands the Nautilus.",
"content_type": "text/plain; charset=utf-8",
}
Local Mode
With pavedb installed, the same API can use a local persisted store:
from pavesdk.client import connect
with connect("./data", tenant="demo") as db:
books = db.create_collection("books")
books.add("Captain Nemo commands the Nautilus.", docid="note-1")
print(books.search("captain", k=3))
If pavedb is not installed, local targets raise LocalClientUnavailable.
Archives
from pathlib import Path
from pavesdk.client import connect
with connect("http://localhost:8086", api_key="super-sekret") as db:
archive_bytes = db.dump_archive()
Path("pavedb-data.zip").write_bytes(archive_bytes)
saved_path = db.dump_archive("pavedb-data.zip")
db.restore_archive(Path(saved_path).read_bytes())
Project details
Release history Release notifications | RSS feed
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 pavedb_sdk-0.1.1.tar.gz.
File metadata
- Download URL: pavedb_sdk-0.1.1.tar.gz
- Upload date:
- Size: 257.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8481789a1b15c0c702777a921431b72aee9832a6f23448c57cfe6cd861e0fc6e
|
|
| MD5 |
ff28eb938442643554ada2c8fc98ff65
|
|
| BLAKE2b-256 |
3f76dc1867db27d7db8f26da4978883d3fab23e4ef293bf5bf2dbfddf79953c7
|
File details
Details for the file pavedb_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pavedb_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94bb872da9e298486cd5dfb5c0728ecbc58797a00dda1555e7cd67b1992baf0a
|
|
| MD5 |
958f0d7064af57e487f6a612f86a74cb
|
|
| BLAKE2b-256 |
8077e3c94e6c695edf73f9c69a203ec4dc05ea16a405a0d36cdde52291d91e41
|