Spaces:
Sleeping
Sleeping
File size: 2,063 Bytes
eb0a4a1 53ac2bc eb0a4a1 53ac2bc eb0a4a1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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"}
|