pycityagent 2.0.0a91__cp39-cp39-macosx_11_0_arm64.whl → 2.0.0a93__cp39-cp39-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.
- pycityagent/agent/agent.py +2 -2
- pycityagent/cityagent/blocks/dispatcher.py +3 -3
- pycityagent/cityagent/blocks/economy_block.py +4 -4
- pycityagent/cityagent/blocks/needs_block.py +25 -52
- pycityagent/cityagent/blocks/plan_block.py +2 -2
- pycityagent/cityagent/blocks/social_block.py +7 -14
- pycityagent/cityagent/initial.py +4 -4
- pycityagent/cityagent/memory_config.py +2 -4
- pycityagent/cityagent/metrics.py +3 -1
- pycityagent/cityagent/societyagent.py +1 -1
- pycityagent/llm/llm.py +4 -3
- pycityagent/memory/const.py +1 -1
- pycityagent/simulation/simulation.py +1 -0
- pycityagent/utils/avro_schema.py +1 -1
- pycityagent/workflow/block.py +2 -2
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/METADATA +1 -1
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/RECORD +21 -21
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/LICENSE +0 -0
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/WHEEL +0 -0
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/entry_points.txt +0 -0
- {pycityagent-2.0.0a91.dist-info → pycityagent-2.0.0a93.dist-info}/top_level.txt +0 -0
pycityagent/agent/agent.py
CHANGED
@@ -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 =
|
151
|
-
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
|
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
|
-
|
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
|
108
|
-
price = await self.economy_client.get(
|
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
|
221
|
-
price = await self.economy_client.get(
|
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
|
-
|
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.
|
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.
|
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
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
"
|
176
|
-
|
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": ["
|
178
|
-
"whatever": ["
|
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
|
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 = "
|
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":
|
404
|
-
"evaluation": "
|
395
|
+
"success": False,
|
396
|
+
"evaluation": "Failed to complete social interaction with default behavior",
|
405
397
|
"consumed_time": 15,
|
398
|
+
"node_id": None,
|
406
399
|
}
|
pycityagent/cityagent/initial.py
CHANGED
@@ -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
|
-
|
31
|
-
for agent_id in
|
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
|
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
|
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": (
|
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,
|
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": (
|
pycityagent/cityagent/metrics.py
CHANGED
@@ -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, '
|
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=
|
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("
|
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("
|
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("
|
346
|
+
print("LLM Error:", e)
|
346
347
|
if attempt < retries - 1:
|
347
348
|
await asyncio.sleep(2**attempt)
|
348
349
|
else:
|
pycityagent/memory/const.py
CHANGED
@@ -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"
|
pycityagent/utils/avro_schema.py
CHANGED
@@ -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": "
|
15
|
+
{"name": "consumption", "type": "string"},
|
16
16
|
{"name": "personality", "type": "string"},
|
17
17
|
{"name": "income", "type": "float"},
|
18
18
|
{"name": "currency", "type": "float"},
|
pycityagent/workflow/block.py
CHANGED
@@ -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"]
|
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("
|
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.
|
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=md3JO_ifs5j508p3TDNMgtQVtnQblpGEt_Wo4W56l8Y,107
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
76
|
-
pycityagent/cityagent/memory_config.py,sha256=
|
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=
|
82
|
-
pycityagent/cityagent/societyagent.py,sha256=
|
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=
|
86
|
-
pycityagent/cityagent/blocks/needs_block.py,sha256=
|
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=
|
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=
|
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=
|
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=md3JO_ifs5j508p3TDNMgtQVtnQblpGEt_Wo4W56l8Y,107
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|