cloud-ops-optimizer / client.py
hirann's picture
Upload folder using huggingface_hub
dc42cb3 verified
Raw History Blame Contribute Delete
1.83 kB
"""CloudOps Optimizer Environment Client.
Provides the async EnvClient for connecting to the server.
"""
from typing import Any, Dict, Optional
try:
from openenv.core.env_client import EnvClient
from openenv.core.client_types import StepResult
except ImportError:
from openenv.core.env_client import EnvClient
from openenv.core.client_types import StepResult
from models import Observation as ObsModel, Action as ActModel
class CloudOpsClient(EnvClient[ActModel, ObsModel, Dict[str, Any]]):
"""Async client for the CloudOps Optimizer Environment."""
def _step_payload(self, action: ActModel) -> Dict[str, Any]:
return action.model_dump()
def _parse_result(self, payload: Dict[str, Any]) -> "StepResult[ObsModel]":
obs_data = payload.get("observation", payload)
reward = payload.get("reward", 0.0)
done = payload.get("done", False)
info = payload.get("info", {})
try:
observation = ObsModel.model_validate(obs_data)
except Exception:
observation = ObsModel(
inventory=[],
metrics=payload.get("metrics", {"avg_latency_ms": 0, "error_rate": 0, "throughput_rps": 0}),
sla=payload.get("sla", {"max_latency_ms": 0, "max_budget": 0, "min_uptime_pct": 0}),
echoed_message="Error parsing observation",
)
return StepResult(
observation=observation,
reward=reward,
done=done,
info=info,
)
def _parse_state(self, payload: Dict[str, Any]) -> Dict[str, Any]:
return payload
def get_client(base_url: str = "http://localhost:7860") -> CloudOpsClient:
"""Create a CloudOps client."""
return CloudOpsClient(base_url=base_url)
__all__ = ["CloudOpsClient", "get_client"]