CloudFinOpsEnv / models /action.py
jacklachan's picture
Upload folder using huggingface_hub
daace4d verified
Raw
History Blame Contribute Delete
2.08 kB
"""
CloudFinOpsEnv — Action Models
Defines the 8 actions an agent can take:
- QUERY_METRICS: inspect resource usage (investigation)
- DELETE: permanently remove a resource
- STOP: stop a running instance (reversible)
- RESIZE: change instance/db tier
- DETACH: detach a volume from instance
- COMMIT_CHANGES: end episode and finalize savings
- LIST_RESOURCES: refresh the resource list
- CHECK_DEPS: check what depends on a resource
"""
from pydantic import BaseModel, Field
from typing import Optional
from enum import Enum
class ActionType(str, Enum):
"""The 8 actions available to the agent."""
QUERY_METRICS = "query_metrics" # Inspect a resource's 7-day usage
DELETE = "delete" # Permanently remove a resource
STOP = "stop" # Stop a running instance (can be restarted)
RESIZE = "resize" # Change instance/db tier (e.g., t3.large → t3.small)
DETACH = "detach" # Detach a volume from an instance
COMMIT_CHANGES = "commit_changes" # End episode, finalize all savings
LIST_RESOURCES = "list_resources" # Re-list all resources (refresh view)
CHECK_DEPS = "check_deps" # Check what other resources depend on this one
from openenv.core.env_server.types import Action as BaseAction
class Action(BaseAction):
"""
What the agent does at each step.
Every action requires an action_type. Some actions also need:
- resource_id: which resource to act on
- new_size: what to resize to (only for RESIZE)
- reason: agent's justification (for logging/debugging)
"""
action_type: ActionType = Field(description="The type of action to perform")
resource_id: Optional[str] = Field(default=None, description="Target resource ID")
new_size: Optional[str] = Field(default=None, description="New size/tier for RESIZE action (e.g., 't3.micro')")
reason: Optional[str] = Field(default=None, description="Agent's justification for the action")