Spaces:
Running
Running
File size: 1,405 Bytes
7a7e9a6 6bbdeab 7a7e9a6 6bbdeab 7a7e9a6 6bbdeab 7a7e9a6 6bbdeab 7a7e9a6 6bbdeab 7a7e9a6 6bbdeab 7a7e9a6 8f8843e 7a7e9a6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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()
|