| | |
| | |
| | |
| | |
| | |
| |
|
| | """ |
| | Chess Environment HTTP Client. |
| | |
| | This module provides the client for connecting to a Chess Environment server |
| | over HTTP. |
| | """ |
| |
|
| | from typing import Any, Dict, Optional |
| |
|
| | from openenv_core.client_types import StepResult |
| | from openenv_core.env_server.types import State |
| | from openenv_core.http_env_client import HTTPEnvClient |
| |
|
| | from .models import ChessAction, ChessObservation |
| |
|
| |
|
| | class ChessEnv(HTTPEnvClient[ChessAction, ChessObservation]): |
| | """ |
| | HTTP client for the Chess Environment. |
| | |
| | This client connects to a ChessEnvironment HTTP server and provides |
| | methods to interact with it: reset(), step(), and state access. |
| | |
| | Example: |
| | >>> client = ChessEnv(base_url="http://localhost:8000") |
| | >>> result = client.reset() |
| | >>> print(result.observation.board_fen) |
| | >>> |
| | >>> result = client.step(ChessAction(move="e2e4")) |
| | >>> print(result.observation.game_status) |
| | >>> print(result.reward) |
| | """ |
| |
|
| | def _step_payload(self, action: ChessAction) -> Dict: |
| | return { |
| | "move": action.move, |
| | } |
| |
|
| | def _parse_result(self, payload: Dict) -> StepResult[ChessObservation]: |
| | obs_data = payload.get("observation", {}) |
| | observation = ChessObservation( |
| | board_fen=obs_data.get("board_fen", ""), |
| | legal_moves=obs_data.get("legal_moves", []), |
| | white_move=obs_data.get("white_move", ""), |
| | black_move=obs_data.get("black_move"), |
| | material_balance=obs_data.get("material_balance", 0.0), |
| | game_status=obs_data.get("game_status", "ongoing"), |
| | captured_pieces=obs_data.get("captured_pieces", []), |
| | done=payload.get("done", False), |
| | reward=payload.get("reward"), |
| | metadata=obs_data.get("metadata", {}), |
| | ) |
| |
|
| | return StepResult( |
| | observation=observation, |
| | reward=payload.get("reward"), |
| | done=payload.get("done", False), |
| | ) |
| |
|
| | def _parse_state(self, payload: Dict) -> State: |
| | return State( |
| | episode_id=payload.get("episode_id"), |
| | step_count=payload.get("step_count", 0), |
| | ) |
| |
|