Spaces:
Sleeping
Sleeping
| from pathlib import Path | |
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from app.environment.core import ACDEEnvironment | |
| from app.models.action import Action | |
| from app.models.observation import Observation | |
| from app.models.reward import StepInfo, GraderResult, RewardModel, RewardBreakdown | |
| from app.models.state import EnvState | |
| ROOT = Path(__file__).resolve().parents[2] | |
| MEMORY_FILE = ROOT / "data" / "learning_memory.json" | |
| app = FastAPI(title="Adaptive Crisis Decision Environment", version="1.0.0") | |
| env = ACDEEnvironment(memory_file=str(MEMORY_FILE)) | |
| MIN_REWARD = 0.001 | |
| class ResetRequest(BaseModel): | |
| seed: int | None = None | |
| task_id: str | None = None | |
| class StepResponse(BaseModel): | |
| observation: Observation | |
| reward: float | |
| done: bool | |
| info: StepInfo | |
| def root() -> dict: | |
| return { | |
| "message": "ACDE API is running", | |
| "where_to_see_output": "Run 'python inference.py' in terminal. Output is printed in terminal, not browser.", | |
| "quick_check": "/health", | |
| "api_docs": "/docs", | |
| } | |
| def web() -> dict: | |
| # Some HF views probe /web; return the same healthful payload as root. | |
| return root() | |
| def health() -> dict: | |
| return {"status": "ok"} | |
| def reset(payload: ResetRequest | None = None) -> StepResponse: | |
| seed = payload.seed if payload else None | |
| task_id = payload.task_id if payload else None | |
| obs = env.reset(seed=seed, task_id=task_id) | |
| info = env.last_info if env.last_info else StepInfo(task_id="acde_medium", difficulty="medium", objective="", progress_score=MIN_REWARD, reward_model=RewardModel(value=MIN_REWARD, breakdown=RewardBreakdown(survival_component=MIN_REWARD, time_efficiency_component=MIN_REWARD, specialization_component=MIN_REWARD, delay_penalty=MIN_REWARD)), grader=GraderResult(task_id="acde_medium", difficulty="medium", objective="", score=MIN_REWARD, passed=False, criteria={}), last_action_error=None, outcome=None) | |
| return StepResponse(observation=obs, reward=MIN_REWARD, done=False, info=info) | |
| def step(action: Action) -> StepResponse: | |
| try: | |
| result = env.step(action) | |
| except ValueError as exc: | |
| raise HTTPException(status_code=400, detail=str(exc)) from exc | |
| return StepResponse( | |
| observation=result["observation"], | |
| reward=float(result["reward"]), | |
| done=bool(result["done"]), | |
| info=result.get("info", {}), | |
| ) | |
| def state() -> EnvState: | |
| return env.state() | |