Spaces:
Running
Running
| 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 | |
| async def root(): | |
| return {"status": "online", "environment": "CodeReviewEnv", "tag": "openenv"} | |
| 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()} | |
| 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() | |