Skip to main content

Distributed annotation worker for EmbedKombinat

Project description

EmbedKombinat

Distributed annotation worker for EmbedKombinat

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

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


Website | Getting Started | Models | 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 OAuth device flow (works headless, over SSH, in Docker)
  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 test-ann[vllm]

# Apple Silicon (M1/M2/M3/M4)
pip install test-ann[mlx]

# CPU-only
pip install test-ann[cpu]

Or run without installing:

uvx --from "test-ann[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

Annotator Leaderboard

Top contributors by total annotations submitted. Updated in real-time by the kombinat server.

Rank Contributor Annotations Hardware Avg Score Streak
:trophy: @embedmaster3000 284,192 A100 80GB 0.97 42 days
:2nd_place_medal: @silicon_sarah 201,847 M4 Max 128GB 0.95 38 days
:3rd_place_medal: @gpu_goes_brrr 156,330 RTX 4090 0.94 29 days
4 @label_ninja 98,412 RTX 3090 0.93 15 days
5 @the_annotator 87,201 M3 Pro 36GB 0.92 21 days
6 @qwen_whisperer 64,553 RTX 4080 0.91 12 days
7 @cpu_chad 42,100 Ryzen 9 7950X 0.89 33 days
8 @macbook_warrior 38,771 M2 Ultra 192GB 0.93 8 days
9 @batch_queen 31,204 2x RTX 3080 0.90 17 days
10 @open_source_larry 24,889 M1 Pro 16GB 0.88 45 days

Want to see your name here? pip install test-ann[mlx] && annotator run

Contributing

# Clone and install dev dependencies
git clone https://github.com/embedkombinat/annotator.git
cd annotator
pip install -e ".[dev,mlx]"  # or .[dev,vllm] for NVIDIA

# Run checks
ruff check .
mypy annotator/
pytest

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

test_ann-0.1.1.tar.gz (33.2 kB view details)

Uploaded Source

Built Distribution

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

test_ann-0.1.1-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file test_ann-0.1.1.tar.gz.

File metadata

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

File hashes

Hashes for test_ann-0.1.1.tar.gz
Algorithm Hash digest
SHA256 76224c9b429689194e69a4b51e31b7ee8a0aca1c05b2eda5f7de83826abcc0ac
MD5 1a8a4d183109e43645b2f2fb5acb95a7
BLAKE2b-256 634cca4a22e38c87ed39dc67a3aa347947712e081dc49cc21a4baf68174b91f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for test_ann-0.1.1.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 test_ann-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: test_ann-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for test_ann-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 572c41ccb86f48a89c7bc6a76d6fc7ecf5e2ae47cde8746808b7cc35576b28eb
MD5 cad77ced91a3d80cef49814a56c2a910
BLAKE2b-256 25a987e82ee28c0645da975c35d3a717b35856f8244133e87119e993fb1e781a

See more details on using hashes here.

Provenance

The following attestation bundles were made for test_ann-0.1.1-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