Spaces:
Sleeping
Sleeping
| """ | |
| Simple HTTP client for the Code Debug OpenEnv server. | |
| """ | |
| from typing import Optional | |
| import httpx | |
| class CodeDebugClient: | |
| def __init__(self, base_url: str = "http://localhost:7860", timeout: float = 30.0): | |
| self.base_url = base_url.rstrip("/") | |
| self._http = httpx.Client(base_url=self.base_url, timeout=timeout) | |
| self.episode_id: Optional[str] = None | |
| def reset(self, task_id: Optional[str] = None, seed: Optional[int] = None) -> dict: | |
| payload: dict = {} | |
| if task_id is not None: | |
| payload["task_id"] = task_id | |
| if seed is not None: | |
| payload["seed"] = seed | |
| resp = self._http.post("/reset", json=payload) | |
| resp.raise_for_status() | |
| data = resp.json() | |
| self.episode_id = data["episode_id"] | |
| return data | |
| def step(self, code: str) -> dict: | |
| if self.episode_id is None: | |
| raise RuntimeError("No active episode. Call reset() first.") | |
| resp = self._http.post( | |
| f"/step/{self.episode_id}", | |
| json={"action": {"code": code}}, | |
| ) | |
| resp.raise_for_status() | |
| return resp.json() | |
| def state(self) -> dict: | |
| if self.episode_id is None: | |
| raise RuntimeError("No active episode. Call reset() first.") | |
| resp = self._http.get(f"/state/{self.episode_id}") | |
| resp.raise_for_status() | |
| return resp.json() | |
| def list_tasks(self) -> list[dict]: | |
| resp = self._http.get("/tasks") | |
| resp.raise_for_status() | |
| return resp.json() | |
| def health(self) -> dict: | |
| resp = self._http.get("/health") | |
| resp.raise_for_status() | |
| return resp.json() | |
| def close(self): | |
| self._http.close() | |
| def __enter__(self): | |
| return self | |
| def __exit__(self, *args): | |
| self.close() | |