DIME / agents /threshold_agent.py
Naseer-010's picture
added reward function normalization, hidden eval set
15673b8
Raw
History Blame Contribute Delete
1.27 kB
"""Classical threshold automation baseline for DIME."""
from __future__ import annotations
from typing import Any
from agents.base_agent import BaseAgent
from benchmark.utils import observation_to_dict
from server.models import InfraAction
class ThresholdAgent(BaseAgent):
"""Reactive autoscaler-style baseline."""
def act(self, observation: Any) -> InfraAction:
obs = observation_to_dict(observation)
cpu_loads = [float(v) for v in obs.get("cpu_loads", []) if float(v) >= 0.0]
avg_cpu = sum(cpu_loads) / len(cpu_loads) if cpu_loads else 0.0
latency = float(obs.get("latency_ms", 0.0) or 0.0)
failed_nodes = list(obs.get("failed_nodes", []) or [])
telemetry = obs.get("telemetry_status", {}) or {}
if failed_nodes:
return InfraAction(action_type="restart_node", target=int(failed_nodes[0]))
if avg_cpu > 0.80:
return InfraAction(action_type="scale_up")
if latency > 100.0:
return InfraAction(action_type="throttle", rate=0.7)
for node_idx, status in telemetry.items():
if status == "timeout":
return InfraAction(action_type="query_logs", target=int(node_idx))
return InfraAction(action_type="no_op")