NILESH1003/codeguardian-env
0
1from fastapi import FastAPI, HTTPException2from fastapi.middleware.cors import CORSMiddleware3from typing import Optional, Dict, Any4from pydantic import BaseModel5 6from models import CodeObservation, CodeAction, EnvState7from server.environment import CodeGuardianEnvironment8 9app = FastAPI(title="CodeGuardian AI Code Review Environment")10 11app.add_middleware(12 CORSMiddleware,13 allow_origins=["*"],14 allow_methods=["*"],15 allow_headers=["*"],16)17 18env = CodeGuardianEnvironment()19 20class ResetRequest(BaseModel):21 task_id: Optional[str] = None22 23# ✅ Root endpoint24@app.get("/")25def root():26 return {"message": "CodeGuardian API is running"}27 28# ✅ Prevent GET misuse29@app.get("/reset")30def reset_get():31 return {"error": "Use POST /reset"}32 33# ✅ Fixed reset34@app.post("/reset", response_model=CodeObservation)35def reset_env(req: ResetRequest = ResetRequest()):36 return env.reset(req.task_id)37 38# ✅ Step endpoint39@app.post("/step")40def step_env(action: CodeAction) -> Dict[str, Any]:41 if not env.current_task:42 raise HTTPException(status_code=400, detail="Environment not initialized. Call /reset first.")43 return env.step(action)44 45# ✅ State endpoint46@app.get("/state", response_model=EnvState)47def get_state():48 if not env.current_task:49 raise HTTPException(status_code=400, detail="Environment not initialized.")50 return env.state()51 52# ✅ Health53@app.get("/health")54def health():55 return {"status": "ok"}56 57def main():58 import uvicorn59 uvicorn.run("server.app:app", host="0.0.0.0", port=7860)60 61if __name__ == "__main__":62 main()