| from fastapi import FastAPI, HTTPException, Body |
| from pydantic import BaseModel |
| from typing import Dict, Optional, List |
| from env import EmailEnv |
| from models import Action, Observation |
| import uvicorn |
| import os |
|
|
| app = FastAPI(title="EmailTriage OpenEnv", description="A real-world email management and scheduling environment.") |
|
|
| |
| env = EmailEnv() |
|
|
| @app.post("/reset") |
| async def reset_env(req: Optional[Dict] = Body(default={})): |
| task_id = req.get("task_id", req.get("level", 1)) if req else 1 |
| obs, info = env.reset(options={"level": task_id}) |
| return { |
| "observation": obs, |
| "info": info, |
| "status": "Ready" |
| } |
|
|
| @app.post("/step") |
| async def step_env(action: Dict): |
| obs, reward, terminated, truncated, info = env.step(action) |
| return { |
| "observation": obs, |
| "reward": float(reward), |
| "terminated": bool(terminated), |
| "truncated": bool(truncated), |
| "info": info |
| } |
|
|
| @app.get("/state") |
| async def get_state(): |
| return env.state() |
|
|
| |
| @app.get("/") |
| async def root(): |
| return {"status": "running", "environment": "OpenEnv"} |
|
|
| if __name__ == "__main__": |
| |
| port = int(os.getenv("PORT", 7860)) |
| uvicorn.run(app, host="0.0.0.0", port=port) |
|
|