wildfire_env / client.py
shankerram3's picture
Upload folder using huggingface_hub
473cc5e verified
# Support both in-repo and standalone imports
try:
# In-repo imports (when running from OpenEnv repository)
from openenv.core.http_env_client import HTTPEnvClient
from openenv.core.client_types import StepResult
from .models import WildfireAction, WildfireObservation, WildfireState
except ImportError:
# Standalone imports (when environment is standalone with openenv-core from pip)
try:
from openenv_core.http_env_client import HTTPEnvClient
except ImportError:
# Fallback to local compatibility shim if package doesn't have it yet
from .http_env_client_compat import HTTPEnvClient
from openenv_core.client_types import StepResult
from wildfire_env.models import WildfireAction, WildfireObservation, WildfireState
class WildfireEnv(HTTPEnvClient[WildfireAction, WildfireObservation]):
def _step_payload(self, action: WildfireAction) -> dict:
return {"action": action.action, "x": action.x, "y": action.y}
def _parse_result(self, payload: dict) -> StepResult[WildfireObservation]:
obs = WildfireObservation(**payload["observation"])
return StepResult(
observation=obs,
reward=payload.get("reward"),
done=payload.get("done", False),
)
def _parse_state(self, payload: dict) -> WildfireState:
return WildfireState(**payload)
def render_grid(obs: WildfireObservation) -> str:
legend = {0:"⬛", 1:"🟩", 2:"πŸŸ₯", 3:"🟫", 4:"🟦"}
w, h = obs.width, obs.height
g = obs.grid
rows = []
for y in range(h):
rows.append("".join(legend.get(g[y*w+x], "?") for x in range(w)))
meta = f"step={obs.step} wind={obs.wind_dir} hum={obs.humidity:.2f} burning={obs.burning_count} burned={obs.burned_count}"
return "\n".join(rows + [meta])