| from typing import Dict, Optional | |
| from fastapi import FastAPI | |
| 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 | |
| # ------------------------------------------------------------------ | |
| def health(): | |
| return {"status": "ok", "environment": "suspect_x_env"} | |
| def reset(req: ResetRequest = ResetRequest()): | |
| return env.reset(n_facts=req.n_facts, seed=req.seed, difficulty=req.difficulty) | |
| def step(req: StepRequest): | |
| action = req.model_dump() | |
| return env.step(action) | |
| def state(): | |
| return env.state | |