pycityagent 2.0.0a91__cp312-cp312-macosx_11_0_arm64.whl → 2.0.0a93__cp312-cp312-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.
@@ -147,8 +147,8 @@ class CitizenAgent(Agent):
147
147
  person_id = await self.status.get("id")
148
148
  currency = await self.status.get("currency")
149
149
  skill = await self.status.get("work_skill")
150
- consumption = await self.status.get("consumption")
151
- income = await self.status.get("income")
150
+ consumption = 0.0
151
+ income = 0.0
152
152
  await self._economy_client.add_agents(
153
153
  {
154
154
  "id": person_id,
@@ -9,10 +9,10 @@ from pycityagent.workflow.prompt import FormatPrompt
9
9
  logger = logging.getLogger("pycityagent")
10
10
 
11
11
  DISPATCHER_PROMPT = """
12
- Based on the step information, select the most appropriate block to handle the task.
12
+ Based on the task information (which describes the needs of the user), select the most appropriate block to handle the task.
13
13
  Each block has its specific functionality as described in the function schema.
14
14
 
15
- Step information:
15
+ Task information:
16
16
  {step}
17
17
  """
18
18
 
@@ -60,7 +60,7 @@ class BlockDispatcher:
60
60
  """Dispatch the step to appropriate block based on LLM function call"""
61
61
  try:
62
62
  function_schema = self._get_function_schema()
63
- self.prompt.format(step=step)
63
+ self.prompt.format(step=step["intention"])
64
64
 
65
65
  # Call LLM with tools schema
66
66
  function_args = await self.llm.atext_request(
@@ -104,8 +104,8 @@ class ConsumptionBlock(Block):
104
104
  }
105
105
  consumption = min(month_consumption/1, month_consumption-consumption_currency)
106
106
  prices = []
107
- for firm_id in firms_id:
108
- price = await self.economy_client.get(firm_id, 'price')
107
+ for this_firm_id in firms_id:
108
+ price = await self.economy_client.get(this_firm_id, 'price')
109
109
  prices.append(price)
110
110
  consumption_each_firm = consumption*softmax(prices, gamma=-0.01)
111
111
  demand_each_firm = []
@@ -217,8 +217,8 @@ class MonthPlanBlock(Block):
217
217
  consumption = await self.economy_client.get(agent_id, 'consumption')
218
218
  tax_paid = await self.memory.status.get('tax_paid')
219
219
  prices = []
220
- for firm_id in firms_id:
221
- price = await self.economy_client.get(firm_id, 'price')
220
+ for this_firm_id in firms_id:
221
+ price = await self.economy_client.get(this_firm_id, 'price')
222
222
  prices.append(price)
223
223
  price = np.mean(prices)
224
224
  wealth = await self.economy_client.get(agent_id, 'currency')
@@ -25,24 +25,12 @@ Current Time: {now_time}
25
25
 
26
26
  Please initialize the agent's satisfaction levels and parameters based on the profile above. Return the values in JSON format with the following structure:
27
27
 
28
- 1. Current satisfaction levels (0-1 float values, lower means less satisfied):
28
+ Current satisfaction levels (0-1 float values, lower means less satisfied):
29
29
  - hunger_satisfaction: Hunger satisfaction level (Normally, the agent will be less satisfied with hunger at eating time)
30
30
  - energy_satisfaction: Energy satisfaction level (Normally, at night, the agent will be less satisfied with energy)
31
31
  - safety_satisfaction: Safety satisfaction level (Normally, the agent will be more satisfied with safety when they have high income and currency)
32
32
  - social_satisfaction: Social satisfaction level
33
33
 
34
- 2. Natural decay rates per hour (0-1 float values):
35
- - alpha_H: Hunger satisfaction decay rate
36
- - alpha_D: Energy satisfaction decay rate
37
- - alpha_P: Safety satisfaction decay rate
38
- - alpha_C: Social satisfaction decay rate
39
-
40
- 3. Threshold values (0-1 float values, below which the agent will try to improve):
41
- - T_H: Hunger satisfaction threshold
42
- - T_D: Energy satisfaction threshold
43
- - T_S: Safety satisfaction threshold
44
- - T_C: Social satisfaction threshold
45
-
46
34
  Example response format (Do not return any other text):
47
35
  {{
48
36
  "current_satisfaction": {{
@@ -50,18 +38,6 @@ Example response format (Do not return any other text):
50
38
  "energy_satisfaction": 0.7,
51
39
  "safety_satisfaction": 0.9,
52
40
  "social_satisfaction": 0.6
53
- }},
54
- "decay_rates": {{
55
- "alpha_H": 0.2,
56
- "alpha_D": 0.08,
57
- "alpha_P": 0.05,
58
- "alpha_C": 0.03
59
- }},
60
- "thresholds": {{
61
- "T_H": 0.4,
62
- "T_D": 0.2,
63
- "T_S": 0.2,
64
- "T_C": 0.2
65
41
  }}
66
42
  }}
67
43
  """
@@ -120,13 +96,13 @@ class NeedsBlock(Block):
120
96
  0.2,
121
97
  0.08,
122
98
  0.05,
123
- 0.03,
99
+ 0.1,
124
100
  ) # Hunger decay rate, Energy decay rate, Safety decay rate, Social decay rate
125
101
  self.T_H, self.T_D, self.T_P, self.T_C = (
126
- 0.4,
127
- 0.2,
102
+ 0.1,
128
103
  0.2,
129
104
  0.2,
105
+ 0.4,
130
106
  ) # Hunger threshold, Energy threshold, Safety threshold, Social threshold
131
107
 
132
108
  async def initialize(self):
@@ -151,31 +127,28 @@ class NeedsBlock(Block):
151
127
  now_time=await self.simulator.get_time(format_time=True),
152
128
  )
153
129
  response = await self.llm.atext_request(self.initial_prompt.to_dialog())
154
- response = await self.llm.atext_request(self.initial_prompt.to_dialog())
155
130
  response = self.clean_json_response(response)
156
- try:
157
- satisfaction = json.loads(response)
158
- satisfactions = satisfaction["current_satisfaction"]
159
- await self.memory.status.update(
160
- "hunger_satisfaction", satisfactions["hunger_satisfaction"]
161
- )
162
- await self.memory.status.update(
163
- "energy_satisfaction", satisfactions["energy_satisfaction"]
164
- )
165
- await self.memory.status.update(
166
- "safety_satisfaction", satisfactions["safety_satisfaction"]
167
- )
168
- await self.memory.status.update(
169
- "social_satisfaction", satisfactions["social_satisfaction"]
170
- )
171
- self.alpha_H, self.alpha_D, self.alpha_P, self.alpha_C = satisfaction[
172
- "decay_rates"
173
- ].values()
174
- self.T_H, self.T_D, self.T_P, self.T_C = satisfaction[
175
- "thresholds"
176
- ].values()
177
- except json.JSONDecodeError:
178
- logger.warning(f"初始化响应不是有效的JSON格式: {response}")
131
+ retry = 3
132
+ while retry > 0:
133
+ try:
134
+ satisfaction = json.loads(response)
135
+ satisfactions = satisfaction["current_satisfaction"]
136
+ await self.memory.status.update(
137
+ "hunger_satisfaction", satisfactions["hunger_satisfaction"]
138
+ )
139
+ await self.memory.status.update(
140
+ "energy_satisfaction", satisfactions["energy_satisfaction"]
141
+ )
142
+ await self.memory.status.update(
143
+ "safety_satisfaction", satisfactions["safety_satisfaction"]
144
+ )
145
+ await self.memory.status.update(
146
+ "social_satisfaction", satisfactions["social_satisfaction"]
147
+ )
148
+ break
149
+ except json.JSONDecodeError:
150
+ logger.warning(f"初始化响应不是有效的JSON格式: {response}")
151
+ retry -= 1
179
152
 
180
153
  current_plan = await self.memory.status.get("current_plan")
181
154
  history = await self.memory.status.get("plan_history")
@@ -174,8 +174,8 @@ class PlanBlock(Block):
174
174
  "hungry": ["Eat at home", "Eat outside"],
175
175
  "tired": ["Sleep", "Take a nap"],
176
176
  "safe": ["Go to work"],
177
- "social": ["Online social", "Shopping"],
178
- "whatever": ["Learning", "Entertainment", "Hang out", "Exercise"],
177
+ "social": ["Contact with friends", "Shopping"],
178
+ "whatever": ["Contact with friends", "Hang out"],
179
179
  }
180
180
 
181
181
  # configurable fields
@@ -151,7 +151,7 @@ class FindPersonBlock(Block):
151
151
 
152
152
  if not friends:
153
153
  node_id = await self.memory.stream.add_social(
154
- description=f"I can't find any friends to socialize with."
154
+ description=f"I can't find any friends to contact with."
155
155
  )
156
156
  return {
157
157
  "success": False,
@@ -250,7 +250,7 @@ class MessageBlock(Block):
250
250
  def __init__(self, agent, llm: LLM, memory: Memory, simulator: Simulator):
251
251
  super().__init__("MessageBlock", llm=llm, memory=memory, simulator=simulator)
252
252
  self.agent = agent
253
- self.description = "Generate and send a message to someone"
253
+ self.description = "Send a message to someone"
254
254
  self.find_person_block = FindPersonBlock(llm, memory, simulator)
255
255
 
256
256
  # configurable fields
@@ -327,6 +327,7 @@ class MessageBlock(Block):
327
327
 
328
328
  # Send message
329
329
  serialized_message = self._serialize_message(message, 1)
330
+ await self.agent.send_message_to_agent(target, serialized_message)
330
331
  node_id = await self.memory.stream.add_social(
331
332
  description=f"I sent a message to {target}: {message}"
332
333
  )
@@ -387,20 +388,12 @@ class SocialBlock(Block):
387
388
  # Execute the selected sub-block and get the result
388
389
  result = await selected_block.forward(step, context)
389
390
 
390
- consumption_end = (
391
- self.llm.prompt_tokens_used + self.llm.completion_tokens_used
392
- )
393
- self.token_consumption += consumption_end - consumption_start
394
-
395
391
  return result
396
392
 
397
- except:
398
- consumption_end = (
399
- self.llm.prompt_tokens_used + self.llm.completion_tokens_used
400
- )
401
- self.token_consumption += consumption_end - consumption_start
393
+ except Exception as e:
402
394
  return {
403
- "success": True,
404
- "evaluation": "Completed social interaction with default behavior",
395
+ "success": False,
396
+ "evaluation": "Failed to complete social interaction with default behavior",
405
397
  "consumed_time": 15,
398
+ "node_id": None,
406
399
  }
@@ -27,11 +27,11 @@ async def initialize_social_network(simulation):
27
27
  relation_types = ["family", "colleague", "friend"]
28
28
 
29
29
  # Get all agent IDs
30
- agent_ids = simulation.agent_uuids
31
- for agent_id in agent_ids:
30
+ citizen_uuids = await simulation.filter(types=[SocietyAgent])
31
+ for agent_id in citizen_uuids:
32
32
  # Randomly select 2-5 friends for each agent
33
33
  num_friends = random.randint(2, 5)
34
- possible_friends = [aid for aid in agent_ids if aid != agent_id]
34
+ possible_friends = [aid for aid in citizen_uuids if aid != agent_id]
35
35
  friends = random.sample(
36
36
  possible_friends, min(num_friends, len(possible_friends))
37
37
  )
@@ -114,7 +114,7 @@ async def bind_agent_info(simulation):
114
114
  - **Returns**:
115
115
  - None
116
116
  """
117
- logger.info("Binding agent info...")
117
+ logger.info("Binding economy relationship...")
118
118
  infos = await simulation.gather("id")
119
119
  citizen_uuids = await simulation.filter(types=[SocietyAgent])
120
120
  firm_uuids = await simulation.filter(types=[FirmAgent])
@@ -66,8 +66,6 @@ def memory_config_societyagent():
66
66
  "goods_consumption": (int, 0, False),
67
67
  "work_propensity": (float, 0.0, False),
68
68
  "consumption_propensity": (float, 0.0, False),
69
- "income_currency": (float, 0.0, False), # monthly income
70
- "to_income": (float, 0.0, False),
71
69
  "to_consumption_currency": (float, 0.0, False),
72
70
  "firm_id": (int, 0, False),
73
71
  "government_id": (int, 0, False),
@@ -168,13 +166,13 @@ def memory_config_societyagent():
168
166
  True,
169
167
  ),
170
168
  "family_consumption": (str, random.choice(["low", "medium", "high"]), True),
171
- "consumption": (float, 0, True),
169
+ "consumption": (str, random.choice(["low", "slightly low", "medium", "slightly high", "high"]), True),
172
170
  "personality": (
173
171
  str,
174
172
  random.choice(["outgoint", "introvert", "ambivert", "extrovert"]),
175
173
  True,
176
174
  ),
177
- "income": (float, 0, True),
175
+ "income": (float, random.randint(1000, 20000), True),
178
176
  "currency": (float, random.randint(1000, 100000), True),
179
177
  "residence": (str, random.choice(["city", "suburb", "rural"]), True),
180
178
  "race": (
@@ -21,14 +21,16 @@ async def mobility_metric(simulation):
21
21
 
22
22
  async def economy_metric(simulation):
23
23
  # 使用函数属性来存储计数
24
- if not hasattr(economy_metric, 'step_count'):
24
+ if not hasattr(economy_metric, 'nbs_id'):
25
25
  economy_metric.nbs_id = None
26
+ if not hasattr(economy_metric, 'nbs_uuid'):
26
27
  economy_metric.nbs_uuid = None
27
28
 
28
29
  if economy_metric.nbs_id is None:
29
30
  nbs_id = await simulation.economy_client.get_org_entity_ids(economyv2.ORG_TYPE_NBS)
30
31
  nbs_id = nbs_id[0]
31
32
  economy_metric.nbs_id = nbs_id
33
+ if economy_metric.nbs_uuid is None:
32
34
  nbs_uuids = await simulation.filter(types=[NBSAgent])
33
35
  economy_metric.nbs_uuid = nbs_uuids[0]
34
36
 
@@ -57,7 +57,7 @@ class PlanAndActionBlock(Block):
57
57
  self.planBlock = PlanBlock(llm=llm, memory=memory, simulator=simulator)
58
58
  self.mobilityBlock = MobilityBlock(llm=llm, memory=memory, simulator=simulator)
59
59
  self.socialBlock = SocialBlock(
60
- agent=self, llm=llm, memory=memory, simulator=simulator
60
+ agent=agent, llm=llm, memory=memory, simulator=simulator
61
61
  )
62
62
  self.economyBlock = EconomyBlock(
63
63
  llm=llm, memory=memory, simulator=simulator, economy_client=economy_client
pycityagent/llm/llm.py CHANGED
@@ -280,14 +280,15 @@ class LLM:
280
280
  if hasattr(e, "http_status"):
281
281
  print(f"HTTP status code: {e.http_status}") # type: ignore
282
282
  else:
283
- print("An error occurred:", e)
283
+ print("OpenAIError:", e)
284
284
  if attempt < retries - 1:
285
285
  await asyncio.sleep(2**attempt)
286
286
  else:
287
287
  raise e
288
288
  except Exception as e:
289
- print("An error occurred:", e)
289
+ print("LLM Error (OpenAI):", e)
290
290
  if attempt < retries - 1:
291
+ print(dialog)
291
292
  await asyncio.sleep(2**attempt)
292
293
  else:
293
294
  raise e
@@ -342,7 +343,7 @@ class LLM:
342
343
  else:
343
344
  raise e
344
345
  except Exception as e:
345
- print("An error occurred:", e)
346
+ print("LLM Error:", e)
346
347
  if attempt < retries - 1:
347
348
  await asyncio.sleep(2**attempt)
348
349
  else:
@@ -8,7 +8,7 @@ PROFILE_ATTRIBUTES = {
8
8
  "skill": str(),
9
9
  "occupation": str(),
10
10
  "family_consumption": str(),
11
- "consumption": float(),
11
+ "consumption": str(),
12
12
  "personality": str(),
13
13
  "income": float(),
14
14
  "currency": float(),
@@ -779,6 +779,7 @@ class AgentSimulation:
779
779
  self._groups[group_name] = group
780
780
  group_agent_uuids = ray.get(group.get_agent_uuids.remote())
781
781
  for agent_uuid in group_agent_uuids:
782
+ self._agent_uuids.append(agent_uuid)
782
783
  self._agent_uuid2group[agent_uuid] = group
783
784
  self._user_chat_topics[agent_uuid] = (
784
785
  f"exps/{self.exp_id}/agents/{agent_uuid}/user-chat"
@@ -12,7 +12,7 @@ PROFILE_SCHEMA = {
12
12
  {"name": "skill", "type": "string"},
13
13
  {"name": "occupation", "type": "string"},
14
14
  {"name": "family_consumption", "type": "string"},
15
- {"name": "consumption", "type": "float"},
15
+ {"name": "consumption", "type": "string"},
16
16
  {"name": "personality", "type": "string"},
17
17
  {"name": "income", "type": "float"},
18
18
  {"name": "currency", "type": "float"},
@@ -259,7 +259,7 @@ class Block:
259
259
  setattr(self, field, config["config"][field])
260
260
 
261
261
  def build_or_update_block(block_data: dict) -> Block:
262
- block_name = block_data["name"].lower() # type:ignore
262
+ block_name = block_data["name"] # type:ignore
263
263
  existing_block = getattr(self, block_name, None)
264
264
 
265
265
  if existing_block:
@@ -276,7 +276,7 @@ class Block:
276
276
  return block_instance
277
277
 
278
278
  # 递归遍历子Block配置
279
- for block_data in config.get("blocks", []):
279
+ for block_data in config.get("children", []):
280
280
  build_or_update_block(block_data)
281
281
 
282
282
  async def forward(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pycityagent
3
- Version: 2.0.0a91
3
+ Version: 2.0.0a93
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
@@ -1,9 +1,3 @@
1
- pycityagent-2.0.0a91.dist-info/RECORD,,
2
- pycityagent-2.0.0a91.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
3
- pycityagent-2.0.0a91.dist-info/WHEEL,sha256=VujM3ypTCyUW6hcTDdK2ej0ARVMxlU1Djlh_zWnDgqk,109
4
- pycityagent-2.0.0a91.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
5
- pycityagent-2.0.0a91.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
6
- pycityagent-2.0.0a91.dist-info/METADATA,sha256=p0o_OmiXN5jeCeFL-Yp9qt5TVb0nj2bmu-HSkagl9r8,9110
7
1
  pycityagent/pycityagent-sim,sha256=Ax6cjHjT8VcT5t07VboL_Ruor2eXSdSEml4Jvv-L5dQ,36972594
8
2
  pycityagent/__init__.py,sha256=PUKWTXc-xdMG7px8oTNclodsILUgypANj2Z647sY63k,808
9
3
  pycityagent/pycityagent-ui,sha256=Ur95yZygIaZ5l_CDqP9394M5GQ66iV5PkcNPYFWqzvk,41225346
@@ -15,7 +9,7 @@ pycityagent/tools/__init__.py,sha256=y7sMVMHf0AbivlczM2h-kr7mkgXK-WAx3S9BXLXkWvw
15
9
  pycityagent/tools/tool.py,sha256=4ZJSHbNM8dfAVwZEw8T0a2_9OuPsPQpKSVL4WxZVBUc,9022
16
10
  pycityagent/llm/llmconfig.py,sha256=6AqCMV4B_JqBD2mb98bLGzpUdlOCnziQKae-Hhxxp-E,469
17
11
  pycityagent/llm/__init__.py,sha256=iWs6FLgrbRVIiqOf4ILS89gkVCTvS7HFC3vG-MWuyko,205
18
- pycityagent/llm/llm.py,sha256=vMw9AVftrsmbGkhRIwJ7jftFWpzTofhfQmu7TazDCaQ,20019
12
+ pycityagent/llm/llm.py,sha256=YJy5SleUpHvS5v0S-wnnrY4zTbu_2RL36LH-zCYKPEI,20048
19
13
  pycityagent/llm/embeddings.py,sha256=3610I-_scAy8HwRNpT8hVJpH9_8_pTLCPptqnzSq10o,11322
20
14
  pycityagent/llm/utils.py,sha256=rSx_fp-_Gh0vZ-x2rqAUqnpS56BVTZ4ChfAMarB8S1A,195
21
15
  pycityagent/memory/memory.py,sha256=5mUweo-BgQYbXmVRAk7HTUXsar6O6iYz79VbLuMAvjo,45063
@@ -24,17 +18,17 @@ pycityagent/memory/__init__.py,sha256=NClJAXC4G6I8kFWkPEcU2lbVDfyrRb5HrrBHgCXrzO
24
18
  pycityagent/memory/memory_base.py,sha256=av_sbD62PZbJyM8E9wmVuqYqgsutghcO7nJdAxGpHi0,9784
25
19
  pycityagent/memory/self_define.py,sha256=rndjWvQfi4x_90jtQWuCtWwLFBKqe7sExsDqs4I-KEw,5224
26
20
  pycityagent/memory/utils.py,sha256=oJWLdPeJy_jcdKcDTo9JAH9kDZhqjoQhhv_zT9qWC0w,877
27
- pycityagent/memory/const.py,sha256=nFmjvt-8FEB0hc0glOH3lliqJhkhf3D_NKxWI0pf6TY,936
21
+ pycityagent/memory/const.py,sha256=Wgsx0oztDrJDEpI9Dr6XeI6GXrABcP0UTOuEvMp1AD8,934
28
22
  pycityagent/memory/faiss_query.py,sha256=KPeyzIjD0dzkxr-TlOeCiIlkdh1WAyyipCAXUEt97Lk,17350
29
23
  pycityagent/memory/state.py,sha256=JFCBuK1AS-HqscvdGS9ATF9AUU8t29_2leDY_6iO2_4,5158
30
- pycityagent/simulation/simulation.py,sha256=bHpR3FtUM6ewurwByRr57OgdTWXTPq9-knIjGt2GHlo,49370
24
+ pycityagent/simulation/simulation.py,sha256=AjN-cT-SqdPbuXJAIczWr17hNC8fBzSLG8MrRbYC-9g,49423
31
25
  pycityagent/simulation/__init__.py,sha256=u1WpgwVxPboXWMxrUQKMXJNmTKQYAeCaqZv9HmSxESY,118
32
26
  pycityagent/simulation/agentgroup.py,sha256=rPloocCwB6rfjWbIz3T052mYq2lEcBp97mblkMD2y0A,36955
33
27
  pycityagent/simulation/storage/pg.py,sha256=xRshSOGttW-p0re0fNBOjOpb-nQ5msIE2LsdT79_E_Y,8425
34
28
  pycityagent/message/message_interceptor.py,sha256=QWuTUqi1Cu214fhFs0f78tD2zflMnb6zEAGB4RutXxs,17736
35
29
  pycityagent/message/__init__.py,sha256=f5QH7DKPqEAMyfSlBMnl3uouOKlsoel909STlIe7nUk,276
36
30
  pycityagent/message/messager.py,sha256=UdOyEMLmaF3ZUvXHmratZxKNEb3BpmN7VyRdvGJWTL4,9060
37
- pycityagent/utils/avro_schema.py,sha256=dzytGiDy5tDFTi5QJ8pHySl9xrbXZ0Qwrc1ONUhfzwk,4150
31
+ pycityagent/utils/avro_schema.py,sha256=hReb58T9teiNS9_YS36n1iiaBLW6jS4MRmcaWsL3Iu8,4151
38
32
  pycityagent/utils/__init__.py,sha256=GQEa4x_uJBK19Z57vfm9Omvqg1c4ysi3QJ9wx8xiDhI,524
39
33
  pycityagent/utils/survey_util.py,sha256=o-gvmmfus3vMIN-EMWPzfLbHkDH4DfZb8B-yBd_mGYk,2076
40
34
  pycityagent/utils/pg_query.py,sha256=KAcnBDLyzUu2il18SGXxk8dySdBen_8ejfpxiWuKUMA,2225
@@ -45,11 +39,11 @@ pycityagent/utils/parsers/parser_base.py,sha256=ZbqRcqOBL9hfHVZSltQSQmJnWrtuJS9a
45
39
  pycityagent/utils/parsers/json_parser.py,sha256=sakKohUuMcUH2toR85CAG_37D02ZoAn6LlzLgftUjmo,2923
46
40
  pycityagent/agent/agent_base.py,sha256=nz9QNfNjWVDza1yd8OwqmjZM3sq4fqONnVpcI8mA8cI,39488
47
41
  pycityagent/agent/__init__.py,sha256=U20yKu9QwSqAx_PHk5JwipfODkDfxONtumVfnsKjWFg,180
48
- pycityagent/agent/agent.py,sha256=Ymv3CtEPGcayVWrNnXkeWQXRNYEuvniWCqUfn2UZy8Y,19073
42
+ pycityagent/agent/agent.py,sha256=TMusq6As7gfZAiFr2XB1H-4tlHrWFEOm7ytPjvxl6K4,19012
49
43
  pycityagent/cli/wrapper.py,sha256=bAwmfWTXbGld-uiMnIMhKp22IVRQjhLUToknyUDk9rQ,1147
50
44
  pycityagent/workflow/__init__.py,sha256=H08Ko3eliZvuuCMajbEri-IP4-SeswYU6UjHBNA4Ze0,490
51
45
  pycityagent/workflow/prompt.py,sha256=rzenP4EFGxbWE1aq-x2036b6umKvi5cQx2xtWULwgIk,3392
52
- pycityagent/workflow/block.py,sha256=WJfCeL8e117GzkVPJCRNsQZZinccMnVyEubkwrf-17U,12295
46
+ pycityagent/workflow/block.py,sha256=zOoMgCvjrOXyAUQRCU7Qo_diRZaPGjgsfO0vraSJ9b0,12289
53
47
  pycityagent/workflow/trigger.py,sha256=4nzAwywGQsFabgo6gzp-vD2EV4wII7Z0LHGEAsflSEY,7608
54
48
  pycityagent/environment/__init__.py,sha256=fFIth2jxxgZ92cXm-aoM2igHgaSqsYGwtBhyb7opjzk,166
55
49
  pycityagent/environment/simulator.py,sha256=4QVwi40I9AwJ9YIDK3-fqmlz2Q5ykkWBHpz78xAo22c,23299
@@ -72,26 +66,32 @@ pycityagent/environment/sim/social_service.py,sha256=Y4A56aKXsjSv18UFumGPjQoJVMc
72
66
  pycityagent/environment/sim/light_service.py,sha256=q4pKcGrm7WU0h29I1dFIDOz2OV0BM-2s37uC6zokkoA,4290
73
67
  pycityagent/environment/sim/clock_service.py,sha256=4Hly8CToghj0x_XbDgGrIZy1YYAlDH0EUGCiCDYpk_I,1375
74
68
  pycityagent/environment/sim/road_service.py,sha256=Bb1sreO0Knt9tcqH_WJF-I3P3G92bRAlzDBEa--25GE,1297
75
- pycityagent/cityagent/metrics.py,sha256=wVxLpk4jvVoPf2baiK-jMIi2rPPMRnFpSjOVyj1k74A,2718
76
- pycityagent/cityagent/memory_config.py,sha256=lCySjh8jpE3Sj-_XTCPizxJN8rjfcYD54sed7wi2EDw,11958
69
+ pycityagent/cityagent/metrics.py,sha256=R_2Iv6l2yd6i43pkcg6n3qBm4Jdfsgg36_VWudnW8xA,2802
70
+ pycityagent/cityagent/memory_config.py,sha256=IRjLINqIU-HWwwXljh1Air4n8hVEbQ-KqUdDRZLZu8o,11946
77
71
  pycityagent/cityagent/bankagent.py,sha256=I6MNG1fUbxKyWCLxCtvOjeVahong_LhHQKmJdRPhQL8,4097
78
72
  pycityagent/cityagent/__init__.py,sha256=gcBQ-a50XegFtjigQ7xDXRBZrywBKqifiQFSRnEF8gM,572
79
73
  pycityagent/cityagent/firmagent.py,sha256=vZr7kdjnxcCZ5qX7hmUIYuQQWd44GcRPbdi76WGSFy4,3760
80
74
  pycityagent/cityagent/nbsagent.py,sha256=rrzL-Ep-gWB8kvoPA8nBokY1zoEZGpyQjP9oy7ZuVL4,4676
81
- pycityagent/cityagent/initial.py,sha256=tVcO9ECGvsFatpxQirZbZf0ESFBxSpSxkm4p0x2kiO0,6263
82
- pycityagent/cityagent/societyagent.py,sha256=i7V7BeCb_pMJpxwiR5AOUcNHRw0SXHXltt_DtCxE6pE,20121
75
+ pycityagent/cityagent/initial.py,sha256=X558KNRfoyuztNjvbGIX6ahUPzqnW9XiBQ_WQ9bTztY,6308
76
+ pycityagent/cityagent/societyagent.py,sha256=i2Khr9LU-7XI5Mhaiu89yoBKYsN7U4RvgS2u4GXNz6M,20122
83
77
  pycityagent/cityagent/message_intercept.py,sha256=dyT1G-nMxKb2prhgtyFFHFz593qBrkk5DnHsHvG1OIc,4418
84
78
  pycityagent/cityagent/governmentagent.py,sha256=XIyggG83FWUTZdOuoqc6ClCP3hhfkxNmtYRu9TFo0dU,3063
85
- pycityagent/cityagent/blocks/dispatcher.py,sha256=U5BPeUrjrTyDaznYfT6YUJIW8vfKVRDF4EO0oOn6Td4,2886
86
- pycityagent/cityagent/blocks/needs_block.py,sha256=eFWDgsqjh4FYaGeb8wL5R9ndaXN3977ymexoItDUki8,16112
79
+ pycityagent/cityagent/blocks/dispatcher.py,sha256=gd3lyggvtkCq9Ou_icgua60H0UjHTzwHoynLl_iZoes,2939
80
+ pycityagent/cityagent/blocks/needs_block.py,sha256=YRJACcxZbbPrQWdArAakf_H7BKm24EbWaI8NTiXiDdE,15227
87
81
  pycityagent/cityagent/blocks/cognition_block.py,sha256=yzjB0D_95vytpa5xiVdmTSpGp8H9HXcjWzzFN0OpP0k,15398
88
- pycityagent/cityagent/blocks/social_block.py,sha256=eedOlwRTGI47QFELYmfe2a_aj0GuHJweSyDxA6AYXcU,15493
82
+ pycityagent/cityagent/blocks/social_block.py,sha256=pGQxumQ8FUpTqWRFcoDkNxnMtyToWXUnjIKYgUAA3vk,15218
89
83
  pycityagent/cityagent/blocks/__init__.py,sha256=h6si6WBcVVuglIskKQKA8Cxtf_VKen1sNPqOFKI311Q,420
90
- pycityagent/cityagent/blocks/economy_block.py,sha256=l47x2Iq15Rjj9WsH3p398dtpcejat4aCkC3X160xBlE,19843
84
+ pycityagent/cityagent/blocks/economy_block.py,sha256=cQePU1kfJzmO9j_vnitQATsV-ztf8SHSWqRKiJVNlM0,19863
91
85
  pycityagent/cityagent/blocks/utils.py,sha256=K--6odjUDUu9YrwrHPaiPIHryo7m_MBmcBqDAy3cV5M,1816
92
86
  pycityagent/cityagent/blocks/other_block.py,sha256=LdtL6248xvMvvRQx6NvdlJrWWZFu8Xusjxb9yEh1M0k,4365
93
- pycityagent/cityagent/blocks/plan_block.py,sha256=AFyjj-RimYNkZ8x6sU-ZMWwB1jqJxSvr1j0vEKmhG4w,11967
87
+ pycityagent/cityagent/blocks/plan_block.py,sha256=sM6FII0ubFj5eOifSf422RV8ry7RUQZfeDylVh4n7Bo,11957
94
88
  pycityagent/cityagent/blocks/mobility_block.py,sha256=OZoA-swFdX0Ezpzkyp8jJMNPQ533JpeeTCdLupoqRjI,15089
95
89
  pycityagent/survey/models.py,sha256=g3xni4GcA1Py3vlGt6z4ltutjgQ4G0uINYAM8vKRJAw,5225
96
90
  pycityagent/survey/__init__.py,sha256=rxwou8U9KeFSP7rMzXtmtp2fVFZxK4Trzi-psx9LPIs,153
97
91
  pycityagent/survey/manager.py,sha256=tHkdeq4lTfAHwvgf4-udsXri0z2l6E00rEbvwl7SqRs,3439
92
+ pycityagent-2.0.0a93.dist-info/RECORD,,
93
+ pycityagent-2.0.0a93.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
94
+ pycityagent-2.0.0a93.dist-info/WHEEL,sha256=VujM3ypTCyUW6hcTDdK2ej0ARVMxlU1Djlh_zWnDgqk,109
95
+ pycityagent-2.0.0a93.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
96
+ pycityagent-2.0.0a93.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
97
+ pycityagent-2.0.0a93.dist-info/METADATA,sha256=p5FYOWipjHs7S50Kd0R-kNN5NB-vWfLgDbyIzFLYW0Q,9110