Instructions to use predbrad/Genaro-poker with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use predbrad/Genaro-poker with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="predbrad/Genaro-poker") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("predbrad/Genaro-poker") model = AutoModelForCausalLM.from_pretrained("predbrad/Genaro-poker", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use predbrad/Genaro-poker with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf predbrad/Genaro-poker:Q4_K_M # Run inference directly in the terminal: llama cli -hf predbrad/Genaro-poker:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf predbrad/Genaro-poker:Q4_K_M # Run inference directly in the terminal: llama cli -hf predbrad/Genaro-poker:Q4_K_M
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf predbrad/Genaro-poker:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama cli -hf predbrad/Genaro-poker:Q4_K_M
Use Docker
docker model run hf.co/predbrad/Genaro-poker:Q4_K_M
- Llama new
- LM Studio
- Jan
- vLLM
How to use predbrad/Genaro-poker with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "predbrad/Genaro-poker" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "predbrad/Genaro-poker", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/predbrad/Genaro-poker:Q4_K_M
- SGLang
How to use predbrad/Genaro-poker with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "predbrad/Genaro-poker" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "predbrad/Genaro-poker", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "predbrad/Genaro-poker" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "predbrad/Genaro-poker", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use predbrad/Genaro-poker with Ollama:
ollama run hf.co/predbrad/Genaro-poker:Q4_K_M
- Unsloth Desktop
- Pi
How to use predbrad/Genaro-poker with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf predbrad/Genaro-poker:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "predbrad/Genaro-poker:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use predbrad/Genaro-poker with Docker Model Runner:
docker model run hf.co/predbrad/Genaro-poker:Q4_K_M
- Lemonade
How to use predbrad/Genaro-poker with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull predbrad/Genaro-poker:Q4_K_M
Run and chat with the model
lemonade run user.Genaro-poker-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use predbrad/Genaro-poker with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf predbrad/Genaro-poker:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default predbrad/Genaro-poker:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use predbrad/Genaro-poker with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf predbrad/Genaro-poker:Q4_K_M
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "predbrad/Genaro-poker:Q4_K_M" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Genaro Poker 0.6B
A phone-sized poker player. Genaro is a full fine-tune of Qwen3-0.6B built to be the opponents in PokerSI, an Android poker game where every seat is a small language model running on the phone with llama.cpp. It is PokerSI's recommended model.
v3 learns its poker from a search solver running on PokerSI's own engine (Monte Carlo rollouts of every legal move, with Bayesian opponent-range inference), the teacher that beats PokerSI's House Bot by +256 bb/100. v2 learned from House Bot itself.
Given PokerSI's prompt for one decision (a persona, the rules, what the seat can see, the legal moves), Genaro answers with one JSON object: a legal move and, on talk turns, a short line in the character's voice that never gives its cards away.
{"action": "call", "amount": 55, "say": "The pot looks like it's brewing a little sunshine."}
{"action": "check", "amount": 0, "say": "Ahoy, these doubloons are worth a fortune!"}
{"action": "raise", "amount": 240, "say": "Get those reps in, I see potential!"}
| File | Use |
|---|---|
genaro-poker-0.6b-v3-Q4_K_M.gguf (397 MB) |
On-device / llama.cpp. What PokerSI downloads. Chat template embedded. |
model.safetensors + config/tokenizer (bf16) |
transformers, further fine-tuning, other quantizations |
genaro-poker-0.6b-Q4_K_M.gguf |
v2, kept so app versions that point at it keep working. Revision v2 has the v2 weights. |
Bigger sibling for 6 GB+ phones: predbrad/Genaro-poker-1.7B. Code, solver, data pipeline and evals: github.com/bradflaugher/genaro-poker. Training data: predbrad/genaro-poker-sft.
Results
600 held-out PokerSI decisions over all six variants (Texas Hold'em, Omaha, Five-Card Draw, Seven-Card Stud, Short Deck, Crazy Pineapple), each model run through llama.cpp exactly as the app runs it (same prompt, GBNF grammar and sampling); plus 3,600+ live hands.
| model | GGUF | EV regret (bb/decision) | big mistakes /100 | leaks | card talk | repeats | >12 words | live bb/100 (same 1,200 deals) | live vs House Bot, paired (3,600 hands) |
|---|---|---|---|---|---|---|---|---|---|
| Qwen3 0.6B (base) | 484 MB | 1.75 | 19.5 | 10.5% | 39.8% | 23.9% | 22.7% | — | — |
| LFM2.5 1.2B (PokerSI's previous default) | 731 MB | 1.31 | 16.0 | 2.6% | 29.8% | 8.5% | 9.4% | -80 ± 80 | — |
| Genaro Poker 0.6B v2 (House Bot labels) | 397 MB | 1.41 | 18.5 | 0.0% | 0.3% | 0.0% | 0.0% | -84 ± 52 | — |
| Genaro Poker 0.6B v3 | 397 MB | 1.24 | 13.2 | 0.3% | 0.6% | 0.0% | 0.0% | +61 ± 59 | +44 ± 46 |
- EV regret: big blinds a move gives up against the solver's best move, by the solver's own EV estimate of every move (the solver's labels themselves score 0.08). Big mistakes: moves giving up more than 2 bb.
- Leak: a line PokerSI's own
HandBlurwould censor. Card talk: any card or hand word. - Live play: one seat against three House Bots through PokerSI's engine, paired against House Bot playing the same seat on the same deals (which cancels most of the card luck).
All results, including the solver itself: results.
Use
In PokerSI: MODELS → Genaro Poker 0.6B → download. That's it.
llama.cpp: PokerSI-style messages, with a grammar and thinking off:
llama-server -m genaro-poker-0.6b-v3-Q4_K_M.gguf --jinja -c 4096
The prompt format is PokerSI's (llm/PokerPrompt.kt); real examples are in the
dataset. Outside that format
Genaro is just a small, poker-obsessed Qwen3; it is not a general chat model.
transformers:
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("predbrad/Genaro-poker")
model = AutoModelForCausalLM.from_pretrained("predbrad/Genaro-poker", dtype="auto")
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=False)
Training
- Prompts: self-play hands of PokerSI's own Kotlin engine and prompt builder, compiled into a bridge, so every prompt is byte-for-byte what the app sends.
- Moves: a decision-time search solver (
bridge/Solver.kt). For each legal move, including several raise sizes and every discard choice, it samples 480 worlds (unseen cards reshuffled; each world weighted by how likely the opponents' past actions were with those cards), replays the hand, makes the move and plays out with opponent policies drawn from House Bot styles plus sticky-caller and sound-regular populations, so it doesn't learn to exploit any one of them. It picks the move with the best lower confidence bound on EV (noise can't buy a shove), with a bet-size abstraction that rules out giant overbets, and lets the persona's style break near-ties. It beats House Bot by +256 ± 49 bb/100. - Table talk: written by Gemma 4 E4B for the chosen move, kept only if it passes the
grammar's rules, 2-12 words, no card or hand vocabulary, PokerSI's repeat rules and
PokerSI's
HandBlur. - Recipe: 35,756 decisions, repeated by how much EV is at stake (52,792 rows), full
fine-tune, bf16, 2 epochs, lr 3e-5 cosine, effective batch 64, loss on the reply only.
~2.5 h on one NVIDIA RTX Spark N1X laptop. See
training_config.yaml.
Limits
- Genaro distills the solver but doesn't match it: it gives up about 1.2 bb per decision against it; the solver is far ahead of every Genaro in live play.
- The solver best-responds to House-Bot-like play (made robust with other populations); it is not a game-theoretic equilibrium solver.
- Trained only for PokerSI's prompt format, in English; lines are family-friendly by construction.
License
Apache 2.0, inherited from Qwen3-0.6B. Training data was generated with PokerSI (MIT) and Gemma 4 (Apache 2.0).
- Downloads last month
- 558