Spaces:
Sleeping
Sleeping
| """Pydantic request/response schemas for the Tetris HTTP API.""" | |
| from __future__ import annotations | |
| from typing import Any, Dict, Optional | |
| from pydantic import BaseModel, Field | |
| class ResetRequest(BaseModel): | |
| """Body for POST /reset.""" | |
| session_id: Optional[str] = Field(None, description="Existing session to reset; omit to create a new one") | |
| class ResetResponse(BaseModel): | |
| """Response for POST /reset — full observation dict.""" | |
| session_id: str | |
| observation: Dict[str, Any] | |
| class StepRequest(BaseModel): | |
| """Body for POST /step.""" | |
| session_id: str = Field(..., description="Session UUID returned by /reset") | |
| action: str = Field(..., description="One of: move_left, move_right, rotate, place") | |
| class StepResponse(BaseModel): | |
| """Response for POST /step.""" | |
| observation: Dict[str, Any] | |
| reward: Dict[str, float] | |
| done: bool | |
| info: Dict[str, Any] | |
| class RunEpisodeRequest(BaseModel): | |
| """Optional body for POST /run_episode.""" | |
| training_step: Optional[int] = 0 | |
| agent_label: Optional[str] = "random" | |
| class RunEpisodeResponse(BaseModel): | |
| """Response for POST /run_episode.""" | |
| episode_id: str | |
| training_step: int | |
| agent_label: str = "random" | |
| total_reward: float | |
| total_turns: int | |
| total_lines: int | |
| replay_file: str | |
| class EpisodeMeta(BaseModel): | |
| """Metadata for a single saved replay file.""" | |
| filename: str | |
| episode_id: str | |
| training_step: int | |
| agent_label: str = "random" | |
| total_turns: int | |
| total_score: int | |
| total_lines: int | |