Skip to main content

chipzen-bot

[!WARNING] Beta software (pre-1.0). This SDK is in active development; the public API may change between minor versions before 1.0. Pin to a specific version in production. Report issues at chipzen-ai/chipzen-sdk/issues.

The Python adapter for the Chipzen AI poker competition platform. Wraps the WebSocket protocol so your bot only has to implement decide(state) -> action, and ships a validate CLI that confirms your bot will be accepted by the upload pipeline.

Install

pip install chipzen-bot

Python 3.10+ is supported. The runtime dependency is a single package (websockets); your bot can pull in whatever else it needs (numpy, torch, etc.) on top.

Minimal bot

import asyncio
import os
from chipzen import Bot, Action, GameState, run_bot


class MyBot(Bot):
    def decide(self, state: GameState) -> Action:
        if "check" in state.valid_actions:
            return Action.check()
        return Action.fold()


if __name__ == "__main__":
    # An uploaded bot gets its match URL from the platform via $CHIPZEN_WS_URL.
    asyncio.run(
        run_bot(os.environ["CHIPZEN_WS_URL"], MyBot(), token=os.environ.get("CHIPZEN_TOKEN"))
    )

To run a bot remotely from your own machine instead of uploading it, use run_external_bot(...) / chipzen run-external — see Two ways to run a bot.

The SDK handles the Layer-1 transport handshake, Layer-2 game-state parsing, ping/pong, request-id echoing, action_rejected retries, and reconnect. Subclass Bot, override decide(), return an Action. That's the entire surface for a working bot.

Lifecycle hooks (on_match_start, on_round_start, on_phase_change, on_turn_result, on_round_result, on_match_end, on_decision_latency) are optional — override them if you need to maintain per-match or per-hand state between turns or log your decision timings.

Two ways to run a bot

The same Bot class works on both paths:

  • Upload (containerized). Package your bot as an image and submit it; the platform's executor runs it. This is the run_bot(...) / chipzen-sdk validate + Docker path above — best for ranked competition and tournaments.

  • External-API (remote play). Run your bot on your own machine and let the platform match and dispatch it over the public token-authed API — no upload, fast iteration:

    import asyncio
    from chipzen import Bot, run_external_bot
    
    asyncio.run(run_external_bot(MyBot(), bot_id="<bot-uuid>", env="staging", token="cz_extbot_..."))
    

    It holds one lobby connection and plays every match dispatched to your bot — a single challenge, or each round of a tournament. Put the token in a chipzen.toml ([external_api] token = "cz_extbot_...", optional bot_id / url) and the CLI is a one-liner:

    chipzen run-external my_bot.py --env staging
    

    Tunables: connect_to_chipzen() (env→URL), RetryPolicy (reconnect/backoff), safe_mode=False (crash on a decide() bug instead of folding — for dev/eval). See docs/external-api/FIRST-30-MINUTES.md.

CLI

The chipzen-sdk CLI (aliased as chipzen) is installed alongside the package:

Command Purpose
chipzen-sdk init <name> Scaffold a new bot project from a starter template.
chipzen-sdk validate <path> Run the same checks the upload pipeline runs (size, imports, sandbox-blocked modules, decide() timeout sniff). The supported go/no-go before docker packaging.
chipzen run-external <bot.py> Run a bot on the external-API remote-play path (lobby → matched → play).

Run chipzen-sdk <command> --help for the full option list per command.

What the SDK is for (and what it isn't)

The SDK does three things and nothing else:

  1. Protocol adapter — your bot doesn't hand-roll WebSockets.
  2. chipzen-sdk validate — pre-upload conformance check.
  3. IP-protected Dockerfile recipe — the Cython multi-stage build that ships in starters/python/Dockerfile (cythonize -i bot.py && rm bot.py) produces an image containing only compiled .so files, not your .py source.

It does not include a local match simulator, hand evaluator, or opponent pool. Bot strength testing happens after upload; the platform runs comprehensive bot-vs-bot evaluation as part of the submission pipeline. If you want fast local iteration, write your own profiling harness that calls your Bot.decide() directly with recorded GameState objects.

Reference

Full developer documentation lives in the chipzen-sdk repo:

  • DEV-MANUAL — SDK reference, lifecycle hooks, performance budgets, container contract, troubleshooting.
  • QUICKSTART — write a bot, validate it, package it (~10 minutes).
  • Protocol spec — Layer 1 (Transport) + Layer 2 (Poker game state). Authoritative.
  • Bot runtime security model — what the platform enforces on uploaded bots (sandbox, network egress, resource limits).

Per-package quickstart: QUICKSTART.md.

License

Apache-2.0. See the LICENSE file in the repo.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chipzen_bot-0.4.0.tar.gz (140.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chipzen_bot-0.4.0-py3-none-any.whl (72.8 kB view details)

Uploaded Python 3

File details

Details for the file chipzen_bot-0.4.0.tar.gz.

File metadata

  • Download URL: chipzen_bot-0.4.0.tar.gz
  • Upload date:
  • Size: 140.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for chipzen_bot-0.4.0.tar.gz
Algorithm Hash digest
SHA256 2caeb70aa4ac8d495838cf524e0736b68ec571dfd0902586fee16a0f0b72a8e3
MD5 39fadd315238f4882640d8f9538ae355
BLAKE2b-256 1ac132f186410245a05bd7d8f66865972d2b5fc03caabe33567200c5c21a6e45

See more details on using hashes here.

Provenance

The following attestation bundles were made for chipzen_bot-0.4.0.tar.gz:

Publisher: release-python.yml on chipzen-ai/chipzen-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chipzen_bot-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: chipzen_bot-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 72.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for chipzen_bot-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a4f5f57ebb66242a878df94a93fab3d8102a23a9d0ad50288252ca1382de4847
MD5 15c173900942cb7c74c5b97c299f58e1
BLAKE2b-256 1821b2bb84b8eeadba1ba54948ca284c214280e9eb126d53e85b28afea34607f

See more details on using hashes here.

Provenance

The following attestation bundles were made for chipzen_bot-0.4.0-py3-none-any.whl:

Publisher: release-python.yml on chipzen-ai/chipzen-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page