File size: 3,306 Bytes
16bd852
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

"""Data models for the Cloud Queue Env queue operations environment."""

from openenv.core.env_server.types import Action, Observation
from pydantic import Field


class CloudQueueAction(Action):
    """Action model for queue control decisions."""

    action_type: str = Field(
        default="noop",
        description=(
            "One of: configure_task, admit, reject, route, dispatch, scale, reprioritize, noop"
        ),
    )
    target_queue: int | None = Field(default=None, description="Queue index for route/dispatch")
    target_server: int | None = Field(default=None, description="Server index for dispatch")
    scale_delta: int | None = Field(default=None, description="Server pool scale delta for scale action")
    new_priority: int | None = Field(default=None, description="Updated priority for reprioritize action")
    task_id: str | None = Field(default=None, description="Task selector: easy, medium, or hard")
    seed: int | None = Field(default=None, description="Deterministic seed for upcoming reset")


class CloudQueueObservation(Observation):
    """Observation model exposing queue system state to the agent."""

    task_id: str = Field(default="easy", description="Active benchmark task")
    sim_time: int = Field(default=0, description="Discrete simulation time step")
    horizon: int = Field(default=0, description="Episode horizon")
    queue_lengths: list[int] = Field(default_factory=list, description="Length per queue")
    queue_wait_ema: list[float] = Field(default_factory=list, description="EMA wait time per queue")
    server_busy: list[int] = Field(default_factory=list, description="1 if server is busy, else 0")
    server_remaining_service: list[float] = Field(
        default_factory=list,
        description="Remaining service time per server",
    )
    utilization: list[float] = Field(default_factory=list, description="Rolling utilization by server")
    incoming_job_present: bool = Field(default=False, description="Whether a new job is waiting for admission")
    incoming_job_size: float = Field(default=0.0, description="Incoming job estimated size")
    incoming_job_priority: int = Field(default=0, description="Incoming job priority")
    incoming_job_deadline: float = Field(default=0.0, description="Incoming job deadline")
    incoming_job_type: int = Field(default=0, description="Incoming job class/type id")
    sla_violation_rate: float = Field(default=0.0, description="Running SLA violation rate")
    abandonment_rate: float = Field(default=0.0, description="Running abandonment rate")
    throughput_recent: float = Field(default=0.0, description="Completed jobs in current step")
    energy_cost_rate: float = Field(default=0.0, description="Current infrastructure cost rate")
    level: float = Field(default=1.0, description="Difficulty level scalar")
    optional_history: list[float] = Field(default_factory=list, description="Compact recent context")
    action_mask: list[int] = Field(default_factory=list, description="Optional valid action hints")