SyamSashank's picture
Update server/app.py
8f8843e verified
import uuid
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict, Optional
from environment.env import CodeReviewEnv
from environment.models import Action, Observation, Reward
app = FastAPI(title="CodeReviewEnv")
sessions: Dict[str, CodeReviewEnv] = {}
class ResetRequest(BaseModel):
task_id: str = "easy"
class StepRequest(BaseModel):
session_id: str
action: Action
@app.get("/")
async def root():
return {"status": "online", "environment": "CodeReviewEnv", "tag": "openenv"}
@app.post("/reset")
async def reset_endpoint(req: Optional[ResetRequest] = None):
if req is None: req = ResetRequest()
session_id = str(uuid.uuid4())
env = CodeReviewEnv(req.task_id)
obs = env.reset()
sessions[session_id] = env
return {"session_id": session_id, "observation": obs.dict()}
@app.post("/step")
async def step_endpoint(req: StepRequest):
if req.session_id not in sessions: raise HTTPException(status_code=400, detail="Invalid session ID")
env = sessions[req.session_id]
obs, reward, done, info = env.step(req.action)
return {"observation": obs.dict(), "reward": reward.dict(), "done": done, "info": info}
def main():
import uvicorn
# 8000 is standard for the OpenEnv multi-mode validator
uvicorn.run("server.app:app", host="0.0.0.0", port=7860)
if __name__ == "__main__":
main()