Spaces:
Sleeping
Sleeping
| """FastAPI HTTP server exposing the OpenEnv API.""" | |
| from __future__ import annotations | |
| import os | |
| from typing import Optional | |
| from fastapi import FastAPI, HTTPException, Body | |
| from .env import DrivingEnv | |
| from .models import ( | |
| ResetRequest, | |
| StepRequest, | |
| StepResponse, | |
| StateResponse, | |
| SpecResponse, | |
| ) | |
| app = FastAPI(title="Driving OpenEnv", version="0.1.0") | |
| _env = DrivingEnv() | |
| def root() -> dict: | |
| return { | |
| "name": "driving_sim", | |
| "version": "0.1.0", | |
| "endpoints": ["/reset", "/step", "/state", "/spec", "/health"], | |
| "api_base_url": os.environ.get("API_BASE_URL", ""), | |
| "model_name": os.environ.get("MODEL_NAME", ""), | |
| } | |
| def health() -> dict: | |
| return {"status": "ok"} | |
| def spec() -> SpecResponse: | |
| return SpecResponse() | |
| def reset(req: Optional[ResetRequest] = Body(default=None)) -> StateResponse: | |
| req = req or ResetRequest() | |
| try: | |
| _env.reset(task=req.task, seed=req.seed) | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| return _env.state() | |
| def reset_get(task: str = "lane_follow", seed: Optional[int] = None) -> StateResponse: | |
| try: | |
| _env.reset(task=task, seed=seed) # type: ignore[arg-type] | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| return _env.state() | |
| def step(req: Optional[StepRequest] = Body(default=None)) -> StepResponse: | |
| if req is None: | |
| raise HTTPException(status_code=400, detail="Request body with 'action' is required.") | |
| return _env.step(req.action) | |
| def state() -> StateResponse: | |
| return _env.state() | |