from typing import Dict MIN_REWARD: float = -2.5 MAX_REWARD: float = 1.0 def _is_destructive(action: str) -> bool: destructive_keywords = ["delete", "remove", "drop"] critical_targets = ["function", "class"] action_lower = action.lower() return any(k in action_lower for k in destructive_keywords) and any( t in action_lower for t in critical_targets ) def compute_reward(state: Dict, action: str, base_score: float) -> float: reward = base_score reward -= 0.02 if _is_destructive(action): reward -= 2.0 reward = max(MIN_REWARD, min(MAX_REWARD, reward)) return round(reward, 2)