Skip to main content

colbert-server

uv tool python 3.13+ license MIT PyPI Downloads CI dataset API Flask

CLI tooling to fetch the ColBERT Wikipedia 2017 dataset and run a lightweight Flask API on top of the ColBERT v2 searcher.

$> I wrote this because the ColBERT server is down and I couldn't try one of the tutorial from DSPy.
$> I only tested this on my macbook, please open an issue if you have problems or feature requests.

Features

  • One-command install and execution via uv tool.
  • Automatically downloads either ready-to-serve indexes/collection or the original archives.
  • Optional archive extraction flow for offline usage.
  • Caches ColBERT queries for fast, repeated lookups.
  • Exposes a simple /api/search endpoint for programmatic access.
  • Ships with a doctor command that validates Torch/FAISS installs before the 13 GB download.

Installation

uv tool install colbert-server

This registers a colbert-server executable in your uv toolchain.

Check the installed version at any time:

colbert-server --version

Run the built-in diagnostic command to verify torch/faiss before downloading the index:

colbert-server doctor

Or if you just want to run it:

uvx run colbert-server --help

Running the server

colbert-server serve --from-cache

This downloads only the collection/ and indexes/ folders from nielsgl/colbert-wiki2017, resolves the on-disk paths from the Hugging Face cache, and starts the server.

Provide existing local assets

colbert-server serve \
  --index-root /path/to/indexes \
  --index-name wiki17.nbits.local \
  --collection-path /path/to/collection/wiki.abstracts.2017/collection.tsv

Use this mode when you already have ColBERT indexes and a collection TSV locally.

Download archives first, then serve

colbert-server serve \
  --download-archives /tmp/wiki-assets \
  --extract \
  --port 8894

This fetches the archive files into /tmp/wiki-assets/archives, extracts them into /tmp/wiki-assets, auto-detects the resulting layout (e.g. wiki17.nbits.local), and starts the Flask server on port 8894.

API usage

Once running, the server listens on the host/port provided (defaults to 0.0.0.0:8893) and serves ColBERT search results via:

GET /api/search?query=<text>&k=<top-k>

Example request:

http://127.0.0.1:8893/api/search?query=halloween+movie&k=3

The JSON response includes the ranked passages, their scores, and normalized probabilities.

Managing dataset archives only

If you just want the raw archive bundles in a local directory:

colbert-server download-archives ./downloads --extract

Add --extract-to /desired/path to unpack into a different directory. You can later reuse the extracted paths with the serve command’s --index-root and --collection-path flags.

Alternative / Manual Method

In case you don't want to use the script / uv tool you can set it up as follows:

  1. Add the dependencies to your project: uv add colbert-ai flask faiss-cpu and uv add torch --index pytorch-cpu (the repo already provides the PyTorch CPU index in pyproject.toml).
  2. Download the files (both the index and the collection) from the archives directory from the HuggingFace dataset and unzip them.
  3. Copy the standalone.py script from this repository and edit the INDEX_ROOT and COLLECTION_PATH variables.
  4. Run the server with uv run standalone.py and <tada.wav>

Development tips

  • Requires Python 3.13+ (or adjust the pyproject.toml requirement to match your interpreter).
  • Run colbert-server --help or colbert-server serve --help to inspect available options.
  • The dataset helpers live under colbert_server/data.py; server configuration sits in colbert_server/server.py.
  • GitHub Actions runs lint/tests on every push across Ubuntu, macOS, and Windows; see .github/workflows/ci.yml for details.
  • Publishing is handled via the Manual Release workflow. Trigger it from the Actions tab, choose the desired bump (patch/minor/major), and it will bump the version, run tests/builds, push the commit, and create the vX.Y.Z tag. Create a RELEASE_TOKEN secret with repo scope so the workflow can push back to main.
  • The CLI pings PyPI at most once per day and nudges you if a newer version exists. Set COLBERT_SERVER_DISABLE_UPDATE_CHECK=1 to disable this behaviour.
  • The tag automatically kicks off the Publish workflow, which uploads the artifacts to PyPI via trusted publishing. After that completes the Verify Release workflow installs the new version on Ubuntu, macOS, and Windows and runs colbert-server --version/doctor to ensure the artifact works cross-platform.

Happy searching! 🧠📚

Metadata

Release files for colbert-server 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for colbert-server 0.3.1
File Size Uploaded Provenance
colbert_server-0.3.1.tar.gz 10.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for colbert-server 0.3.1
File Interpreter ABI Platform
colbert_server-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 23.3 kB

Release files / colbert_server-0.3.1.tar.gz

Download URL colbert_server-0.3.1.tar.gz
Size 10.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6fd83ec4837bf36b4342a9a7d891780fc9fc0d9f1c575c29024f43838a5cb4d5
BLAKE2b-256 checksum
How to use checksums
0f41bcd2cd73566ba564c0f25c3c62dfa8b21c8aa7645490a7c4be64cefb6307
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.

Transparency log

Release files / colbert_server-0.3.1-py3-none-any.whl

Download URL colbert_server-0.3.1-py3-none-any.whl
Size 12.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e1955d1f92c7fd4d75d7178efa4fcbd69807cd95092f04cb697f5fe6f18ea129
BLAKE2b-256 checksum
How to use checksums
3ebbb410082c64ec230d7dad40a069c0202042b05559ea7ff282433f55585a30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.

Transparency log

Security for colbert-server 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for colbert_server-0.3.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page