from fastapi import FastAPI, Request from pydantic import BaseModel from env.environment import OpsDeskEnv from env.models import Action app = FastAPI(title="OpsDesk OpenEnv") env = OpsDeskEnv(task_level="HARD") class StepRequest(BaseModel): action_type: str = "ignore_email" email_id: str = "e1" metadata: dict = {} @app.get("/") def read_root(): return {"name": "OpsDesk", "status": "operational"} @app.post("/reset") async def reset_post(request: Request): global env task_level = "HARD" try: body = await request.json() if isinstance(body, dict) and "task_level" in body: task_level = body.get("task_level", "HARD") except Exception: pass env = OpsDeskEnv(task_level=task_level) obs = env.reset() return {"observation": obs.model_dump()} @app.get("/reset") def reset_get(task_level: str = "HARD"): global env env = OpsDeskEnv(task_level=task_level) obs = env.reset() return {"observation": obs.model_dump()} @app.get("/state") def state(): return env.state().model_dump() @app.post("/step") async def step(request: Request): try: req_body = await request.json() except Exception: req_body = {} action_data = {} if "action" in req_body: action_data = req_body["action"] else: action_data = req_body from pydantic import ValidationError try: act = Action(**action_data) except ValidationError: act = Action(action_type="ignore_email", email_id="e1", metadata={}) obs, reward, terminated, info = env.step(act) return { "observation": obs.model_dump(), "reward": reward.value, "done": terminated, "info": info }