Open source · bluffr-1 · heads-up no-limit hold'em

A poker model you can play, read and run.

Bluffr plays heads-up no-limit hold'em from game theory: a strategy learned by self-play counterfactual regret minimisation, and a fresh solve of the flop, turn and river on your own machine. Every answer is one legal action with a probability for every option. Sit across from it here, then take the code.

Play against it Get the code

Your cards
Flop · pot 500 · your move
Bluffr's answer confidence 0.65 · from the blueprint

bet_167

  • Check 40%
  • Bet ⅓ pot (to 167) 60%
  • Bet ½ pot (to 250) 0%
  • Bet pot (to 500) 0%
  • Bet 1.5× pot (to 750) 0%
  • Bet 2× pot (to 1000) 0%
  • All-in (to 9750) 0%
Preflop: you raise to 250 on the button and Villain calls. Flop: Villain checks to you. A real answer from this site, seed 4.

Your copy answers over HTTP

Run Bluffr and it serves this site and an API at 127.0.0.1:3000. One request, one typed decision. This site plays Bluffr but doesn't host the API: run it yourself and call your own.

Request

/decide
  ?cards=AsKd
  &position=button
  &board=Qs7c2d
  &actions=r250,c,k
  &seed=4

Answer

{
  "model": "bluffr-1",
  "answer": {
    "type": "choice",
    "choice": "bet_167",
    "confidence": 0.6535,
    "probabilities": {
      "check": 0.4032,
      "bet_167": 0.5968,
      "bet_250": 0.0000,
      "bet_500": 0.0000,
      "bet_750": 0.0000,
      "bet_1000": 0.0000,
      "bet_9750": 0.0000
    }
  },
  "criteria": {
    "check": "Check",
    "bet_167": "Bet ⅓ pot (to 167)",
    "bet_250": "Bet ½ pot (to 250)",
    "bet_500": "Bet pot (to 500)",
    "bet_750": "Bet 1.5× pot (to 750)",
    "bet_1000": "Bet 2× pot (to 1000)",
    "bet_9750": "All-in (to 9750)"
  },
  "action": { "type": "raise", "to": 167 },
  "source": "blueprint",
  "spot": {
    "street": "flop", "pot": 500, "to_call": 0,
    "legal": { … }
  },
  "usage": { "compute_ms": 0 }
}

Every option is named, so code can branch on answer.choice without parsing text. action is the same choice ready to replay into your own table, and seed makes the pick from the mix repeatable.

How Bluffr decides

  1. 1

    A strategy learned by self-play

    A blueprint trained with Monte Carlo CFR over a compressed hold'em: 1.27 billion iterations, 192 thousand situations, stacks from 20 to 200 big blinds.

  2. 2

    A search where it counts

    Run it yourself and on the flop, the turn and the river Bluffr re-solves the street against the ranges the betting implies, with your exact bet sizes in the tree. The turn search looks ahead through every river card, the flop search through a sample of runouts.

  3. 3

    A typed answer

    The mix becomes a choice among the legal actions, never a string to parse. Preflop answers take under a millisecond, flop and turn answers up to a few tenths of a second.

Measured, not promised

In small duplicate matches (every deal played twice, seats swapped) search beat the blueprint it starts from by +38 ± 34 big blinds per 100 hands over 800 hands. That is a lead, not proof, and no strategy here comes with a promise of winning. The model card says what Bluffr knows and where it is weak.

This site runs on a free host that allows a few milliseconds of computing a request, so here Bluffr plays its trained blueprint on every street and skips the search. The copy you run does both.