embedkombinat / annotator
Distributed annotation worker for embedkombinat
Run local LLM inference on your hardware to label query-document pairs for open embedding model training.
Website | Getting Started | Models | Live Leaderboard | Contributing
What is this?
The annotator is a headless labeling worker that runs on contributor hardware. It claims batches of unlabeled (query, document) pairs from the kombinat server, scores relevance using a local LLM, and submits annotations back — all without sending your data to any third-party API.
┌─────────────┐ claim batch ┌─────────────┐
│ kombinat │ ◄────────────────── │ annotator │
│ server │ ──────────────────► │ (your hw) │
│ │ (query, doc) pairs│ │
│ │ │ ┌────────┐ │
│ │ submit labels │ │ Local │ │
│ │ ◄────────────────── │ │ LLM │ │
└─────────────┘ │ └────────┘ │
└─────────────┘
How it works
- Authenticate via GitHub Device Flow — the CLI prints a short code, you enter it at
https://github.com/login/deviceon any browser (laptop, phone, anywhere). Works on remote SSH'd hosts (Runpod, Lambda, EC2) and inside Docker without any port forwarding. - Detect hardware — NVIDIA GPU, Apple Silicon, or CPU-only
- Download & load the best-fit LLM for your hardware from HuggingFace
- Claim → Label → Submit in streaming micro-batches (lose at most one chunk on interrupt)
Each pair gets a relevance score from 0 (not relevant) to 3 (highly relevant) with a short reasoning.
Getting Started
Install
# NVIDIA GPU
pip install embedkombinat-annotator[vllm]
# Apple Silicon (M1/M2/M3/M4)
pip install embedkombinat-annotator[mlx]
# CPU-only
pip install embedkombinat-annotator[cpu]
Or run without installing:
uvx --from "embedkombinat-annotator[mlx]" annotator run
Authenticate
annotator login
Run
# Starts labeling (will prompt login if not authenticated)
annotator run
Docker (NVIDIA)
docker compose up
Supported Models
The annotator auto-selects the best model for your hardware. You can override with --model and --backend.
NVIDIA GPU (vLLM)
| Model | Quantization | VRAM | Download |
|---|---|---|---|
Qwen/Qwen2.5-7B-Instruct |
— | 18 GB | 14 GB |
Qwen/Qwen2.5-7B-Instruct-AWQ |
AWQ | 8 GB | 4.5 GB |
Qwen/Qwen2.5-3B-Instruct-AWQ |
AWQ | 4 GB | 2 GB |
Apple Silicon (MLX)
| Model | Quantization | Memory | Download |
|---|---|---|---|
mlx-community/Qwen2.5-7B-Instruct-4bit |
4-bit | 6 GB | 4 GB |
mlx-community/Qwen2.5-3B-Instruct-4bit |
4-bit | 4 GB | 2 GB |
mlx-community/Qwen2.5-1.5B-Instruct-4bit |
4-bit | 2 GB | 1 GB |
CPU (llama.cpp)
| Model | Quantization | Download |
|---|---|---|
Qwen/Qwen2.5-3B-Instruct-GGUF |
Q4_K_M | 2 GB |
Qwen/Qwen2.5-1.5B-Instruct-GGUF |
Q4_K_M | 1 GB |
CLI Reference
Usage: annotator [COMMAND] [OPTIONS]
Commands:
run Start the labeling loop (default)
login Authenticate via GitHub
status Show contributor profile and stats
logout Remove stored credentials
Options (run):
--batch-size INT Pairs per batch (default: 100, max: 500)
--model TEXT Override model ID
--quantization TEXT Override quantization
--backend [vllm|mlx|cpu] Override backend
--gpu-memory-utilization FLOAT GPU fraction (default: 0.9)
--dry-run Resolve hardware & model, then exit
Leaderboard
See the live leaderboard at embedkombinat.github.io.
Contributing
See CONTRIBUTING.md for development setup and workflow. The short version:
git clone https://github.com/embedkombinat/annotator.git
cd annotator
uv sync --all-extras
uv run ruff check . && uv run ruff format --check .
uv run mypy annotator/
uv run pytest -v
License
Apache 2.0 — see LICENSE for details.
Built with care by the embedkombinat community.
Metadata
Release files for embedkombinat-annotator 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| embedkombinat_annotator-0.3.0.tar.gz | 34.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| embedkombinat_annotator-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.2 kB
Release files / embedkombinat_annotator-0.3.0.tar.gz
| Download URL | embedkombinat_annotator-0.3.0.tar.gz |
|---|---|
| Size | 34.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28c7bae6e7bad51fa59ce1147b3ecff2613eb387a209c61bbedb1c6c98c0dad7
|
|
BLAKE2b-256 checksum How to use checksums |
7a33dc1ec8f74fc6d6da8b785ca778eacccd93ef4d9e04dd2fece9ee72028969
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 17, 2026.
Transparency logRelease files / embedkombinat_annotator-0.3.0-py3-none-any.whl
| Download URL | embedkombinat_annotator-0.3.0-py3-none-any.whl |
|---|---|
| Size | 26.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
49bc6b6f2135c4b69ac39bd49c54ac49b80292c85630bc33c470b4e02daab6e9
|
|
BLAKE2b-256 checksum How to use checksums |
0e63760ee32435e8e349a9a20157ebf2fc87a6d0769e6dc2797b129e6b537064
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 May 17, 2026.
Transparency log