Dhrona1421/multimodal-content-moderation
0
1"""2Strict OpenEnv adapter exposing the canonical environment API:3 - reset()4 - step(action)5 - state()6 7This wrapper keeps the task logic in ContentModerationEnv while presenting8the exact method surface expected by hackathon validators and reviewers.9"""10 11from __future__ import annotations12 13from typing import Any, Dict, Optional, Tuple14 15from env import ContentModerationEnv16from schemas import ActionModel, ObservationModel, RewardModel, StepInfoModel17 18 19class OpenEnvModerationEnv:20 """Canonical OpenEnv interface wrapper for content moderation."""21 22 ObservationModel = ObservationModel23 ActionModel = ActionModel24 RewardModel = RewardModel25 StepInfoModel = StepInfoModel26 27 def __init__(28 self,29 dataset_path: str = "moderation_dataset.json",30 task: str = "medium",31 max_steps: int = 12,32 seed: Optional[int] = None,33 severity_scale: float = 0.3,34 calib_weight: float = 0.15,35 ) -> None:36 self._env = ContentModerationEnv(37 dataset_path=dataset_path,38 task=task,39 max_steps=max_steps,40 seed=seed,41 severity_scale=severity_scale,42 calib_weight=calib_weight,43 )44 45 def reset(self) -> Dict[str, Any]:46 """Reset episode and return initial observation."""47 return self._env.reset()48 49 def step(self, action: Dict[str, Any]) -> Tuple[Dict[str, Any], float, bool, Dict[str, Any]]:50 """Execute one action and return (observation, reward, done, info)."""51 return self._env.step(action)52 53 def state(self) -> Dict[str, Any]:54 """Return current observation without advancing state."""55 return self._env.state()56 57 @property58 def max_steps(self) -> int:59 return self._env.max_steps60 61 @property62 def contract(self) -> Dict[str, Any]:63 return self._env.contract64 