import os import requests import time from typing import Any, Dict class RevOpsEnvClient: def __init__(self, base_url: str = "http://localhost:8000"): self.base_url = base_url self.max_retries = 3 def _request(self, method: str, endpoint: str, json: Dict = None) -> Dict: url = f"{self.base_url}{endpoint}" for attempt in range(self.max_retries): try: response = requests.request(method, url, json=json) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: time.sleep(1) raise Exception(f"Failed to reach env after {self.max_retries} attempts.") def reset(self, task_id: str) -> Dict[str, Any]: return self._request("POST", f"/reset?episode_id={task_id}&task_id={task_id}", json={"episode_id": task_id, "task_id": task_id}) def step(self, action: Dict[str, Any]) -> Dict[str, Any]: return self._request("POST", "/step", json={"action": action}) def state(self) -> Dict[str, Any]: return self._request("GET", "/state") def grader(self) -> float: res = self._request("GET", "/grader") return res.get("grader_score", 0.0)