pycityagent 2.0.0a83__cp311-cp311-macosx_11_0_arm64.whl → 2.0.0a85__cp311-cp311-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -112,6 +112,14 @@ class ConsumptionBlock(Block):
112
112
  for i in range(len(firms_id)):
113
113
  demand_each_firm.append(int(consumption_each_firm[i]//prices[i]))
114
114
  real_consumption = await self.economy_client.calculate_consumption(firms_id, agent_id, demand_each_firm)
115
+ if real_consumption == -1:
116
+ node_id = await self.memory.stream.add_economy(description=f"I failed to buy goods, cause I do not have enough money.")
117
+ return {
118
+ 'success': False,
119
+ 'evaluation': f"I failed to buy goods, cause I do not have enough money.",
120
+ 'consumed_time': 0,
121
+ 'node_id': node_id
122
+ }
115
123
  node_id = await self.memory.stream.add_economy(description=f"I bought some goods, and spent {real_consumption:.1f} on {intention}")
116
124
  evaluation = {
117
125
  'success': True,
@@ -3,7 +3,7 @@ import logging
3
3
  import re
4
4
  import time
5
5
  from collections.abc import Sequence
6
- from typing import Any, Literal, Union
6
+ from typing import Any, Literal, Union, cast
7
7
 
8
8
  import grpc
9
9
  import pycityproto.city.economy.v2.economy_pb2 as economyv2
@@ -83,17 +83,18 @@ class EconomyClient:
83
83
  - It establishes an asynchronous connection and provides methods to communicate with the service.
84
84
  """
85
85
 
86
- def __init__(self, server_address: str, secure: bool = False):
86
+ def __init__(
87
+ self,
88
+ server_address: str,
89
+ ):
87
90
  """
88
91
  Initialize the EconomyClient.
89
92
 
90
93
  - **Args**:
91
94
  - `server_address` (`str`): The address of the Economy server to connect to.
92
- - `secure` (`bool`, optional): Whether to use a secure connection. Defaults to `False`.
93
95
 
94
96
  - **Attributes**:
95
97
  - `server_address` (`str`): The address of the Economy server.
96
- - `secure` (`bool`): A flag indicating if a secure connection should be used.
97
98
  - `_aio_stub` (`OrgServiceStub`): A gRPC stub used to make remote calls to the Economy service.
98
99
 
99
100
  - **Description**:
@@ -102,6 +103,8 @@ class EconomyClient:
102
103
  - Instantiates a gRPC stub (`_aio_stub`) for interacting with the Economy service.
103
104
  """
104
105
  self.server_address = server_address
106
+
107
+ secure = self.server_address.startswith("https")
105
108
  self.secure = secure
106
109
  aio_channel = _create_aio_channel(server_address, secure)
107
110
  self._aio_stub = org_grpc.OrgServiceStub(aio_channel)
@@ -149,7 +152,9 @@ class EconomyClient:
149
152
  self._agent_ids = agent_ids
150
153
  self._org_ids = org_ids
151
154
 
152
- async def get_agent(self, id: Union[list[int], int]) -> economyv2.Agent:
155
+ async def get_agent(
156
+ self, id: Union[list[int], int]
157
+ ) -> Union[dict[str, Any], list[dict[str, Any]]]:
153
158
  """
154
159
  Get agent by id
155
160
 
@@ -160,17 +165,10 @@ class EconomyClient:
160
165
  - `economyv2.Agent`: The agent object.
161
166
  """
162
167
  start_time = time.time()
163
- log = {
164
- "req": "get_agent",
165
- "start_time": start_time,
166
- "consumption": 0
167
- }
168
+ log = {"req": "get_agent", "start_time": start_time, "consumption": 0}
168
169
  if isinstance(id, list):
169
170
  agents = await self._aio_stub.BatchGet(
170
- org_service.BatchGetRequest(
171
- ids=id,
172
- type="agent"
173
- )
171
+ org_service.BatchGetRequest(ids=id, type="agent")
174
172
  )
175
173
  agents = MessageToDict(agents)["agents"]
176
174
  agent_dicts = [camel_to_snake(agent) for agent in agents]
@@ -179,16 +177,16 @@ class EconomyClient:
179
177
  return agent_dicts
180
178
  else:
181
179
  agent = await self._aio_stub.GetAgent(
182
- org_service.GetAgentRequest(
183
- agent_id=id
184
- )
180
+ org_service.GetAgentRequest(agent_id=id)
185
181
  )
186
182
  agent_dict = MessageToDict(agent)["agent"]
187
183
  log["consumption"] = time.time() - start_time
188
184
  self._log_list.append(log)
189
185
  return camel_to_snake(agent_dict)
190
186
 
191
- async def get_org(self, id: Union[list[int], int]) -> economyv2.Org:
187
+ async def get_org(
188
+ self, id: Union[list[int], int]
189
+ ) -> Union[dict[str, Any], list[dict[str, Any]]]:
192
190
  """
193
191
  Get org by id
194
192
 
@@ -199,17 +197,10 @@ class EconomyClient:
199
197
  - `economyv2.Org`: The org object.
200
198
  """
201
199
  start_time = time.time()
202
- log = {
203
- "req": "get_org",
204
- "start_time": start_time,
205
- "consumption": 0
206
- }
200
+ log = {"req": "get_org", "start_time": start_time, "consumption": 0}
207
201
  if isinstance(id, list):
208
202
  orgs = await self._aio_stub.BatchGet(
209
- org_service.BatchGetRequest(
210
- ids=id,
211
- type="org"
212
- )
203
+ org_service.BatchGetRequest(ids=id, type="org")
213
204
  )
214
205
  orgs = MessageToDict(orgs)["orgs"]
215
206
  org_dicts = [camel_to_snake(org) for org in orgs]
@@ -217,11 +208,7 @@ class EconomyClient:
217
208
  self._log_list.append(log)
218
209
  return org_dicts
219
210
  else:
220
- org = await self._aio_stub.GetOrg(
221
- org_service.GetOrgRequest(
222
- org_id=id
223
- )
224
- )
211
+ org = await self._aio_stub.GetOrg(org_service.GetOrgRequest(org_id=id))
225
212
  org_dict = MessageToDict(org)["org"]
226
213
  log["consumption"] = time.time() - start_time
227
214
  self._log_list.append(log)
@@ -243,18 +230,15 @@ class EconomyClient:
243
230
  - Any
244
231
  """
245
232
  start_time = time.time()
246
- log = {
247
- "req": "get",
248
- "start_time": start_time,
249
- "consumption": 0
250
- }
251
- if isinstance(id, list):
233
+ log = {"req": "get", "start_time": start_time, "consumption": 0}
234
+ if isinstance(id, Sequence):
252
235
  requests = "Org" if id[0] in self._org_ids else "Agent"
253
236
  if requests == "Org":
254
237
  response = await self.get_org(id)
255
238
  else:
256
239
  response = await self.get_agent(id)
257
240
  results = []
241
+ response = cast(list[dict[str, Any]], response)
258
242
  for res in response:
259
243
  results.append(res[key])
260
244
  log["consumption"] = time.time() - start_time
@@ -268,10 +252,11 @@ class EconomyClient:
268
252
  response = await self.get_org(id)
269
253
  else:
270
254
  response = await self.get_agent(id)
255
+ response = cast(dict[str, Any], response)
271
256
  log["consumption"] = time.time() - start_time
272
257
  self._log_list.append(log)
273
258
  return response[key]
274
-
259
+
275
260
  def _merge(self, original_value, key, value):
276
261
  try:
277
262
  orig_value = original_value[key]
@@ -321,16 +306,14 @@ class EconomyClient:
321
306
  - Any
322
307
  """
323
308
  start_time = time.time()
324
- log = {
325
- "req": "update",
326
- "start_time": start_time,
327
- "consumption": 0
328
- }
309
+ log = {"req": "update", "start_time": start_time, "consumption": 0}
329
310
  if isinstance(id, list):
330
311
  if not isinstance(value, list):
331
312
  raise ValueError(f"Invalid value, the value must be a list!")
332
313
  if len(id) != len(value):
333
- raise ValueError(f"Invalid ids and values, the length of ids and values must be the same!")
314
+ raise ValueError(
315
+ f"Invalid ids and values, the length of ids and values must be the same!"
316
+ )
334
317
  request_type = "Org" if id[0] in self._org_ids else "Agent"
335
318
  else:
336
319
  if id not in self._agent_ids and id not in self._org_ids:
@@ -363,16 +346,11 @@ class EconomyClient:
363
346
  # ))
364
347
  # await asyncio.gather(*batch_update_tasks)
365
348
  await self._aio_stub.BatchUpdate(
366
- org_service.BatchUpdateRequest(
367
- orgs=original_value,
368
- agents=None
369
- )
349
+ org_service.BatchUpdateRequest(orgs=original_value, agents=None)
370
350
  )
371
351
  else:
372
352
  await self._aio_stub.UpdateOrg(
373
- org_service.UpdateOrgRequest(
374
- org=original_value
375
- )
353
+ org_service.UpdateOrgRequest(org=original_value)
376
354
  )
377
355
  log["consumption"] = time.time() - start_time
378
356
  self._log_list.append(log)
@@ -387,16 +365,11 @@ class EconomyClient:
387
365
  # ))
388
366
  # await asyncio.gather(*batch_update_tasks)
389
367
  await self._aio_stub.BatchUpdate(
390
- org_service.BatchUpdateRequest(
391
- orgs=None,
392
- agents=original_value
393
- )
368
+ org_service.BatchUpdateRequest(orgs=None, agents=original_value)
394
369
  )
395
370
  else:
396
371
  await self._aio_stub.UpdateAgent(
397
- org_service.UpdateAgentRequest(
398
- agent=original_value
399
- )
372
+ org_service.UpdateAgentRequest(agent=original_value)
400
373
  )
401
374
  log["consumption"] = time.time() - start_time
402
375
  self._log_list.append(log)
@@ -504,7 +477,7 @@ class EconomyClient:
504
477
 
505
478
  async def calculate_taxes_due(
506
479
  self,
507
- org_id: Union[int, list[int]],
480
+ org_id: int,
508
481
  agent_ids: list[int],
509
482
  incomes: list[float],
510
483
  enable_redistribution: bool,
@@ -523,7 +496,6 @@ class EconomyClient:
523
496
  """
524
497
  start_time = time.time()
525
498
  log = {"req": "calculate_taxes_due", "start_time": start_time, "consumption": 0}
526
- # TODO: support multiple org
527
499
  request = org_service.CalculateTaxesDueRequest(
528
500
  government_id=org_id,
529
501
  agent_ids=agent_ids,
@@ -569,18 +541,15 @@ class EconomyClient:
569
541
  )
570
542
  log["consumption"] = time.time() - start_time
571
543
  self._log_list.append(log)
572
- return response.actual_consumption
573
-
544
+ if response.success:
545
+ return response.actual_consumption
546
+ else:
547
+ return -1
548
+
574
549
  async def calculate_real_gdp(self, nbs_id: int):
575
550
  start_time = time.time()
576
- log = {
577
- "req": "calculate_real_gdp",
578
- "start_time": start_time,
579
- "consumption": 0
580
- }
581
- request = org_service.CalculateRealGDPRequest(
582
- nbs_agent_id=nbs_id
583
- )
551
+ log = {"req": "calculate_real_gdp", "start_time": start_time, "consumption": 0}
552
+ request = org_service.CalculateRealGDPRequest(nbs_agent_id=nbs_id)
584
553
  response: org_service.CalculateRealGDPResponse = (
585
554
  await self._aio_stub.CalculateRealGDP(request)
586
555
  )
@@ -87,49 +87,63 @@ class Simulator:
87
87
  - 模拟器配置
88
88
  - simulator config
89
89
  """
90
- _mongo_uri, _mongo_db, _mongo_coll, _map_cache_dir = (
91
- config["map_request"]["mongo_uri"],
92
- config["map_request"]["mongo_db"],
93
- config["map_request"]["mongo_coll"],
94
- config["map_request"]["cache_dir"],
95
- )
96
- _mongo_client = MongoClient(_mongo_uri)
97
- os.makedirs(_map_cache_dir, exist_ok=True)
98
- _map_pb_path = os.path.join(_map_cache_dir, f"{_mongo_db}.{_mongo_coll}.pb") # type: ignore
99
- _map_pb = map_pb2.Map()
100
- if os.path.exists(_map_pb_path):
101
- with open(_map_pb_path, "rb") as f:
102
- _map_pb.ParseFromString(f.read())
90
+ _map_request = config["map_request"]
91
+ if "file_path" not in _map_request:
92
+ # from mongo db
93
+ _mongo_uri, _mongo_db, _mongo_coll, _map_cache_dir = (
94
+ _map_request["mongo_uri"],
95
+ _map_request["mongo_db"],
96
+ _map_request["mongo_coll"],
97
+ _map_request["cache_dir"],
98
+ )
99
+ _mongo_client = MongoClient(_mongo_uri)
100
+ os.makedirs(_map_cache_dir, exist_ok=True)
101
+ _map_pb_path = os.path.join(_map_cache_dir, f"{_mongo_db}.{_mongo_coll}.pb") # type: ignore
102
+ _map_pb = map_pb2.Map()
103
+ if os.path.exists(_map_pb_path):
104
+ with open(_map_pb_path, "rb") as f:
105
+ _map_pb.ParseFromString(f.read())
106
+ else:
107
+ _map_pb = coll2pb(_mongo_client[_mongo_db][_mongo_coll], _map_pb)
108
+ with open(_map_pb_path, "wb") as f:
109
+ f.write(_map_pb.SerializeToString())
103
110
  else:
104
- _map_pb = coll2pb(_mongo_client[_mongo_db][_mongo_coll], _map_pb)
105
- with open(_map_pb_path, "wb") as f:
106
- f.write(_map_pb.SerializeToString())
111
+ # from local file
112
+ _mongo_uri, _mongo_db, _mongo_coll, _map_cache_dir = "", "", "", ""
113
+ _map_pb_path = _map_request["file_path"]
107
114
 
108
115
  if "simulator" in config:
109
116
  if config["simulator"] is None:
110
117
  config["simulator"] = {}
111
- if "server" not in config["simulator"]:
118
+ if not config["simulator"].get("_server_activated", False):
112
119
  self._sim_env = sim_env = ControlSimEnv(
113
120
  task_name=config["simulator"].get("task", "citysim"),
114
121
  map_file=_map_pb_path,
115
122
  max_day=config["simulator"].get("max_day", 1000),
116
123
  start_step=config["simulator"].get("start_step", 28800),
117
- total_step=24*60*60,
124
+ total_step=config["simulator"].get(
125
+ "total_step", 24 * 60 * 60 * 365
126
+ ),
118
127
  log_dir=config["simulator"].get("log_dir", "./log"),
119
128
  min_step_time=config["simulator"].get("min_step_time", 1000),
120
129
  sim_addr=config["simulator"].get("server", None),
121
130
  )
122
131
  self.server_addr = sim_env.sim_addr
123
132
  config["simulator"]["server"] = self.server_addr
133
+ config["simulator"]["_server_activated"] = True
124
134
  # using local client
125
- self._client = CityClient(sim_env.sim_addr, secure=False)
135
+ self._client = CityClient(
136
+ sim_env.sim_addr, secure=self.server_addr.startswith("https")
137
+ )
126
138
  """
127
139
  - 模拟器grpc客户端
128
140
  - grpc client of simulator
129
141
  """
130
142
  else:
131
- self._client = CityClient(config["simulator"]["server"], secure=False)
132
143
  self.server_addr = config["simulator"]["server"]
144
+ self._client = CityClient(
145
+ self.server_addr, secure=self.server_addr.startswith("https")
146
+ )
133
147
  else:
134
148
  self.server_addr = None
135
149
  logger.warning(
@@ -141,10 +155,9 @@ class Simulator:
141
155
  - Simulator map object
142
156
  """
143
157
  if create_map:
144
- _map_cache_path = "" # 地图pb文件路径
145
158
  self._map = CityMap.remote(
146
159
  (_mongo_uri, _mongo_db, _mongo_coll, _map_cache_dir),
147
- _map_cache_path,
160
+ _map_pb_path,
148
161
  )
149
162
  self._create_poi_id_2_aoi_id()
150
163
 
@@ -363,7 +376,7 @@ class Simulator:
363
376
  log = {"req": "get_simulator_day", "start_time": start_time, "consumption": 0}
364
377
  now = await self._client.clock_service.Now({})
365
378
  now = cast(dict[str, int], now)
366
- day = now["day"]
379
+ day = int(now["t"] // (24 * 60 * 60))
367
380
  log["consumption"] = time.time() - start_time
368
381
  self._log_list.append(log)
369
382
  return day
@@ -385,7 +398,7 @@ class Simulator:
385
398
  now = cast(dict[str, int], now)
386
399
  log["consumption"] = time.time() - start_time
387
400
  self._log_list.append(log)
388
- return now["t"] % 86400
401
+ return now["t"] % (24 * 60 * 60)
389
402
 
390
403
  async def get_person(self, person_id: int) -> dict:
391
404
  """
Binary file
@@ -22,13 +22,8 @@ from ..llm.llmconfig import LLMConfig
22
22
  from ..memory import FaissQuery, Memory
23
23
  from ..message import Messager
24
24
  from ..metrics import MlflowClient
25
- from ..utils import (
26
- DIALOG_SCHEMA,
27
- INSTITUTION_STATUS_SCHEMA,
28
- PROFILE_SCHEMA,
29
- STATUS_SCHEMA,
30
- SURVEY_SCHEMA,
31
- )
25
+ from ..utils import (DIALOG_SCHEMA, INSTITUTION_STATUS_SCHEMA, PROFILE_SCHEMA,
26
+ STATUS_SCHEMA, SURVEY_SCHEMA)
32
27
 
33
28
  logger = logging.getLogger("pycityagent")
34
29
  __all__ = ["AgentGroup"]
@@ -1019,19 +1019,6 @@ class AgentSimulation:
1019
1019
  - None
1020
1020
  """
1021
1021
  try:
1022
- # check whether insert agents
1023
- simulator_day = await self._simulator.get_simulator_day()
1024
- need_insert_agents = False
1025
- if simulator_day > self._simulator_day:
1026
- need_insert_agents = True
1027
- self._simulator_day = simulator_day
1028
- if need_insert_agents:
1029
- await self.resume_simulator()
1030
- insert_tasks = []
1031
- for group in self._groups.values():
1032
- insert_tasks.append(group.insert_agent.remote())
1033
- await asyncio.gather(*insert_tasks)
1034
-
1035
1022
  # step
1036
1023
  simulator_day = await self._simulator.get_simulator_day()
1037
1024
  simulator_time = int(
@@ -1113,12 +1100,20 @@ class AgentSimulation:
1113
1100
  monitor_task = asyncio.create_task(self._monitor_exp_status(stop_event))
1114
1101
 
1115
1102
  try:
1116
- end_time = (
1117
- await self._simulator.get_time() + day * 24 * 3600
1118
- ) # type:ignore
1103
+ end_day = self._simulator_day + day
1119
1104
  while True:
1120
- current_time = await self._simulator.get_time()
1121
- if current_time >= end_time: # type:ignore
1105
+ current_day = await self._simulator.get_simulator_day()
1106
+ # check whether insert agents
1107
+ need_insert_agents = False
1108
+ if current_day > self._simulator_day:
1109
+ self._simulator_day = current_day
1110
+ # if need_insert_agents:
1111
+ # insert_tasks = []
1112
+ # for group in self._groups.values():
1113
+ # insert_tasks.append(group.insert_agent.remote())
1114
+ # await asyncio.gather(*insert_tasks)
1115
+
1116
+ if current_day >= end_day: # type:ignore
1122
1117
  break
1123
1118
  (
1124
1119
  llm_log_list,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pycityagent
3
- Version: 2.0.0a83
3
+ Version: 2.0.0a85
4
4
  Summary: LLM-based city environment agent building library
5
5
  Author-email: Yuwei Yan <pinkgranite86@gmail.com>, Junbo Yan <yanjb20thu@gmali.com>, Jun Zhang <zhangjun990222@gmali.com>
6
6
  License: MIT License
@@ -45,7 +45,7 @@ Requires-Dist: openai>=1.58.1
45
45
  Requires-Dist: Pillow<12.0.0,>=11.0.0
46
46
  Requires-Dist: protobuf<5.0.0,<=4.24.0
47
47
  Requires-Dist: pycitydata>=1.0.3
48
- Requires-Dist: pycityproto>=2.2.3
48
+ Requires-Dist: pycityproto>=2.2.4
49
49
  Requires-Dist: requests>=2.32.3
50
50
  Requires-Dist: Shapely>=2.0.6
51
51
  Requires-Dist: PyYAML>=6.0.2
@@ -1,16 +1,16 @@
1
- pycityagent-2.0.0a83.dist-info/RECORD,,
2
- pycityagent-2.0.0a83.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
3
- pycityagent-2.0.0a83.dist-info/WHEEL,sha256=NW1RskY9zow1Y68W-gXg0oZyBRAugI1JHywIzAIai5o,109
4
- pycityagent-2.0.0a83.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
5
- pycityagent-2.0.0a83.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
6
- pycityagent-2.0.0a83.dist-info/METADATA,sha256=XmwytGxXKWAS-M9uFrfJ3Csu1jkQhXN1Po0ZBUyc5nI,9110
7
- pycityagent/pycityagent-sim,sha256=MmiGNhZgGjXYLJ2EYTGMhfGAZU8TnU7ORsJ6kdtzjDs,36973378
1
+ pycityagent-2.0.0a85.dist-info/RECORD,,
2
+ pycityagent-2.0.0a85.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
3
+ pycityagent-2.0.0a85.dist-info/WHEEL,sha256=NW1RskY9zow1Y68W-gXg0oZyBRAugI1JHywIzAIai5o,109
4
+ pycityagent-2.0.0a85.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
5
+ pycityagent-2.0.0a85.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
6
+ pycityagent-2.0.0a85.dist-info/METADATA,sha256=KKmALYa8DummI6EtxRIqeGaH5Fg_lS4yElcWAOdV2wU,9110
7
+ pycityagent/pycityagent-sim,sha256=Ax6cjHjT8VcT5t07VboL_Ruor2eXSdSEml4Jvv-L5dQ,36972594
8
8
  pycityagent/__init__.py,sha256=PUKWTXc-xdMG7px8oTNclodsILUgypANj2Z647sY63k,808
9
9
  pycityagent/pycityagent-ui,sha256=Ur95yZygIaZ5l_CDqP9394M5GQ66iV5PkcNPYFWqzvk,41225346
10
10
  pycityagent/metrics/mlflow_client.py,sha256=-iyh4BPVnBkluhmfucUzibCUnBX2iftkz4tVJJVxwHw,6958
11
11
  pycityagent/metrics/__init__.py,sha256=X08PaBbGVAd7_PRGLREXWxaqm7nS82WBQpD1zvQzcqc,128
12
12
  pycityagent/economy/__init__.py,sha256=aonY4WHnx-6EGJ4WKrx4S-2jAkYNLtqUA04jp6q8B7w,75
13
- pycityagent/economy/econ_client.py,sha256=jDF_KAqFwM-vrFNRHiinYJEPEbzfaU2gRp_hIMk27O4,29208
13
+ pycityagent/economy/econ_client.py,sha256=KXoRKnOrqYlFqgLHpNim1C5QRM7QPO3GtXG1Aq-yf6U,28621
14
14
  pycityagent/tools/__init__.py,sha256=y7sMVMHf0AbivlczM2h-kr7mkgXK-WAx3S9BXLXkWvw,235
15
15
  pycityagent/tools/tool.py,sha256=4ZJSHbNM8dfAVwZEw8T0a2_9OuPsPQpKSVL4WxZVBUc,9022
16
16
  pycityagent/llm/llmconfig.py,sha256=6AqCMV4B_JqBD2mb98bLGzpUdlOCnziQKae-Hhxxp-E,469
@@ -27,9 +27,9 @@ pycityagent/memory/utils.py,sha256=oJWLdPeJy_jcdKcDTo9JAH9kDZhqjoQhhv_zT9qWC0w,8
27
27
  pycityagent/memory/const.py,sha256=nFmjvt-8FEB0hc0glOH3lliqJhkhf3D_NKxWI0pf6TY,936
28
28
  pycityagent/memory/faiss_query.py,sha256=KPeyzIjD0dzkxr-TlOeCiIlkdh1WAyyipCAXUEt97Lk,17350
29
29
  pycityagent/memory/state.py,sha256=JFCBuK1AS-HqscvdGS9ATF9AUU8t29_2leDY_6iO2_4,5158
30
- pycityagent/simulation/simulation.py,sha256=_dmTQDVaKHpmAljKxQBFkVk9FDSBJg_PA5PMyphQ5D4,49525
30
+ pycityagent/simulation/simulation.py,sha256=bHpR3FtUM6ewurwByRr57OgdTWXTPq9-knIjGt2GHlo,49370
31
31
  pycityagent/simulation/__init__.py,sha256=u1WpgwVxPboXWMxrUQKMXJNmTKQYAeCaqZv9HmSxESY,118
32
- pycityagent/simulation/agentgroup.py,sha256=oXo2iRUThh_96JhXHMufT8_BPx0PrlwqbMpiVqK_viA,36957
32
+ pycityagent/simulation/agentgroup.py,sha256=rPloocCwB6rfjWbIz3T052mYq2lEcBp97mblkMD2y0A,36955
33
33
  pycityagent/simulation/storage/pg.py,sha256=xRshSOGttW-p0re0fNBOjOpb-nQ5msIE2LsdT79_E_Y,8425
34
34
  pycityagent/message/message_interceptor.py,sha256=QWuTUqi1Cu214fhFs0f78tD2zflMnb6zEAGB4RutXxs,17736
35
35
  pycityagent/message/__init__.py,sha256=f5QH7DKPqEAMyfSlBMnl3uouOKlsoel909STlIe7nUk,276
@@ -52,7 +52,7 @@ pycityagent/workflow/prompt.py,sha256=rzenP4EFGxbWE1aq-x2036b6umKvi5cQx2xtWULwgI
52
52
  pycityagent/workflow/block.py,sha256=WJfCeL8e117GzkVPJCRNsQZZinccMnVyEubkwrf-17U,12295
53
53
  pycityagent/workflow/trigger.py,sha256=4nzAwywGQsFabgo6gzp-vD2EV4wII7Z0LHGEAsflSEY,7608
54
54
  pycityagent/environment/__init__.py,sha256=fFIth2jxxgZ92cXm-aoM2igHgaSqsYGwtBhyb7opjzk,166
55
- pycityagent/environment/simulator.py,sha256=I5xDg-1Cn32qvKN7X_6SklA_d_iPFS9THsZqbZreJDU,22606
55
+ pycityagent/environment/simulator.py,sha256=sbM0FMjR_q2mssbpMI7Lx9QI2iFj1Hbzg48fbRMd4tY,23206
56
56
  pycityagent/environment/utils/port.py,sha256=3OM6kSUt3PxvDUOlgyiendBtETaWU8Mzk_8H0TzTmYg,295
57
57
  pycityagent/environment/utils/grpc.py,sha256=_lB4-k4dTKuNvApaDiYgFxiLTPtYG42DVQtG9yOj9pQ,2022
58
58
  pycityagent/environment/utils/base64.py,sha256=hoREzQo3FXMN79pqQLO2jgsDEvudciomyKii7MWljAM,374
@@ -87,7 +87,7 @@ pycityagent/cityagent/blocks/needs_block.py,sha256=NYKrGDoYCuXoupMNMuSNhx4Ci1paC
87
87
  pycityagent/cityagent/blocks/cognition_block.py,sha256=yzjB0D_95vytpa5xiVdmTSpGp8H9HXcjWzzFN0OpP0k,15398
88
88
  pycityagent/cityagent/blocks/social_block.py,sha256=eedOlwRTGI47QFELYmfe2a_aj0GuHJweSyDxA6AYXcU,15493
89
89
  pycityagent/cityagent/blocks/__init__.py,sha256=h6si6WBcVVuglIskKQKA8Cxtf_VKen1sNPqOFKI311Q,420
90
- pycityagent/cityagent/blocks/economy_block.py,sha256=qu7OlQvFIL9m6jv7IHLXBQVHjC8noSuPB6Gd31Thjvc,19679
90
+ pycityagent/cityagent/blocks/economy_block.py,sha256=SSqb2qX5cVQ1zM8hyxvhnyTwgGwUrV2YViKtGRXmJhQ,20079
91
91
  pycityagent/cityagent/blocks/utils.py,sha256=K--6odjUDUu9YrwrHPaiPIHryo7m_MBmcBqDAy3cV5M,1816
92
92
  pycityagent/cityagent/blocks/other_block.py,sha256=LdtL6248xvMvvRQx6NvdlJrWWZFu8Xusjxb9yEh1M0k,4365
93
93
  pycityagent/cityagent/blocks/plan_block.py,sha256=A5DvtXIy98MZkRGUQmp26grNI5i0BVbl3aEM_Ebd6Z4,11271