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.
- 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/searchendpoint for programmatic access. - Ships with a
doctorcommand that validates Torch/FAISS installs before the 13 GB download.
uv tool install colbert-serverThis registers a colbert-server executable in your uv toolchain.
Check the installed version at any time:
colbert-server --versionRun the built-in diagnostic command to verify torch/faiss before downloading the index:
colbert-server doctorOr if you just want to run it:
uvx run colbert-server --helpcolbert-server serve --from-cacheThis 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.
colbert-server serve \
--index-root /path/to/indexes \
--index-name wiki17.nbits.local \
--collection-path /path/to/collection/wiki.abstracts.2017/collection.tsvUse this mode when you already have ColBERT indexes and a collection TSV locally.
colbert-server serve \
--download-archives /tmp/wiki-assets \
--extract \
--port 8894This 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.
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.
If you just want the raw archive bundles in a local directory:
colbert-server download-archives ./downloads --extractAdd --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.
In case you don't want to use the script / uv tool you can set it up as follows:
- Add the dependencies to your project:
uv add colbert-ai flask faiss-cpuanduv add torch --index pytorch-cpu(the repo already provides the PyTorch CPU index inpyproject.toml). - Download the files (both the index and the collection) from the
archivesdirectory from the HuggingFace dataset and unzip them. - Copy the
standalone.pyscript from this repository and edit theINDEX_ROOTandCOLLECTION_PATHvariables. - Run the server with
uv run standalone.pyand <tada.wav>
- Requires Python 3.13+ (or adjust the
pyproject.tomlrequirement to match your interpreter). - Run
colbert-server --helporcolbert-server serve --helpto inspect available options. - The dataset helpers live under
colbert_server/data.py; server configuration sits incolbert_server/server.py. - GitHub Actions runs lint/tests on every push across Ubuntu, macOS, and Windows; see
.github/workflows/ci.ymlfor details. - Publishing is handled via the
Manual Releaseworkflow. 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 thevX.Y.Ztag. Create aRELEASE_TOKENsecret withreposcope so the workflow can push back tomain. - The CLI pings PyPI at most once per day and nudges you if a newer version exists. Set
COLBERT_SERVER_DISABLE_UPDATE_CHECK=1to disable this behaviour. - The tag automatically kicks off the
Publishworkflow, which uploads the artifacts to PyPI via trusted publishing. After that completes theVerify Releaseworkflow installs the new version on Ubuntu, macOS, and Windows and runscolbert-server --version/doctorto ensure the artifact works cross-platform.
Happy searching! 🧠📚