Creole
A contract-bridge bot: one neural network bids 33 bidding systems, told which system each side plays; a belief network plus PIMC plays the cards. Creole is the big brother of Pidgin, which invented one system of its own.
Code, server and Docker image: github.com/hsperr/creole ·
docker run -p 8080:8080 ghcr.io/hsperr/creole
Files
| File | What | Params | Size | sha256 |
|---|---|---|---|---|
creole_bid_rl2_s4500.pt |
Joint net: bidding, and the card head that breaks PIMC ties | 28.1M | 112 MB | b4fb42d7…b41c3e |
creole_belief_m2_s61962.pt |
Belief net: who holds each unseen card | 52.4M | 209 MB | 00e49d20…5f0577 |
Plain PyTorch state dicts (torch.load(..., weights_only=True)), float32. The model classes are in
creole/model.py of the code repo.
Use
docker run --rm -p 8080:8080 ghcr.io/hsperr/creole
curl 'localhost:8080/apis/brill/bid?seat=N&dealer=N&vul=None&hand=AKQ2.KJ4.T98.762&ctx=&ourSystem=2/1&theirSystem=SAYC'
# {"bid": "1C", "candidates": [...], "model": "Creole"}
The server speaks Brill's Seat Robot API
(BEN-compatible): /apis/brill/bid, /lead, /play. CPU only, about 0.8 GB of memory,
about 15 ms a call and 0.2 s a card on one thread.
Systems
2/1 GF (GIB/BBO, BEN 2/1 and eight EPBot 2/1 cards), SAYC (eight variants), Acol, Polish Club
(WJ), Precision, UCBC, WBridge5, and VieNNa (Pidgin's own). ep_* systems are EPBot convention
cards. Pass the system per side as ourSystem / theirSystem; the full list is at GET /apis/brill/.
Architecture
- Joint net. Causal transformer, 8 layers, width 512, 8 heads, over the board's events (calls, then cards). Learned embeddings for our side's and the opponents' system are added at every step. Call head: 38 calls. Card head: a 2-layer attention encoder over the 52 cards.
- Belief net. Gated MLP, 8 SwiGLU blocks, width 1024. Reads the seat's view (hand, dummy, cards played, the auction), both systems and a card-play-style token; outputs each unseen card's owner.
- Card play. Layouts drawn from the belief net (importance-weighted, resampled to 64), solved double dummy for up to 0.6 s per card; best mean tricks wins, the joint net's card head breaks ties within 0.05 tricks. Bidding is greedy: no search during the auction.
Training
- One system, self-play. Supervised on 6.4M deals bid and played by Pidgin V3.1, then 82k steps of league self-play RL on duplicate IMPs with a KL leash.
- 33 systems, supervised (37k steps). Pidgin self-play (VieNNa calls distilled from step 1; SAYC and 2/1 calls from BEN's nets), data from BEN, 18M auctions from earlier bidders (EPBot cards, BRL, Pidgin research nets) and 7.4M auctions EPBot bid with ten more convention cards.
- 33 systems, league RL (4,500 steps). Self-play and PFSP league over all systems, KL leash to stage 2: tight on early calls, loose deeper in the auction.
- Belief net. Pidgin V4's belief net (incl. 1.15M WBridge5 deals), fine-tuned on the data from BEN, widened to 33 systems and retrained on about 30M deals (61,962 steps).
All deals come from the public Pgx DDS dataset. Details and negative results: TRAINING.md.
Evaluation
Duplicate IMPs per board, ±95% CI. Creole bids the named system; the opponent bids its own. Pidgin V4 on the same boards for comparison.
| Opponent | Creole's system | Boards | Creole | Pidgin V4 |
|---|---|---|---|---|
| Lia | 2/1 | 200 | −0.01 ± 0.88 | +1.12 ± 0.89 |
| Lia | VieNNa | 194 | +0.85 ± 0.99 | |
| Brill | GIB / BBO | 100 | +0.78 ± 1.26 | +1.23 |
| BEN | GIB / BBO | 100 | +0.32 ± 1.07 | +1.24 |
| Pidgin V4 | VieNNa | 400 | +0.34 ± 0.59 |
Limitations
- Every Creole interval above includes zero, and the samples are small (100–400 boards).
- Against these bots Pidgin V4 scored higher; Creole trades peak strength in one system for breadth.
- Weaker than Lia, Brill and BEN on declarer-play puzzles.
- No search during the auction; calls carry no explanations (
explanationis empty). - Nine research systems in the registry (
brl_fsp,D75,E46, ...) work but are not tuned. - How well an EPBot-card system matches the real card depends on how faithfully EPBot bids it.
Data and reproducibility
No training data is released. The deals, BEN's nets and data, EPBot, WBridge5 and the BRL bidders are public; the generated training sets (tens of millions of auctions from running those bots) and the trainers are not. Rebuilding Creole means regenerating that data and rerunning the stages above. The weights are trained on other programs' outputs; none of their code or data is included.
Licence
Apache-2.0. © Henning Sperr.