counsel-env / server /rubrics.py
heavycoderhh's picture
Upload folder using huggingface_hub
96a73f4 verified
Raw
History Blame Contribute Delete
1.47 kB
from typing import Any
from openenv.core.rubrics import Rubric
from openenv.core.rubrics.containers import WeightedSum
def _component(observation: Any, name: str, default: float = 0.0) -> float:
components = getattr(observation, "reward_components", None)
if isinstance(components, dict):
return float(components.get(name, default))
if isinstance(observation, dict):
return float(observation.get(name, default))
return float(getattr(observation, name, default))
class ContradictionsSurfaced(Rubric):
"""Primary signal: normalized binary-per-contradiction success."""
def forward(self, action: Any, observation: Any) -> float:
return _component(observation, "primary_reward", 0.0)
class AuxiliaryProgress(Rubric):
"""Dense shaping signal used only as a minority component."""
def forward(self, action: Any, observation: Any) -> float:
return max(-1.0, min(1.0, _component(observation, "auxiliary_reward_raw", 0.0)))
class Total(Rubric):
"""OpenEnv rubric tree: primary reward dominates auxiliary shaping."""
def __init__(self):
super().__init__()
self.primary = ContradictionsSurfaced()
self.auxiliary = AuxiliaryProgress()
self.combined = WeightedSum(
[self.primary, self.auxiliary],
weights=[0.8, 0.2],
)
def forward(self, action: Any, observation: Any) -> float:
return self.combined(action, observation)