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()