| from fastapi import FastAPI |
| from pydantic import BaseModel |
| import sys |
| import os |
|
|
| sys.path.insert(0, os.path.abspath('..')) |
|
|
| from env.cache import DriftCDNEnv |
| from env.models import Action |
|
|
| class ActionInput(BaseModel): |
| evict_file_id: str = None |
|
|
| class CDNEnvServer: |
| def __init__(self): |
| self.env = DriftCDNEnv(task_id='task_hard', seed=42) |
| |
| def reset(self): |
| obs = self.env.reset() |
| return obs.dict() |
| |
| def step(self, action_dict): |
| action = Action(evict_file_id=action_dict.get('evict_file_id')) |
| result = self.env.step(action) |
| return { |
| 'observation': result.observation.dict(), |
| 'reward': result.reward.total, |
| 'done': result.done, |
| 'info': result.info |
| } |
| |
| def state(self): |
| return self.env.state() |
|
|
| app = FastAPI() |
| env_server = CDNEnvServer() |
|
|
| @app.post("/reset") |
| def reset(): |
| return env_server.reset() |
|
|
| @app.post("/step") |
| def step(action: ActionInput): |
| return env_server.step(action.dict()) |
|
|
| @app.get("/state") |
| def get_state(): |
| return env_server.state() |
|
|
| @app.get("/health") |
| def health(): |
| return {"status": "ok"} |