hissterical's picture
Upload 9 files
a5c89a3 verified
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from typing import Optional
import uvicorn
from server.schemas import Action, StepResult, ResetResult, StateResult
from server.env import DBMigrationEnv
app = FastAPI(
title="DB Schema Migration OpenEnv",
description="RL environment for database schema migration tasks",
version="1.0.0",
)
# Single global env instance (stateful per session)
env = DBMigrationEnv()
class ResetRequest(BaseModel):
task: Optional[str] = "easy"
@app.get("/")
def root():
return {"status": "ok", "env": "db-schema-migration", "tasks": ["easy", "medium", "hard"]}
@app.get("/health")
def health():
return {"status": "ok"}
@app.post("/reset", response_model=ResetResult)
def reset(request: ResetRequest = ResetRequest()):
task = request.task if request.task else "easy"
if task not in ["easy", "medium", "hard"]:
raise HTTPException(status_code=400, detail=f"Unknown task '{task}'. Choose: easy, medium, hard")
result = env.reset(task_name=task)
return result
@app.post("/step", response_model=StepResult)
def step(action: Action):
result = env.step(action)
return result
@app.get("/state", response_model=StateResult)
def state():
return env.state()
@app.get("/tasks")
def list_tasks():
from server.env import TASKS
return {
name: {
"description": task["description"],
"requirements": task["target_requirements"],
"max_steps": task["max_steps"],
"hints": task.get("hints", []),
}
for name, task in TASKS.items()
}
if __name__ == "__main__":
uvicorn.run("server.main:app", host="0.0.0.0", port=7860, reload=False)