graphforge-openenv / env /server.py
NagaNithin-V
Deploy GraphForge OpenEnv — AST-parsed KG code-editing environment
7952f32
"""FastAPI server for the multi-turn repo-editing environment."""
from __future__ import annotations
from typing import Any
from fastapi import FastAPI, HTTPException
from env.actions import RepoEditAction, parse_action
from env.environment import RepoEditEnvironment
from env.models import RepoEditObservation, RepoEditState
_env = RepoEditEnvironment()
def _make_app() -> FastAPI:
app = FastAPI(title="Repo-Edit OpenEnv", version="0.3.0")
@app.post("/reset", response_model=RepoEditObservation)
def reset(task_id: str | None = None) -> RepoEditObservation:
return _env.reset(task_id=task_id)
@app.post("/step")
def step(action_dict: dict[str, Any]) -> dict[str, Any]:
try:
action = parse_action(action_dict)
obs, reward, done = _env.step(action)
except (ValueError, RuntimeError) as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
return {"observation": obs.model_dump(), "reward": reward, "done": done}
@app.get("/state", response_model=RepoEditState)
def state() -> RepoEditState:
return _env.get_state()
@app.get("/healthz")
def healthz() -> dict[str, Any]:
return {"status": "ok"}
return app
app = _make_app()
__all__ = ["app"]