Skip to main content

Run ColBERT Wikipedia server

Project description

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

Use data from the Hugging Face cache (recommended quick start)

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! 🧠📚

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

colbert_server-0.3.1.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

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

colbert_server-0.3.1-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file colbert_server-0.3.1.tar.gz.

File metadata

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

File hashes

Hashes for colbert_server-0.3.1.tar.gz
Algorithm Hash digest
SHA256 6fd83ec4837bf36b4342a9a7d891780fc9fc0d9f1c575c29024f43838a5cb4d5
MD5 3d62154c9e15b1b4ffd675a972147a6d
BLAKE2b-256 0f41bcd2cd73566ba564c0f25c3c62dfa8b21c8aa7645490a7c4be64cefb6307

See more details on using hashes here.

Provenance

The following attestation bundles were made for colbert_server-0.3.1.tar.gz:

Publisher: publish.yml on nielsgl/colbert-server

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

File details

Details for the file colbert_server-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: colbert_server-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for colbert_server-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e1955d1f92c7fd4d75d7178efa4fcbd69807cd95092f04cb697f5fe6f18ea129
MD5 4cb2a141d3660fdb68140ee2169ecdcd
BLAKE2b-256 3ebbb410082c64ec230d7dad40a069c0202042b05559ea7ff282433f55585a30

See more details on using hashes here.

Provenance

The following attestation bundles were made for colbert_server-0.3.1-py3-none-any.whl:

Publisher: publish.yml on nielsgl/colbert-server

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