feat: set blind bet by run hands
This commit is contained in:
@@ -130,6 +130,28 @@ class Observation:
|
||||
}
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class BlindLevel:
|
||||
"""A snapshot of the blind configuration that took effect at a given hand.
|
||||
|
||||
The structure is intentionally append-only: every time the blinds change
|
||||
(or the very first hand seeds the initial values) we push a new
|
||||
``BlindLevel`` so callers can reconstruct how the stakes evolved over the
|
||||
course of the game without losing any prior state.
|
||||
"""
|
||||
|
||||
hand_number: int
|
||||
small_blind: int
|
||||
big_blind: int
|
||||
|
||||
def to_dict(self) -> dict[str, object]:
|
||||
return {
|
||||
"hand_number": self.hand_number,
|
||||
"small_blind": self.small_blind,
|
||||
"big_blind": self.big_blind,
|
||||
}
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class PotAward:
|
||||
amount: int
|
||||
@@ -152,6 +174,10 @@ class HandSummary:
|
||||
board: list[Card]
|
||||
actions: list[ActionRecord]
|
||||
awards: list[PotAward]
|
||||
# ``blinds`` records the exact blind level used by this hand. Storing it
|
||||
# on the summary (rather than only on the game) guarantees historical
|
||||
# hands remain self-describing even after the blinds are raised later.
|
||||
blinds: BlindLevel | None = None
|
||||
showdown_hands: dict[str, list[Card]] = field(default_factory=dict)
|
||||
started_at: float = field(default_factory=time)
|
||||
finished_at: float = field(default_factory=time)
|
||||
@@ -161,6 +187,7 @@ class HandSummary:
|
||||
"game_id": self.game_id,
|
||||
"hand_number": self.hand_number,
|
||||
"button_seat": self.button_seat,
|
||||
"blinds": self.blinds.to_dict() if self.blinds else None,
|
||||
"board": [str(card) for card in self.board],
|
||||
"actions": [record.to_dict() for record in self.actions],
|
||||
"awards": [award.to_dict() for award in self.awards],
|
||||
|
||||
Reference in New Issue
Block a user