Spaces:
Sleeping
Sleeping
| 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() | |
| 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" | |
| } | |
| 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)) | |
| def step(action: ModerationAction): | |
| return _env.step(action) | |
| def state(): | |
| return _env.state() | |
| def close(): | |
| _env.close() | |
| return {"status": "closed"} | |
| 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() | |
| } | |
| def health(): | |
| return {"status": "ok"} | |