from fastapi import FastAPI import sys import os sys.path.append(os.path.abspath("..")) from environment import EmailTriageEnv app = FastAPI() env = None from models import ( Action, Priority, Category, RouteTo, ) @app.post("/reset") def reset(task: str = "easy"): global env env = EmailTriageEnv(task_id=task) obs = env.reset() return {"observation": obs} @app.post("/step") def step(action: dict): global env if env is None: env = EmailTriageEnv(task_id="easy") env.reset() try: action_obj = Action( email_id=action.get("email_id"), priority=Priority(action.get("priority", "medium")), category=Category(action.get("category", "general_inquiry")), route_to=RouteTo(action.get("route_to", "support_tier1")), summary=action.get("summary", "fallback"), flag_review=action.get("flag_review", False), reasoning=action.get("reasoning", ""), reply_draft=action.get("reply_draft", None) ) obs, reward, done, info = env.step(action_obj) return { "observation": obs.model_dump(), "reward": getattr(reward, "total", reward), # safer "done": done, "info": info } except Exception as e: return {"error": str(e)} @app.post("/run") def run_endpoint(): from inference import run return run()