Spaces:
Sleeping
Sleeping
| """FastAPI server for Incident-Response-Detective OpenEnv environment.""" | |
| import os | |
| from fastapi import FastAPI, HTTPException | |
| from fastapi.responses import RedirectResponse | |
| from pydantic import BaseModel | |
| from server.environment import IncidentResponseEnvironment | |
| app = FastAPI( | |
| title="Incident-Response-Detective", | |
| description="OpenEnv RL environment for complex incident triage reasoning", | |
| version="1.0.0", | |
| ) | |
| env = IncidentResponseEnvironment() | |
| # ββ Request/Response Models βββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| class ResetRequest(BaseModel): | |
| task_id: str = "task_easy" | |
| adversarial: bool = False | |
| class StepRequest(BaseModel): | |
| episode_id: str | |
| action: dict | |
| class GradeRequest(BaseModel): | |
| episode_id: str | |
| # ββ Endpoints βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| def root(): | |
| return RedirectResponse(url="/docs") | |
| def health(): | |
| return {"status": "healthy", "environment": "Incident-Response-Detective"} | |
| def get_tasks(): | |
| return {"tasks": env.get_tasks()} | |
| def reset(req: ResetRequest): | |
| try: | |
| episode_id, observation = env.reset(task_id=req.task_id, adversarial=req.adversarial) | |
| return {"episode_id": episode_id, "observation": observation} | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| def step(req: StepRequest): | |
| try: | |
| observation = env.step(req.action, episode_id=req.episode_id) | |
| return {"observation": observation} | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| def state(episode_id: str): | |
| try: | |
| return env.get_state(episode_id) | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| def grader(req: GradeRequest): | |
| try: | |
| return env.grade(req.episode_id) | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| port = int(os.environ.get("PORT", 7860)) | |
| uvicorn.run(app, host="0.0.0.0", port=port) | |