""" 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)