File size: 1,519 Bytes
e3e3da2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c547cb1
e3e3da2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from enum import Enum
from typing import List, Optional
from pydantic import BaseModel, Field

class TransportMode(str, Enum):
    SEA = "sea"
    AIR = "air"
    RAIL = "rail"
    ROAD = "road"

class PartType(str, Enum):
    CHIPS = "chips"
    SENSORS = "sensors"
    BATTERIES = "batteries"
    CASING = "casing"

class Shipment(BaseModel):
    id: str
    part: PartType
    quantity: int
    mode: TransportMode
    eta: int  # steps remaining
    carbon_impact: float
    cost: float

class Order(BaseModel):
    id: str
    product: str
    quantity: int
    due_date: int
    reward: float

class Inventory(BaseModel):
    chips: int = 0
    sensors: int = 0
    batteries: int = 0
    casing: int = 0

class Observation(BaseModel):
    step: int
    inventory: Inventory
    active_shipments: List[Shipment]
    pending_orders: List[Order]
    carbon_total: float
    carbon_quota: float
    cash_balance: float
    news: Optional[str] = None

class ActionType(str, Enum):
    ORDER_PARTS = "order_parts"
    REROUTE = "reroute"
    PRODUCE = "produce"
    OFFSET = "offset"
    SKIP = "skip"
    CANCEL = "cancel"

class Action(BaseModel):
    action_type: ActionType
    part_type: Optional[PartType] = None
    quantity: Optional[int] = None
    mode: Optional[TransportMode] = None
    shipment_id: Optional[str] = None
    product: Optional[str] = None
    offset_amount: Optional[float] = None

class StepResponse(BaseModel):
    observation: Observation
    reward: float
    done: bool
    info: dict