Rishav
Tighten role training scaffold
a2144da
Raw
History Blame Contribute Delete
6.19 kB
from __future__ import annotations
from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field
SKU = Literal["fresh_milk", "rice_bag_5kg", "insulin_pack", "usb_c_charger"]
OrderStatus = Literal["pending", "accepted", "rejected", "fulfilled", "expired"]
Decision = Literal["accept", "reject"]
class DifficultyProfile(BaseModel):
model_config = ConfigDict(frozen=True)
task_id: str
warehouse_count: int
total_rounds: int
depot_trucks: int
depot_replenishment_cap: int
depot_procurement_cap: int
depot_procurement_lead_time: int
transfer_cap: int
class WarehouseSpec(BaseModel):
model_config = ConfigDict(frozen=True)
warehouse_id: str
label: str
region: str
safety_stock: dict[SKU, int]
route_costs: dict[str, float]
route_times: dict[str, int]
class OrderTemplate(BaseModel):
model_config = ConfigDict(frozen=True)
order_id: str
created_round: int
warehouse_id: str
sku: SKU
units: int
customer_value_per_unit: float
deadline_round: int
class HiddenRecipe(BaseModel):
model_config = ConfigDict(frozen=True)
task_id: str
seed: int
profile: DifficultyProfile
warehouse_specs: tuple[WarehouseSpec, ...]
initial_inventory: dict[str, dict[SKU, int]]
initial_drivers: dict[str, int]
central_depot_inventory: dict[SKU, int]
orders: tuple[OrderTemplate, ...]
public_forecasts: tuple[dict[str, Any], ...] = Field(default_factory=tuple)
class LocalOrderSnapshot(BaseModel):
order_id: str
sku: SKU
units: int
customer_value_per_unit: float
created_round: int
deadline_round: int
status: OrderStatus
class PendingTransferProposal(BaseModel):
proposal_id: str
from_warehouse: str
to_warehouse: str
sku: SKU
units: int
compensation: float
class WarehouseObservation(BaseModel):
warehouse_id: str
label: str
region: str
inventory: dict[SKU, int]
inventory_age: dict[SKU, float] = Field(default_factory=dict)
drivers_available: int
local_orders: list[LocalOrderSnapshot]
order_action_context: list[dict[str, Any]] = Field(default_factory=list)
pending_transfer_proposals: list[PendingTransferProposal] = Field(default_factory=list)
safety_stock: dict[SKU, int]
route_costs: dict[str, float]
last_reward: float = 0.0
class CenterObservation(BaseModel):
round_index: int
remaining_rounds: int
depot_inventory: dict[SKU, int]
depot_inventory_age: dict[SKU, float] = Field(default_factory=dict)
depot_trucks_available: int
inbound_procurements: list[dict[str, int | str]] = Field(default_factory=list)
warehouse_summaries: list[dict[str, Any]] = Field(default_factory=list)
market_signals: list[dict[str, Any]] = Field(default_factory=list)
pending_transfer_proposals: list[PendingTransferProposal] = Field(default_factory=list)
price_bands: dict[str, dict[str, float]] = Field(default_factory=dict)
class OrderDecision(BaseModel):
order_id: str
decision: Decision
class InventoryOffer(BaseModel):
sku: SKU
units: int
ask_price: float
class InventoryRequest(BaseModel):
sku: SKU
units: int
max_price: float
class TransferResponse(BaseModel):
proposal_id: str
decision: Decision
class LocalPriority(BaseModel):
sku: SKU
priority: int = 1
class WarehouseAction(BaseModel):
model_config = ConfigDict(extra="forbid")
order_decisions: list[OrderDecision] = Field(default_factory=list)
inventory_offers: list[InventoryOffer] = Field(default_factory=list)
inventory_requests: list[InventoryRequest] = Field(default_factory=list)
transfer_responses: list[TransferResponse] = Field(default_factory=list)
local_priority: list[LocalPriority] = Field(default_factory=list)
class CentralProcurement(BaseModel):
sku: SKU
units: int
max_unit_cost: float
class CentralLiquidation(BaseModel):
sku: SKU
units: int
class CentralReplenishment(BaseModel):
to_warehouse: str
sku: SKU
units: int
unit_price: float
class InventoryTransferProposal(BaseModel):
from_warehouse: str
to_warehouse: str
sku: SKU
units: int
compensation: float
class OfferMatch(BaseModel):
offer_signal_id: str
request_signal_id: str
units: int
compensation: float
class CenterAction(BaseModel):
model_config = ConfigDict(extra="forbid")
central_procurements: list[CentralProcurement] = Field(default_factory=list)
central_liquidations: list[CentralLiquidation] = Field(default_factory=list)
central_replenishments: list[CentralReplenishment] = Field(default_factory=list)
inventory_transfer_proposals: list[InventoryTransferProposal] = Field(default_factory=list)
offer_matches: list[OfferMatch] = Field(default_factory=list)
class V2JointAction(BaseModel):
warehouse_actions: dict[str, WarehouseAction] = Field(default_factory=dict)
central_action: CenterAction = Field(default_factory=CenterAction)
class V2WarehouseRoleAction(BaseModel):
warehouse_actions: dict[str, WarehouseAction] = Field(default_factory=dict)
class V2Reward(BaseModel):
step_reward: float
cumulative_reward: float
components: dict[str, float] = Field(default_factory=dict)
class V2Observation(BaseModel):
round_index: int
remaining_rounds: int
task_id: str
scenario_info: dict[str, Any] = Field(default_factory=dict)
center: CenterObservation
warehouses: dict[str, WarehouseObservation]
feedback: dict[str, Any] = Field(default_factory=dict)
class V2StepResult(BaseModel):
observation: V2Observation
reward: V2Reward
done: bool
info: dict[str, Any]
class V2TaskResult(BaseModel):
task_id: str
raw_reward: float
baseline_reward: float
target_reward: float
score: float
center_reward: float
average_warehouse_reward: float
baseline_center_reward: float = 0.0
target_center_reward: float = 0.0
center_role_score: float = 0.0
baseline_warehouse_reward: float = 0.0
target_warehouse_reward: float = 0.0
warehouse_role_score: float = 0.0