tetris-final / server /client.py
Lishika's picture
Tetris OpenEnv - complete project with dashboard
c315b66
Raw
History Blame Contribute Delete
1.38 kB
"""Minimal Python client for the Tetris OpenEnv FastAPI server."""
from __future__ import annotations
from typing import Any, Dict, Tuple
import requests
class TetrisClient:
"""Thin HTTP client wrapping the /reset, /step, and /state endpoints."""
def __init__(self, base_url: str = "http://localhost:8000", timeout: float = 30.0) -> None:
self.base_url: str = base_url.rstrip("/")
self.timeout: float = timeout
def reset(self) -> Dict[str, Any]:
"""Reset the remote environment and return the observation dict."""
r = requests.post(f"{self.base_url}/reset", timeout=self.timeout)
r.raise_for_status()
return r.json()["observation"]
def step(self, action: str) -> Tuple[Dict[str, Any], Dict[str, float], bool, Dict[str, Any]]:
"""Apply an action and return (observation, reward, done, info)."""
r = requests.post(
f"{self.base_url}/step",
json={"action": action},
timeout=self.timeout,
)
r.raise_for_status()
data = r.json()
return data["observation"], data["reward"], data["done"], data["info"]
def state(self) -> Dict[str, Any]:
"""Fetch the current observation without stepping."""
r = requests.get(f"{self.base_url}/state", timeout=self.timeout)
r.raise_for_status()
return r.json()