from __future__ import annotations from typing import Any import requests class AuditEnvClient: """Small HTTP client for OpenEnv-style interactions with the running server.""" def __init__(self, base_url: str = "http://127.0.0.1:8000") -> None: self.base_url = base_url.rstrip("/") self.session = requests.Session() self.session_id: str | None = None def reset(self, task_id: str = "easy", seed: int = 42) -> dict[str, Any]: resp = self.session.post(f"{self.base_url}/reset", json={"task_id": task_id, "seed": seed}, timeout=30) resp.raise_for_status() payload = resp.json() self.session_id = payload.get("session_id") return payload def step(self, action: dict[str, Any]) -> dict[str, Any]: payload = dict(action) if self.session_id and "session_id" not in payload: payload["session_id"] = self.session_id resp = self.session.post(f"{self.base_url}/step", json=payload, timeout=30) resp.raise_for_status() return resp.json() def state(self) -> dict[str, Any]: resp = self.session.get(f"{self.base_url}/state", timeout=30) resp.raise_for_status() return resp.json() def close(self) -> None: self.session.close() __all__ = ["AuditEnvClient"]