File size: 2,104 Bytes
3973176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from __future__ import annotations

from dataclasses import dataclass
from enum import StrEnum

from persistentpoker_bench.models import DEFAULT_MODEL_PRIORITY, ModelTarget

DEFAULT_PLAYER_COUNT = 4
MIN_PLAYER_COUNT = 3
MAX_PLAYER_COUNT = 6
DEFAULT_STARTING_STACK = 2000
DEFAULT_SMALL_BLIND = 10
DEFAULT_BIG_BLIND = 20
DEFAULT_DETERMINISTIC_SEED = 20260428


class HandCategory(StrEnum):
    DOUBLE_ROYAL_FLUSH = "double_royal_flush"
    FIVE_OF_A_KIND = "five_of_a_kind"
    DOUBLE_STRAIGHT_FLUSH = "double_straight_flush"
    ROYAL_FLUSH = "royal_flush"
    STRAIGHT_FLUSH = "straight_flush"
    FOUR_OF_A_KIND_PLUS_FLUSH = "four_of_a_kind_plus_flush"
    FOUR_OF_A_KIND = "four_of_a_kind"
    FULL_HOUSE_PLUS_FLUSH = "full_house_plus_flush"
    FLUSH = "flush"
    STRAIGHT = "straight"
    THREE_OF_A_KIND = "three_of_a_kind"
    TWO_PAIR = "two_pair"
    ONE_PAIR = "one_pair"
    HIGH_CARD = "high_card"


@dataclass(frozen=True, slots=True)
class ProjectSpec:
    project_name: str
    default_player_count: int
    min_player_count: int
    max_player_count: int
    default_starting_stack: int
    default_small_blind: int
    default_big_blind: int
    default_deterministic_seed: int
    format_name: str
    pool_default_winner_action: str
    hand_ranking: tuple[HandCategory, ...]
    tie_break_order: tuple[str, ...]
    model_priority: tuple[ModelTarget, ...]


def get_project_spec() -> ProjectSpec:
    return ProjectSpec(
        project_name="PersistentPoker-Bench",
        default_player_count=DEFAULT_PLAYER_COUNT,
        min_player_count=MIN_PLAYER_COUNT,
        max_player_count=MAX_PLAYER_COUNT,
        default_starting_stack=DEFAULT_STARTING_STACK,
        default_small_blind=DEFAULT_SMALL_BLIND,
        default_big_blind=DEFAULT_BIG_BLIND,
        default_deterministic_seed=DEFAULT_DETERMINISTIC_SEED,
        format_name="No-Limit Texas Hold'em Multiplayer",
        pool_default_winner_action="continue",
        hand_ranking=tuple(HandCategory),
        tie_break_order=("duplicate_count", "card_value", "split"),
        model_priority=DEFAULT_MODEL_PRIORITY,
    )