| """ |
| PII-Scrub-Assistant-v1 -- FastAPI Server (port 7860) |
| ===================================================== |
| OpenEnv 2026 Sync Protocol with player_id + session_id validation. |
| """ |
| from __future__ import annotations |
| from fastapi import FastAPI, HTTPException |
| from environment import ScrubEnvironment |
| from models import ResetRequest, ScrubObservation, ScrubState, StepRequest |
|
|
| app = FastAPI(title="PII-Scrub-Assistant-v1", version="1.0.0", |
| description="OpenEnv 2026 Sync -- PII redaction with player_id + session_id.") |
|
|
| env = ScrubEnvironment() |
|
|
| @app.post("/reset", response_model=ScrubObservation) |
| async def reset(body: ResetRequest): |
| try: |
| return env.reset(player_id=body.player_id, session_id=body.session_id, task_id=body.task_id) |
| except ValueError as e: |
| raise HTTPException(400, detail=str(e)) |
|
|
| @app.post("/step", response_model=ScrubObservation) |
| async def step(body: StepRequest): |
| try: |
| return env.step(player_id=body.player_id, session_id=body.session_id, redacted_text=body.action.redacted_text) |
| except PermissionError as e: |
| raise HTTPException(403, detail=str(e)) |
| except RuntimeError as e: |
| raise HTTPException(409, detail=str(e)) |
|
|
| @app.get("/state", response_model=ScrubState) |
| async def state(): |
| return env.state() |
|
|
| @app.get("/health") |
| async def health(): |
| return {"status": "ok", "environment": "PII-Scrub-Assistant-v1"} |
|
|
| if __name__ == "__main__": |
| import uvicorn |
| uvicorn.run("app:app", host="0.0.0.0", port=7860, reload=True) |
|
|