tetris-env / src /tetris_env /models.py
VortexedSquirrel's picture
Upload src/tetris_env/models.py with huggingface_hub
a96cc2d verified
"""
OpenEnv-compatible models for Tetris environment.
"""
from enum import Enum
from typing import Optional
from pydantic import Field
from openenv.core import Action, Observation, State
class ActionType(str, Enum):
LEFT = "left"
RIGHT = "right"
ROTATE_CW = "rotate_cw"
ROTATE_CCW = "rotate_ccw"
DROP = "drop"
DOWN = "down"
NOOP = "noop"
class TetrisAction(Action):
action: ActionType = Field(
...,
description="Action to perform: left, right, rotate_cw, rotate_ccw, drop, down, noop",
)
class TetrisObservation(Observation):
# Observation base already has: done, reward, metadata
board: str = Field(..., description="Text representation of the 10x20 board")
current_piece: str = Field(..., description="Current piece name (I, O, T, S, Z, L, J)")
current_piece_shape: str = Field("", description="Text shape of current piece")
next_piece: str = Field(..., description="Next piece name")
next_piece_shape: str = Field("", description="Text shape of next piece")
piece_x: int = Field(0, description="Current piece X position")
piece_y: int = Field(0, description="Current piece Y position")
score: int = Field(0, description="Current score")
total_lines: int = Field(0, description="Total lines cleared")
max_height: int = Field(0, description="Height of tallest column")
holes: int = Field(0, description="Number of holes in the board")
class TetrisState(State):
# State base already has: episode_id, step_count
score: int = Field(default=0, description="Current score")
total_lines: int = Field(default=0, description="Total lines cleared")
done: bool = Field(default=False, description="Whether episode is over")