compere vs. plain Elo libraries
“Plain Elo library” here means small Python packages whose entire purpose is computing the Elo update —
e.g. elote, multielo, and the many gist-sized implementations on PyPI. Compere
uses the same Elo math, but the rest of the package is doing something different.
| Dimension | compere | plain Elo libraries |
|---|---|---|
| Elo update | Standard formula, K = 32 default, initial rating 1500. | Standard formula, parameters vary by library. |
| Pair selection | UCB1 multi-armed bandit (default) or similarity-based pairing. | Not provided. The caller decides which pair to compare. |
| Persistence | SQLAlchemy — SQLite by default, PostgreSQL when needed. | None. State lives in memory or whatever the caller wires up. |
| HTTP API | FastAPI server, 11 endpoints, interactive /docs. | None. Library only. |
| Auth / rate limiting | Optional JWT auth and request rate limiting, both off by default. | Not in scope. |
| Deployment | Dockerfile + docker-compose in repo. | N/A — libraries do not self-deploy. |
| License | MIT. | Varies (usually MIT or BSD). |
| Library use | Supported. Import create_entity, create_comparison, get_ratings from compere.modules. | The primary mode. |
When you should pick a plain Elo library
You already know which pairs you want to compare. You have an existing data store. You want the Elo update and nothing else. In that situation, importing a 200-line library is the right move. Compere would be over-served.
When compere is the right tool
You are running a pairwise comparison study and you do not already know which pairs to ask about — that is what the UCB module is for. Or you want an HTTP-addressable service so a frontend (or several frontends) can hit it without re-implementing comparison bookkeeping. Or you want a single Docker container that handles entities, comparisons, pair selection, and ratings as one cohesive thing.
What we are not claiming
We are not claiming a better Elo update. The math is the math; we did not invent it. We are claiming a useful packaging of it for a specific workflow (pairwise studies where pair selection is the bottleneck). If your workflow is different, your tool is different.