Skip to content

Commit 803c303

Browse files
committed
cp
1 parent d04ce1f commit 803c303

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1449
-594
lines changed

packages/cogames/src/cogames/cli/mission.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,6 @@ def describe_mission(mission_name: str, game_config: MettaGridConfig, mission_cf
533533

534534
# Display agent configuration
535535
console.print("\n[bold]Agent Configuration:[/bold]")
536-
console.print(f" • Default resource limit: {game_config.game.agent.default_resource_limit}")
537-
if game_config.game.agent.resource_limits:
538-
console.print(f" • Resource limits: {game_config.game.agent.resource_limits}")
536+
console.print(f" • Default resource limit: {game_config.game.agent.inventory.default_limit}")
537+
if game_config.game.agent.inventory.limits:
538+
console.print(f" • Resource limits: {game_config.game.agent.inventory.limits}")

packages/cogames/src/cogames/cogs_vs_clips/evals/diagnostic_evals.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -166,24 +166,24 @@ def _post(cfg: MettaGridConfig) -> None:
166166
def _apply_inventory_seed(self, cfg: MettaGridConfig) -> None:
167167
if not self.inventory_seed:
168168
return
169-
seed = dict(cfg.game.agent.initial_inventory)
169+
seed = dict(cfg.game.agent.inventory.initial)
170170
seed.update(self.inventory_seed)
171-
cfg.game.agent.initial_inventory = seed
171+
cfg.game.agent.inventory.initial = seed
172172

173173
def _apply_communal_chest(self, cfg: MettaGridConfig) -> None:
174174
if self.communal_chest_hearts is None:
175175
return
176176
chest = cfg.game.objects.get("communal_chest")
177177
if isinstance(chest, ChestConfig):
178-
chest.initial_inventory = {"heart": self.communal_chest_hearts}
178+
chest.inventory.initial = {"heart": self.communal_chest_hearts}
179179

180180
def _apply_resource_chests(self, cfg: MettaGridConfig) -> None:
181181
if not self.resource_chest_stock:
182182
return
183183
for resource, amount in self.resource_chest_stock.items():
184184
chest_cfg = cfg.game.objects.get(f"chest_{resource}")
185185
if isinstance(chest_cfg, ChestConfig):
186-
chest_cfg.initial_inventory = {resource: amount}
186+
chest_cfg.inventory.initial = {resource: amount}
187187

188188
def _apply_extractor_settings(self, cfg: MettaGridConfig) -> None:
189189
for resource in RESOURCE_NAMES:
@@ -250,9 +250,9 @@ def _apply_heart_reward_cap(self, cfg: MettaGridConfig) -> None:
250250
if not isinstance(obj, ChestConfig):
251251
continue
252252
# Find existing heart limit or create new one
253-
heart_limit = obj.resource_limits.get("heart", ResourceLimitsConfig(limit=1, resources=["heart"]))
253+
heart_limit = obj.inventory.limits.get("heart", ResourceLimitsConfig(limit=1, resources=["heart"]))
254254
heart_limit.limit = 1
255-
obj.resource_limits["heart"] = heart_limit
255+
obj.inventory.limits["heart"] = heart_limit
256256

257257
def _ensure_minimal_heart_recipe(self, assembler: AssemblerConfig) -> None:
258258
minimal_inputs = {
@@ -445,7 +445,7 @@ def configure_env(self, cfg: MettaGridConfig) -> None:
445445
assembler.protocols = updated_protocols
446446

447447
agent_cfg = cfg.game.agent
448-
inventory = dict(agent_cfg.initial_inventory)
448+
inventory = dict(agent_cfg.inventory.initial)
449449
for res in resources:
450450
inventory.pop(res, None)
451451

@@ -460,7 +460,7 @@ def configure_env(self, cfg: MettaGridConfig) -> None:
460460
else:
461461
inventory.pop("decoder", None)
462462

463-
agent_cfg.initial_inventory = inventory
463+
agent_cfg.inventory.initial = inventory
464464

465465

466466
class DiagnosticUnclipCraft(_UnclipBase):
@@ -496,9 +496,9 @@ class DiagnosticChargeUp(_DiagnosticMissionBase):
496496
def configure_env(self, cfg: MettaGridConfig) -> None:
497497
# Set starting energy to 30 and no regen
498498
agent = cfg.game.agent
499-
agent.initial_inventory = dict(agent.initial_inventory)
500-
agent.initial_inventory["energy"] = 60
501-
agent.inventory_regen_amounts = {"default": {"energy": 0}}
499+
agent.inventory.initial = dict(agent.inventory.initial)
500+
agent.inventory.initial["energy"] = 60
501+
agent.inventory.regen_amounts = {"default": {"energy": 0}}
502502

503503

504504
class DiagnosticAgile(_DiagnosticMissionBase):
@@ -541,10 +541,10 @@ class DiagnosticRadial(_DiagnosticMissionBase):
541541

542542
def configure_env(self, cfg: MettaGridConfig) -> None:
543543
agent = cfg.game.agent
544-
inventory = dict(agent.initial_inventory)
544+
inventory = dict(agent.inventory.initial)
545545
inventory["energy"] = 255
546-
agent.initial_inventory = inventory
547-
agent.inventory_regen_amounts = {"default": {"energy": 255}}
546+
agent.inventory.initial = inventory
547+
agent.inventory.regen_amounts = {"default": {"energy": 255}}
548548

549549

550550
# ----------------------------------------------------------------------
@@ -601,9 +601,9 @@ class DiagnosticChargeUpHard(_DiagnosticMissionBase):
601601
def configure_env(self, cfg: MettaGridConfig) -> None:
602602
# Set starting energy to 30 and no regen
603603
agent = cfg.game.agent
604-
agent.initial_inventory = dict(agent.initial_inventory)
605-
agent.initial_inventory["energy"] = 60
606-
agent.inventory_regen_amounts = {"default": {"energy": 0}}
604+
agent.inventory.initial = dict(agent.inventory.initial)
605+
agent.inventory.initial["energy"] = 60
606+
agent.inventory.regen_amounts = {"default": {"energy": 0}}
607607

608608

609609
class DiagnosticMemoryHard(_DiagnosticMissionBase):
@@ -690,10 +690,10 @@ class DiagnosticRadialHard(_DiagnosticMissionBase):
690690

691691
def configure_env(self, cfg: MettaGridConfig) -> None:
692692
agent = cfg.game.agent
693-
inventory = dict(agent.initial_inventory)
693+
inventory = dict(agent.inventory.initial)
694694
inventory["energy"] = 255
695-
agent.initial_inventory = inventory
696-
agent.inventory_regen_amounts = {"default": {"energy": 255}}
695+
agent.inventory.initial = inventory
696+
agent.inventory.regen_amounts = {"default": {"energy": 255}}
697697

698698

699699
DIAGNOSTIC_EVALS: list[type[_DiagnosticMissionBase]] = [

packages/cogames/src/cogames/cogs_vs_clips/evals/difficulty_variants.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,12 @@ def modify_env(self, mission: Mission, env: MettaGridConfig):
206206
obj.max_uses = obj.max_uses * num_agents
207207

208208
# Energy regen floor: if nonzero, keep at least 1
209-
default_regen = env.game.agent.inventory_regen_amounts.get("default", {})
209+
default_regen = env.game.agent.inventory.regen_amounts.get("default", {})
210210
current_regen = default_regen.get("energy", 1)
211211
if current_regen > 0:
212-
if "default" not in env.game.agent.inventory_regen_amounts:
213-
env.game.agent.inventory_regen_amounts["default"] = {}
214-
env.game.agent.inventory_regen_amounts["default"]["energy"] = max(ENERGY_REGEN_FLOOR, current_regen)
212+
if "default" not in env.game.agent.inventory.regen_amounts:
213+
env.game.agent.inventory.regen_amounts["default"] = {}
214+
env.game.agent.inventory.regen_amounts["default"]["energy"] = max(ENERGY_REGEN_FLOOR, current_regen)
215215

216216
def _apply_clipping(self, cfg: MettaGridConfig) -> None:
217217
target = self.clip_target

packages/cogames/src/cogames/cogs_vs_clips/mission.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
ClipperConfig,
2727
GameConfig,
2828
GlobalObsConfig,
29+
InventoryConfig,
2930
MettaGridConfig,
3031
MoveActionConfig,
3132
NoopActionConfig,
@@ -180,25 +181,25 @@ def make_env(self) -> MettaGridConfig:
180181
),
181182
),
182183
agent=AgentConfig(
183-
resource_limits={
184-
"heart": ResourceLimitsConfig(limit=self.heart_capacity, resources=["heart"]),
185-
"energy": ResourceLimitsConfig(limit=self.energy_capacity, resources=["energy"]),
186-
"cargo": ResourceLimitsConfig(
187-
limit=self.cargo_capacity, resources=["carbon", "oxygen", "germanium", "silicon"]
188-
),
189-
"gear": ResourceLimitsConfig(
190-
limit=self.gear_capacity, resources=["scrambler", "modulator", "decoder", "resonator"]
191-
),
192-
},
184+
inventory=InventoryConfig(
185+
limits={
186+
"heart": ResourceLimitsConfig(limit=self.heart_capacity, resources=["heart"]),
187+
"energy": ResourceLimitsConfig(limit=self.energy_capacity, resources=["energy"]),
188+
"cargo": ResourceLimitsConfig(
189+
limit=self.cargo_capacity, resources=["carbon", "oxygen", "germanium", "silicon"]
190+
),
191+
"gear": ResourceLimitsConfig(
192+
limit=self.gear_capacity, resources=["scrambler", "modulator", "decoder", "resonator"]
193+
),
194+
},
195+
initial={"energy": self.energy_capacity},
196+
regen_amounts={"default": {"energy": self.energy_regen_amount}},
197+
),
193198
rewards=AgentRewards(
194199
# Reward only the agent that deposits a heart.
195200
stats={"chest.heart.deposited_by_agent": 1.0},
196201
),
197-
initial_inventory={
198-
"energy": self.energy_capacity,
199-
},
200202
vibe_transfers={"charger": {"energy": 20}},
201-
inventory_regen_amounts={"default": {"energy": self.energy_regen_amount}},
202203
diversity_tracked_resources=["energy", "carbon", "oxygen", "germanium", "silicon", "heart"],
203204
),
204205
inventory_regen_interval=self.inventory_regen_interval,

packages/cogames/src/cogames/cogs_vs_clips/stations.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22

33
from mettagrid.base_config import Config
44
from mettagrid.config import vibes
5-
from mettagrid.config.mettagrid_config import AssemblerConfig, ChestConfig, GridObjectConfig, ProtocolConfig, WallConfig
5+
from mettagrid.config.mettagrid_config import (
6+
AssemblerConfig,
7+
ChestConfig,
8+
GridObjectConfig,
9+
InventoryConfig,
10+
ProtocolConfig,
11+
WallConfig,
12+
)
613

714
resources = [
815
"energy",
@@ -190,7 +197,7 @@ def station_cfg(self) -> ChestConfig:
190197
"silicon_a": {"silicon": -25},
191198
"silicon_b": {"silicon": 25},
192199
},
193-
initial_inventory=self.initial_inventory,
200+
inventory=InventoryConfig(initial=self.initial_inventory),
194201
)
195202

196203

packages/cogames/src/cogames/cogs_vs_clips/variants.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,24 +336,24 @@ def modify_env(self, mission, env) -> None:
336336

337337
if hearts > 0:
338338
agent_cfg = env.game.agent
339-
agent_cfg.initial_inventory = dict(agent_cfg.initial_inventory)
339+
agent_cfg.inventory.initial = dict(agent_cfg.inventory.initial)
340340

341341
def _limit_for(resource: str) -> int:
342-
return agent_cfg.get_limit_for_resource(resource)
342+
return agent_cfg.inventory.get_limit(resource)
343343

344344
for resource_name, per_heart_value in per_heart.items():
345-
current = int(agent_cfg.initial_inventory.get(resource_name, 0))
345+
current = int(agent_cfg.inventory.initial.get(resource_name, 0))
346346
target = current + per_heart_value * hearts
347347
cap = _limit_for(resource_name)
348-
agent_cfg.initial_inventory[resource_name] = min(cap, target)
348+
agent_cfg.inventory.initial[resource_name] = min(cap, target)
349349

350350
if self.heart_capacity is not None:
351351
agent_cfg = env.game.agent
352-
hearts_limit = agent_cfg.resource_limits.get("heart")
352+
hearts_limit = agent_cfg.inventory.limits.get("heart")
353353
if hearts_limit is None:
354354
hearts_limit = ResourceLimitsConfig(limit=self.heart_capacity, resources=["heart"])
355355
hearts_limit.limit = max(int(hearts_limit.limit), int(self.heart_capacity))
356-
agent_cfg.resource_limits["heart"] = hearts_limit
356+
agent_cfg.inventory.limits["heart"] = hearts_limit
357357

358358

359359
class ChestHeartTuneVariant(MissionVariant):
@@ -376,10 +376,10 @@ def modify_env(self, mission, env) -> None:
376376
chest_cfg = env.game.objects["chest"]
377377
if not isinstance(chest_cfg, ChestConfig):
378378
raise TypeError("Expected 'chest' to be ChestConfig")
379-
start = dict(chest_cfg.initial_inventory)
379+
start = dict(chest_cfg.inventory.initial)
380380
for k, v in per_heart.items():
381381
start[k] = start.get(k, 0) + v * hearts
382-
chest_cfg.initial_inventory = start
382+
chest_cfg.inventory.initial = start
383383

384384

385385
class ExtractorHeartTuneVariant(MissionVariant):

packages/cogames/tests/test_cogs_vs_clips.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ def test_inventory_heart_tune_caps_initial_inventory_to_limits():
5454
env = mission.make_env()
5555
agent = env.game.agent
5656

57-
# Find energy limit from resource_limits list
58-
energy_limit = agent.get_limit_for_resource("energy")
59-
assert agent.initial_inventory["energy"] == energy_limit
57+
# Find energy limit from inventory.limits
58+
energy_limit = agent.inventory.get_limit("energy")
59+
assert agent.inventory.initial["energy"] == energy_limit
6060

6161

6262
def _station_configs(mission: Mission) -> list[CvCStationConfig]:

packages/cogames/tests/test_cvc_assembler_hearts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
def _make_simulation() -> Simulation:
3636
cfg = MettaGridConfig.EmptyRoom(num_agents=4, with_walls=True)
3737
cfg.game.resource_names = RESOURCES
38-
cfg.game.agent.default_resource_limit = 255
39-
cfg.game.agent.resource_limits = {name: ResourceLimitsConfig(limit=255, resources=[name]) for name in RESOURCES}
40-
cfg.game.agent.initial_inventory = {name: 0 for name in RESOURCES}
38+
cfg.game.agent.inventory.default_limit = 255
39+
cfg.game.agent.inventory.limits = {name: ResourceLimitsConfig(limit=255, resources=[name]) for name in RESOURCES}
40+
cfg.game.agent.inventory.initial = {name: 0 for name in RESOURCES}
4141

4242
cfg.game.actions.noop.enabled = True
4343
cfg.game.actions.move.enabled = True

packages/mettagrid/cpp/bindings/mettagrid_c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ MettaGrid::MettaGrid(const GameConfig& game_config, const py::list map, unsigned
6868

6969
_grid = std::make_unique<Grid>(height, width);
7070
_obs_encoder = std::make_unique<ObservationEncoder>(
71-
game_config.protocol_details_obs, resource_names, game_config.feature_ids);
71+
game_config.protocol_details_obs, resource_names, game_config.feature_ids, game_config.token_value_max);
7272

7373
// Initialize ObservationFeature namespace with feature IDs
7474
ObservationFeature::Initialize(game_config.feature_ids);

packages/mettagrid/cpp/include/mettagrid/actions/attack.hpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,8 @@ class Attack : public ActionHandler {
148148
snapshot.emplace_back(item, amount);
149149
}
150150

151-
// Transfer resources (excluding soul-bound resources)
151+
// Transfer resources
152152
for (const auto& [item, amount] : snapshot) {
153-
// Check if this resource is soul-bound for the target
154-
if (std::find(target.soul_bound_resources.begin(), target.soul_bound_resources.end(), item) !=
155-
target.soul_bound_resources.end()) {
156-
// Skip soul-bound resources
157-
continue;
158-
}
159-
160153
InventoryDelta stolen = actor.inventory.update(item, amount);
161154
target.inventory.update(item, -stolen);
162155

0 commit comments

Comments
 (0)