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.
bet_167
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
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.