Skip to main content

Distributed annotation worker for embedkombinat

Project description

embedkombinat / annotator

Distributed annotation worker for embedkombinat

Run local LLM inference on your hardware to label query-document pairs for open embedding model training.

CI Python 3.12+ License: Apache 2.0 PyPI version Docker Ruff mypy: strict


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

  1. Authenticate via GitHub Device Flow — the CLI prints a short code, you enter it at https://github.com/login/device on any browser (laptop, phone, anywhere). Works on remote SSH'd hosts (Runpod, Lambda, EC2) and inside Docker without any port forwarding.
  2. Detect hardware — NVIDIA GPU, Apple Silicon, or CPU-only
  3. Download & load the best-fit LLM for your hardware from HuggingFace
  4. 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.

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

embedkombinat_annotator-0.3.0.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

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

embedkombinat_annotator-0.3.0-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file embedkombinat_annotator-0.3.0.tar.gz.

File metadata

  • Download URL: embedkombinat_annotator-0.3.0.tar.gz
  • Upload date:
  • Size: 34.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for embedkombinat_annotator-0.3.0.tar.gz
Algorithm Hash digest
SHA256 28c7bae6e7bad51fa59ce1147b3ecff2613eb387a209c61bbedb1c6c98c0dad7
MD5 d332c0f23016bf2f32d38df20d54e0b0
BLAKE2b-256 7a33dc1ec8f74fc6d6da8b785ca778eacccd93ef4d9e04dd2fece9ee72028969

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedkombinat_annotator-0.3.0.tar.gz:

Publisher: publish.yml on embedkombinat/annotator

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

File details

Details for the file embedkombinat_annotator-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for embedkombinat_annotator-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 49bc6b6f2135c4b69ac39bd49c54ac49b80292c85630bc33c470b4e02daab6e9
MD5 8f0b7bf06140b9f60b14c559b96983cd
BLAKE2b-256 0e63760ee32435e8e349a9a20157ebf2fc87a6d0769e6dc2797b129e6b537064

See more details on using hashes here.

Provenance

The following attestation bundles were made for embedkombinat_annotator-0.3.0-py3-none-any.whl:

Publisher: publish.yml on embedkombinat/annotator

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