from typing import Dict, Optional from fastapi import FastAPI from fastapi.responses import HTMLResponse from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel from suspect_x_environment import SuspectXEnvironment app = FastAPI(title="Suspect X — AI Interrogation Room", version="1.0.0") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) env = SuspectXEnvironment() # ------------------------------------------------------------------ # Request models # ------------------------------------------------------------------ class ResetRequest(BaseModel): n_facts: int = 3 seed: Optional[int] = None difficulty: Optional[str] = None class StepRequest(BaseModel): session_id: str action_type: str # "question" | "suspect_answer" | "submit_accusation" content: Optional[str] = None accusation_json: Optional[Dict[str, str]] = None # ------------------------------------------------------------------ # Routes # ------------------------------------------------------------------ @app.get("/", response_class=HTMLResponse) def root(): return """ Suspect X Environment - API Server
OpenEnv Hackathon

Suspect X Environment

The high-fidelity adversarial interrogation environment is running successfully. This API serves as the backbone for the multi-agent RLHF training loop.

API Endpoints

POST /reset
POST /step
GET /state
View API Documentation
""" @app.post("/reset") def reset(req: ResetRequest = ResetRequest()): return env.reset(n_facts=req.n_facts, seed=req.seed, difficulty=req.difficulty) @app.post("/step") def step(req: StepRequest): action = req.model_dump() return env.step(action) @app.get("/state") def state(): return env.state