BAIBHAV1234's picture
Upload folder using huggingface_hub
ef41468 verified
from __future__ import annotations
import os
from fastapi import FastAPI
import uvicorn
from models import SepsisAction, SepsisObservation, SepsisState
from openenv_compat import OPENENV_AVAILABLE, create_app
from server.sepsis_environment import SepsisTreatmentEnvironment
if OPENENV_AVAILABLE and create_app is not None:
app = create_app(SepsisTreatmentEnvironment, SepsisAction, SepsisObservation, env_name="sepsis-openenv")
else:
environment = SepsisTreatmentEnvironment()
app = FastAPI(title="Sepsis OpenEnv", version="0.1.0")
@app.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}
@app.get("/metadata")
def metadata() -> dict:
return environment.metadata()
@app.get("/schema")
def schema() -> dict:
return {
"action_schema": SepsisAction.model_json_schema(),
"observation_schema": SepsisObservation.model_json_schema(),
"state_schema": SepsisState.model_json_schema(),
}
@app.post("/reset")
def reset(payload: dict | None = None) -> dict:
task_id = None
if payload:
task_id = payload.get("task_id")
observation = environment.reset(task_id=task_id)
return {
"observation": observation.model_dump(),
"reward": 0.0,
"done": False,
"info": {
"tasks": environment.available_tasks(),
"metrics": environment.current_metrics(),
},
}
@app.post("/step")
def step(payload: dict) -> dict:
action = SepsisAction(**payload)
observation = environment.step(action)
return {
"observation": observation.model_dump(),
"reward": observation.reward,
"done": observation.done,
"info": {
"metrics": environment.current_metrics(),
},
}
@app.get("/state")
def state() -> dict:
return environment.state.model_dump()
def main() -> None:
port = int(os.getenv("PORT", "7860"))
uvicorn.run("server.app:app", host="0.0.0.0", port=port)
if __name__ == "__main__":
main()