from __future__ import annotations from dataclasses import dataclass from typing import Any, Dict, List, Optional, Tuple @dataclass class Action: variant: str fidelity: str knobs: Dict[str, Any] class Agent: def propose(self) -> Action: raise NotImplementedError def observe( self, action: Action, ok: bool, reward: Optional[float], metrics_flat: Optional[Dict[str, Any]], ) -> None: raise NotImplementedError