ANI00's picture
Fix: Entry point and root endpoint returns API endpoints
53ac2bc verified
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse
from .models import ModerationAction, StepResult, ResetResult, EnvState, ResetRequest
from .env import ContentModerationEnv
from .tasks import TASKS
app = FastAPI(title="Content Moderation OpenEnv", version="1.0.0")
_env = ContentModerationEnv()
@app.get("/")
async def root():
return {
"title": "Content Moderation OpenEnv",
"version": "1.0.0",
"description": "Real-world AI content moderation environment",
"endpoints": {
"GET /": "This endpoint",
"GET /health": "Health check",
"GET /docs": "Swagger UI documentation",
"GET /redoc": "ReDoc documentation",
"GET /tasks": "List available tasks",
"POST /reset": "Start new episode",
"POST /step": "Submit moderation action",
"GET /state": "Get current episode state",
"POST /close": "Close episode"
},
"docs_url": "/docs",
"redoc_url": "/redoc"
}
@app.post("/reset", response_model=ResetResult)
async def reset(request: Request):
try:
body = await request.json()
except Exception:
body = {}
task = (body or {}).get("task", "text_spam")
try:
return _env.reset(task=task)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@app.post("/step", response_model=StepResult)
def step(action: ModerationAction):
return _env.step(action)
@app.get("/state", response_model=EnvState)
def state():
return _env.state()
@app.post("/close")
def close():
_env.close()
return {"status": "closed"}
@app.get("/tasks")
def list_tasks():
return {
name: {
"description": t["description"],
"difficulty": t["difficulty"],
"num_items": len(t["items"]),
"content_type": t["content_type"],
}
for name, t in TASKS.items()
}
@app.get("/health")
def health():
return {"status": "ok"}