pycityagent 2.0.0a58__cp310-cp310-macosx_11_0_arm64.whl → 2.0.0a60__cp310-cp310-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 +13 -19
- pycityagent/cityagent/societyagent.py +1 -0
- pycityagent/pycityagent-sim +0 -0
- pycityagent/simulation/agentgroup.py +9 -17
- pycityagent/simulation/simulation.py +54 -48
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/METADATA +1 -1
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/RECORD +11 -11
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/LICENSE +0 -0
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/WHEEL +0 -0
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/entry_points.txt +0 -0
- {pycityagent-2.0.0a58.dist-info → pycityagent-2.0.0a60.dist-info}/top_level.txt +0 -0
pycityagent/agent/agent.py
CHANGED
@@ -94,24 +94,19 @@ class CitizenAgent(Agent):
|
|
94
94
|
logger.warning("Economy client is not set")
|
95
95
|
return
|
96
96
|
if not self._has_bound_to_economy:
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
self._has_bound_to_economy = True
|
111
|
-
else:
|
112
|
-
logger.debug(
|
113
|
-
f"Binding to Economy before binding to Simulator, skip binding to Economy Simulator"
|
114
|
-
)
|
97
|
+
try:
|
98
|
+
await self._economy_client.remove_agents([self._agent_id])
|
99
|
+
except:
|
100
|
+
pass
|
101
|
+
person_id = await self.status.get("id")
|
102
|
+
currency = await self.status.get("currency")
|
103
|
+
await self._economy_client.add_agents(
|
104
|
+
{
|
105
|
+
"id": person_id,
|
106
|
+
"currency": currency,
|
107
|
+
}
|
108
|
+
)
|
109
|
+
self._has_bound_to_economy = True
|
115
110
|
|
116
111
|
async def handle_gather_message(self, payload: dict):
|
117
112
|
"""处理收到的消息,识别发送者"""
|
@@ -176,7 +171,6 @@ class InstitutionAgent(Agent):
|
|
176
171
|
await self._bind_to_economy()
|
177
172
|
|
178
173
|
async def _bind_to_economy(self):
|
179
|
-
print("Debug:", self._economy_client, self._has_bound_to_economy)
|
180
174
|
if self._economy_client is None:
|
181
175
|
logger.debug("Economy client is not set")
|
182
176
|
return
|
@@ -161,6 +161,7 @@ class MindBlock(Block):
|
|
161
161
|
await self.cognitionBlock.forward()
|
162
162
|
|
163
163
|
class SocietyAgent(CitizenAgent):
|
164
|
+
update_with_sim = UpdateWithSimulator()
|
164
165
|
mindBlock: MindBlock
|
165
166
|
planAndActionBlock: PlanAndActionBlock
|
166
167
|
update_with_sim = UpdateWithSimulator()
|
pycityagent/pycityagent-sim
CHANGED
Binary file
|
@@ -34,10 +34,7 @@ class AgentGroup:
|
|
34
34
|
self,
|
35
35
|
agent_class: Union[type[Agent], list[type[Agent]]],
|
36
36
|
number_of_agents: Union[int, list[int]],
|
37
|
-
memory_config_function_group:
|
38
|
-
Callable[[], tuple[dict, dict, dict]],
|
39
|
-
list[Callable[[], tuple[dict, dict, dict]]],
|
40
|
-
],
|
37
|
+
memory_config_function_group: dict[type[Agent], Callable],
|
41
38
|
config: dict,
|
42
39
|
exp_name: str,
|
43
40
|
exp_id: str | UUID,
|
@@ -49,14 +46,12 @@ class AgentGroup:
|
|
49
46
|
mlflow_run_id: str,
|
50
47
|
embedding_model: Embeddings,
|
51
48
|
logging_level: int,
|
52
|
-
agent_config_file: Optional[
|
49
|
+
agent_config_file: Optional[dict[type[Agent], str]] = None,
|
53
50
|
):
|
54
51
|
logger.setLevel(logging_level)
|
55
52
|
self._uuid = str(uuid.uuid4())
|
56
53
|
if not isinstance(agent_class, list):
|
57
54
|
agent_class = [agent_class]
|
58
|
-
if not isinstance(memory_config_function_group, list):
|
59
|
-
memory_config_function_group = [memory_config_function_group]
|
60
55
|
if not isinstance(number_of_agents, list):
|
61
56
|
number_of_agents = [number_of_agents]
|
62
57
|
self.agent_class = agent_class
|
@@ -123,13 +118,10 @@ class AgentGroup:
|
|
123
118
|
self.projector = pyproj.Proj(self.simulator.map.header["projection"])
|
124
119
|
|
125
120
|
# prepare Economy client
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
)
|
131
|
-
else:
|
132
|
-
self.economy_client = None
|
121
|
+
logger.info(f"-----Creating Economy client in AgentGroup {self._uuid} ...")
|
122
|
+
self.economy_client = EconomyClient(
|
123
|
+
config["simulator_request"]["simulator"]["server"]
|
124
|
+
)
|
133
125
|
|
134
126
|
# set FaissQuery
|
135
127
|
if self.embedding_model is not None:
|
@@ -142,7 +134,7 @@ class AgentGroup:
|
|
142
134
|
agent_class_i = agent_class[i]
|
143
135
|
number_of_agents_i = number_of_agents[i]
|
144
136
|
for j in range(number_of_agents_i):
|
145
|
-
memory_config_function_group_i = memory_config_function_group[
|
137
|
+
memory_config_function_group_i = memory_config_function_group[agent_class_i]
|
146
138
|
extra_attributes, profile, base = memory_config_function_group_i()
|
147
139
|
memory = Memory(config=extra_attributes, profile=profile, base=base)
|
148
140
|
agent = agent_class_i(
|
@@ -161,8 +153,8 @@ class AgentGroup:
|
|
161
153
|
agent.set_avro_file(self.avro_file) # type: ignore
|
162
154
|
if self.enable_pgsql:
|
163
155
|
agent.set_pgsql_writer(self._pgsql_writer)
|
164
|
-
if self.agent_config_file is not None and self.agent_config_file[
|
165
|
-
agent.load_from_file(self.agent_config_file[
|
156
|
+
if self.agent_config_file is not None and self.agent_config_file[agent_class_i]:
|
157
|
+
agent.load_from_file(self.agent_config_file[agent_class_i])
|
166
158
|
if self._message_interceptor is not None:
|
167
159
|
agent.set_message_interceptor(self._message_interceptor)
|
168
160
|
self.agents.append(agent)
|
@@ -3,24 +3,24 @@ import json
|
|
3
3
|
import logging
|
4
4
|
import time
|
5
5
|
import uuid
|
6
|
-
from collections.abc import Callable
|
6
|
+
from collections.abc import Callable
|
7
7
|
from datetime import datetime, timezone
|
8
8
|
from pathlib import Path
|
9
|
-
from typing import Any, Optional, Type, Union
|
9
|
+
from typing import Any, Literal, Optional, Type, Union
|
10
10
|
|
11
11
|
import ray
|
12
12
|
import yaml
|
13
13
|
from langchain_core.embeddings import Embeddings
|
14
14
|
|
15
15
|
from ..agent import Agent, InstitutionAgent
|
16
|
-
from ..cityagent import (BankAgent, FirmAgent, GovernmentAgent, NBSAgent,
|
17
|
-
|
16
|
+
from ..cityagent import (BankAgent, FirmAgent, GovernmentAgent, NBSAgent,SocietyAgent,
|
17
|
+
memory_config_bank, memory_config_firm,
|
18
18
|
memory_config_government, memory_config_nbs,
|
19
19
|
memory_config_societyagent)
|
20
20
|
from ..cityagent.initial import bind_agent_info, initialize_social_network
|
21
21
|
from ..environment import Simulator
|
22
|
-
from ..
|
23
|
-
from ..
|
22
|
+
from ..economy.econ_client import EconomyClient
|
23
|
+
from ..llm import SimpleEmbedding
|
24
24
|
from ..message import (MessageBlockBase, MessageBlockListenerBase,
|
25
25
|
MessageInterceptor, Messager)
|
26
26
|
from ..metrics import init_mlflow_connection
|
@@ -42,7 +42,7 @@ class AgentSimulation:
|
|
42
42
|
agent_class: Union[None, type[Agent], list[type[Agent]]] = None,
|
43
43
|
agent_config_file: Optional[dict] = None,
|
44
44
|
metric_extractor: Optional[list[tuple[int, Callable]]] = None,
|
45
|
-
|
45
|
+
enable_institution: bool = True,
|
46
46
|
agent_prefix: str = "agent_",
|
47
47
|
exp_name: str = "default_experiment",
|
48
48
|
logging_level: int = logging.WARNING,
|
@@ -58,7 +58,7 @@ class AgentSimulation:
|
|
58
58
|
if isinstance(agent_class, list):
|
59
59
|
self.agent_class = agent_class
|
60
60
|
elif agent_class is None:
|
61
|
-
if
|
61
|
+
if enable_institution:
|
62
62
|
self.agent_class = [
|
63
63
|
SocietyAgent,
|
64
64
|
FirmAgent,
|
@@ -66,27 +66,30 @@ class AgentSimulation:
|
|
66
66
|
NBSAgent,
|
67
67
|
GovernmentAgent,
|
68
68
|
]
|
69
|
-
self.default_memory_config_func =
|
70
|
-
memory_config_societyagent,
|
71
|
-
memory_config_firm,
|
72
|
-
memory_config_bank,
|
73
|
-
memory_config_nbs,
|
74
|
-
memory_config_government,
|
75
|
-
|
69
|
+
self.default_memory_config_func = {
|
70
|
+
SocietyAgent: memory_config_societyagent,
|
71
|
+
FirmAgent: memory_config_firm,
|
72
|
+
BankAgent: memory_config_bank,
|
73
|
+
NBSAgent: memory_config_nbs,
|
74
|
+
GovernmentAgent: memory_config_government,
|
75
|
+
}
|
76
76
|
else:
|
77
77
|
self.agent_class = [SocietyAgent]
|
78
|
-
self.default_memory_config_func =
|
78
|
+
self.default_memory_config_func = {SocietyAgent: memory_config_societyagent}
|
79
79
|
else:
|
80
80
|
self.agent_class = [agent_class]
|
81
81
|
self.agent_config_file = agent_config_file
|
82
82
|
self.logging_level = logging_level
|
83
83
|
self.config = config
|
84
84
|
self.exp_name = exp_name
|
85
|
-
self._simulator = Simulator(config["simulator_request"])
|
86
85
|
_simulator_config = config["simulator_request"].get("simulator", {})
|
87
86
|
if "server" in _simulator_config:
|
88
87
|
raise ValueError(f"Passing Traffic Simulation address is not supported!")
|
89
|
-
|
88
|
+
self._simulator = Simulator(config["simulator_request"])
|
89
|
+
self._economy_client = EconomyClient(
|
90
|
+
config["simulator_request"]["simulator"]["server"]
|
91
|
+
)
|
92
|
+
if enable_institution:
|
90
93
|
self._economy_addr = economy_addr = self._simulator.server_addr
|
91
94
|
if economy_addr is None:
|
92
95
|
raise ValueError(
|
@@ -205,9 +208,11 @@ class AgentSimulation:
|
|
205
208
|
"""Directly run from config file
|
206
209
|
Basic config file should contain:
|
207
210
|
- simulation_config: file_path
|
211
|
+
- enable_institution: bool, default is True
|
208
212
|
- agent_config:
|
209
|
-
- agent_config_file: Optional[dict]
|
210
|
-
- memory_config_func: Optional[
|
213
|
+
- agent_config_file: Optional[dict[type[Agent], str]]
|
214
|
+
- memory_config_func: Optional[dict[type[Agent], Callable]]
|
215
|
+
- metric_extractor: Optional[list[tuple[int, Callable]]]
|
211
216
|
- init_func: Optional[list[Callable[AgentSimulation, None]]]
|
212
217
|
- group_size: Optional[int]
|
213
218
|
- embedding_model: Optional[EmbeddingModel]
|
@@ -220,7 +225,7 @@ class AgentSimulation:
|
|
220
225
|
- list[Step]
|
221
226
|
- Step:
|
222
227
|
- type: str, "step", "run", "interview", "survey", "intervene", "pause", "resume"
|
223
|
-
-
|
228
|
+
- days: int if type is "run", else None
|
224
229
|
- times: int if type is "step", else None
|
225
230
|
- description: Optional[str], description of the step
|
226
231
|
- func: Optional[Callable[AgentSimulation, None]], only used when type is "interview", "survey" and "intervene"
|
@@ -243,6 +248,8 @@ class AgentSimulation:
|
|
243
248
|
simulation = cls(
|
244
249
|
config=simulation_config,
|
245
250
|
agent_config_file=config["agent_config"].get("agent_config_file", None),
|
251
|
+
metric_extractor=config["agent_config"].get("metric_extractor", None),
|
252
|
+
enable_institution=config.get("enable_institution", True),
|
246
253
|
exp_name=config.get("exp_name", "default_experiment"),
|
247
254
|
logging_level=config.get("logging_level", logging.WARNING),
|
248
255
|
)
|
@@ -275,7 +282,7 @@ class AgentSimulation:
|
|
275
282
|
if step["type"] not in ["run", "step", "interview", "survey", "intervene"]:
|
276
283
|
raise ValueError(f"Invalid step type: {step['type']}")
|
277
284
|
if step["type"] == "run":
|
278
|
-
await simulation.run(step.get("
|
285
|
+
await simulation.run(step.get("days", 1))
|
279
286
|
elif step["type"] == "step":
|
280
287
|
times = step.get("times", 1)
|
281
288
|
for _ in range(times):
|
@@ -305,6 +312,10 @@ class AgentSimulation:
|
|
305
312
|
self,
|
306
313
|
) -> Path:
|
307
314
|
return self._avro_path # type:ignore
|
315
|
+
|
316
|
+
@property
|
317
|
+
def economy_client(self):
|
318
|
+
return self._economy_client
|
308
319
|
|
309
320
|
@property
|
310
321
|
def groups(self):
|
@@ -409,7 +420,7 @@ class AgentSimulation:
|
|
409
420
|
social_black_list: Optional[list[tuple[str, str]]] = None,
|
410
421
|
message_listener: Optional[MessageBlockListenerBase] = None,
|
411
422
|
embedding_model: Embeddings = SimpleEmbedding(),
|
412
|
-
memory_config_func: Optional[
|
423
|
+
memory_config_func: Optional[dict[type[Agent], Callable]] = None,
|
413
424
|
) -> None:
|
414
425
|
"""初始化智能体
|
415
426
|
|
@@ -418,7 +429,7 @@ class AgentSimulation:
|
|
418
429
|
group_size: 每个组的智能体数量,每一个组为一个独立的ray actor
|
419
430
|
pg_sql_writers: 独立的PgSQL writer数量
|
420
431
|
message_interceptors: message拦截器数量
|
421
|
-
memory_config_func: 返回Memory配置的函数,需要返回(EXTRA_ATTRIBUTES, PROFILE, BASE)元组,
|
432
|
+
memory_config_func: 返回Memory配置的函数,需要返回(EXTRA_ATTRIBUTES, PROFILE, BASE)元组, 每个元素表示一个智能体类创建的Memory配置函数
|
422
433
|
"""
|
423
434
|
if not isinstance(agent_count, list):
|
424
435
|
agent_count = [agent_count]
|
@@ -429,17 +440,6 @@ class AgentSimulation:
|
|
429
440
|
if memory_config_func is None:
|
430
441
|
memory_config_func = self.default_memory_config_func
|
431
442
|
|
432
|
-
elif not isinstance(memory_config_func, list):
|
433
|
-
logger.warning(
|
434
|
-
"memory_config_func is not a list, using specific memory config function"
|
435
|
-
)
|
436
|
-
memory_config_func = [memory_config_func]
|
437
|
-
|
438
|
-
if len(memory_config_func) != len(agent_count):
|
439
|
-
logger.warning(
|
440
|
-
"The length of memory_config_func and agent_count does not match, using default memory_config"
|
441
|
-
)
|
442
|
-
memory_config_func = self.default_memory_config_func
|
443
443
|
# 使用线程池并行创建 AgentGroup
|
444
444
|
group_creation_params = []
|
445
445
|
|
@@ -451,7 +451,7 @@ class AgentSimulation:
|
|
451
451
|
for i in range(len(self.agent_class)):
|
452
452
|
agent_class = self.agent_class[i]
|
453
453
|
agent_count_i = agent_count[i]
|
454
|
-
memory_config_func_i = memory_config_func[
|
454
|
+
memory_config_func_i = memory_config_func.get(agent_class, self.default_memory_config_func[agent_class])
|
455
455
|
|
456
456
|
if self.agent_config_file is not None:
|
457
457
|
config_file = self.agent_config_file.get(agent_class, None)
|
@@ -481,8 +481,8 @@ class AgentSimulation:
|
|
481
481
|
|
482
482
|
agent_classes = []
|
483
483
|
agent_counts = []
|
484
|
-
memory_config_funcs =
|
485
|
-
config_files =
|
484
|
+
memory_config_funcs = {}
|
485
|
+
config_files = {}
|
486
486
|
|
487
487
|
# 分配每种类型的机构智能体到当前组
|
488
488
|
curr_start = start_idx
|
@@ -490,8 +490,8 @@ class AgentSimulation:
|
|
490
490
|
if curr_start < count:
|
491
491
|
agent_classes.append(agent_class)
|
492
492
|
agent_counts.append(min(count - curr_start, number_of_agents))
|
493
|
-
memory_config_funcs
|
494
|
-
config_files
|
493
|
+
memory_config_funcs[agent_class] = mem_func
|
494
|
+
config_files[agent_class] = conf_file
|
495
495
|
curr_start = max(0, curr_start - count)
|
496
496
|
|
497
497
|
group_creation_params.append(
|
@@ -516,8 +516,8 @@ class AgentSimulation:
|
|
516
516
|
|
517
517
|
agent_classes = []
|
518
518
|
agent_counts = []
|
519
|
-
memory_config_funcs =
|
520
|
-
config_files =
|
519
|
+
memory_config_funcs = {}
|
520
|
+
config_files = {}
|
521
521
|
|
522
522
|
# 分配每种类型的普通智能体到当前组
|
523
523
|
curr_start = start_idx
|
@@ -525,8 +525,8 @@ class AgentSimulation:
|
|
525
525
|
if curr_start < count:
|
526
526
|
agent_classes.append(agent_class)
|
527
527
|
agent_counts.append(min(count - curr_start, number_of_agents))
|
528
|
-
memory_config_funcs
|
529
|
-
config_files
|
528
|
+
memory_config_funcs[agent_class] = mem_func
|
529
|
+
config_files[agent_class] = conf_file
|
530
530
|
curr_start = max(0, curr_start - count)
|
531
531
|
|
532
532
|
group_creation_params.append(
|
@@ -688,14 +688,20 @@ class AgentSimulation:
|
|
688
688
|
group = self._agent_uuid2group[target_agent_uuid]
|
689
689
|
await group.update.remote(target_agent_uuid, target_key, content)
|
690
690
|
|
691
|
+
async def economy_update(self, target_agent_id: int, target_key: str, content: Any, mode: Literal["replace", "merge"] = "replace"):
|
692
|
+
"""更新指定智能体的经济数据"""
|
693
|
+
self.economy_client.update(
|
694
|
+
id = target_agent_id,
|
695
|
+
key = target_key,
|
696
|
+
value=content,
|
697
|
+
mode=mode
|
698
|
+
)
|
699
|
+
|
691
700
|
async def send_survey(
|
692
|
-
self, survey: Survey, agent_uuids:
|
701
|
+
self, survey: Survey, agent_uuids: list[str] = None
|
693
702
|
):
|
694
703
|
"""发送问卷"""
|
695
|
-
await self.messager.connect.remote() # type:ignore
|
696
704
|
survey_dict = survey.to_dict()
|
697
|
-
if agent_uuids is None:
|
698
|
-
agent_uuids = self._agent_uuids
|
699
705
|
_date_time = datetime.now(timezone.utc)
|
700
706
|
payload = {
|
701
707
|
"from": SURVEY_SENDER_UUID,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: pycityagent
|
3
|
-
Version: 2.0.
|
3
|
+
Version: 2.0.0a60
|
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,10 +1,10 @@
|
|
1
|
-
pycityagent-2.0.
|
2
|
-
pycityagent-2.0.
|
3
|
-
pycityagent-2.0.
|
4
|
-
pycityagent-2.0.
|
5
|
-
pycityagent-2.0.
|
6
|
-
pycityagent-2.0.
|
7
|
-
pycityagent/pycityagent-sim,sha256=
|
1
|
+
pycityagent-2.0.0a60.dist-info/RECORD,,
|
2
|
+
pycityagent-2.0.0a60.dist-info/LICENSE,sha256=n2HPXiupinpyHMnIkbCf3OTYd3KMqbmldu1e7av0CAU,1084
|
3
|
+
pycityagent-2.0.0a60.dist-info/WHEEL,sha256=ezfKMaDztqf77C8lvQ0NCnZxkTaOaKLprqJ8q932MhU,109
|
4
|
+
pycityagent-2.0.0a60.dist-info/entry_points.txt,sha256=BZcne49AAIFv-hawxGnPbblea7X3MtAtoPyDX8L4OC4,132
|
5
|
+
pycityagent-2.0.0a60.dist-info/top_level.txt,sha256=yOmeu6cSXmiUtScu53a3s0p7BGtLMaV0aff83EHCTic,43
|
6
|
+
pycityagent-2.0.0a60.dist-info/METADATA,sha256=oyO0iwWkmdYb_ImPGko3_7auKYsx4ve45hSRRTEmYFs,9110
|
7
|
+
pycityagent/pycityagent-sim,sha256=vskCJGHJEh0B2dUfmYlVyrcy3sDZ3kBNwjqcYUZpmO8,35449490
|
8
8
|
pycityagent/__init__.py,sha256=PUKWTXc-xdMG7px8oTNclodsILUgypANj2Z647sY63k,808
|
9
9
|
pycityagent/pycityagent-ui,sha256=cHZjqtrQ4Fh4qtRahFNCNbT2DNHLmUexiDAa-72Z3RQ,40333378
|
10
10
|
pycityagent/metrics/mlflow_client.py,sha256=bTrqYsRfNfjJd6l91hU8vN7JXzJC7DHiM2XbkhMuXIU,4613
|
@@ -28,9 +28,9 @@ pycityagent/memory/utils.py,sha256=oJWLdPeJy_jcdKcDTo9JAH9kDZhqjoQhhv_zT9qWC0w,8
|
|
28
28
|
pycityagent/memory/const.py,sha256=6zpJPJXWoH9-yf4RARYYff586agCoud9BRn7sPERB1g,932
|
29
29
|
pycityagent/memory/faiss_query.py,sha256=V3rIw6d1_xcpNqZBbAYz3qfjVNE7NfJ7xOS5SibPtVU,13180
|
30
30
|
pycityagent/memory/state.py,sha256=TYItiyDtehMEQaSBN7PpNrnNxdDM5jGppr9R9Ufv3kA,5134
|
31
|
-
pycityagent/simulation/simulation.py,sha256=
|
31
|
+
pycityagent/simulation/simulation.py,sha256=sbrX-e8gV2Wwi8k6ir7TVgQhzejpUZ85SfuiXO4E39I,33983
|
32
32
|
pycityagent/simulation/__init__.py,sha256=P5czbcg2d8S0nbbnsQXFIhwzO4CennAhZM8OmKvAeYw,194
|
33
|
-
pycityagent/simulation/agentgroup.py,sha256=
|
33
|
+
pycityagent/simulation/agentgroup.py,sha256=V-ChLJtJUWJZnmTGllXqGk4XW4iDz9h3V89RgW0e4gg,31376
|
34
34
|
pycityagent/simulation/storage/pg.py,sha256=xRshSOGttW-p0re0fNBOjOpb-nQ5msIE2LsdT79_E_Y,8425
|
35
35
|
pycityagent/message/message_interceptor.py,sha256=w8XTyZStQtMjILpeAX3VMhAWcYAuaxCgSMwXQU1OryM,8951
|
36
36
|
pycityagent/message/__init__.py,sha256=f5QH7DKPqEAMyfSlBMnl3uouOKlsoel909STlIe7nUk,276
|
@@ -46,7 +46,7 @@ pycityagent/utils/parsers/parser_base.py,sha256=KBKO4zLZPNdGjPAGqIus8LseZ8W3Tlt2
|
|
46
46
|
pycityagent/utils/parsers/json_parser.py,sha256=tjwyPluYfkWgsvLi0hzfJwFhO3L6yQfZMKza20HaGrY,2911
|
47
47
|
pycityagent/agent/agent_base.py,sha256=vC1nMWahwi_nVBUXVdC1CnZpqimKZApixD2m2Iqu_bg,24196
|
48
48
|
pycityagent/agent/__init__.py,sha256=U20yKu9QwSqAx_PHk5JwipfODkDfxONtumVfnsKjWFg,180
|
49
|
-
pycityagent/agent/agent.py,sha256=
|
49
|
+
pycityagent/agent/agent.py,sha256=H5AXh92LZZzrGHH8dkwAVTKQIfI8a7xH-83iv50Qejs,11696
|
50
50
|
pycityagent/cli/wrapper.py,sha256=9aG6D2cnmh6aIhiVXKPGKuMjVcdAa-TwzANudb2q_FU,1147
|
51
51
|
pycityagent/workflow/__init__.py,sha256=H08Ko3eliZvuuCMajbEri-IP4-SeswYU6UjHBNA4Ze0,490
|
52
52
|
pycityagent/workflow/prompt.py,sha256=6jI0Rq54JLv3-IXqZLYug62vse10wTI83xvf4ZX42nk,2929
|
@@ -87,7 +87,7 @@ pycityagent/cityagent/__init__.py,sha256=gcBQ-a50XegFtjigQ7xDXRBZrywBKqifiQFSRnE
|
|
87
87
|
pycityagent/cityagent/firmagent.py,sha256=UVlNN0lpa4cC4PZVqYzQhbc5VJ2oGsA1731mhbCjnR8,4109
|
88
88
|
pycityagent/cityagent/nbsagent.py,sha256=WIXW__6dZ5IrqBqDCjvGbrCshpXzuFRV3Ww6gkYw7p4,4387
|
89
89
|
pycityagent/cityagent/initial.py,sha256=7hgCt_tGdnVTXGfEQOn1GTW5dAs1b-ru_FwXxRLI6tM,4549
|
90
|
-
pycityagent/cityagent/societyagent.py,sha256=
|
90
|
+
pycityagent/cityagent/societyagent.py,sha256=DKkPtCPXTpHs83hi3bvXxkQYxKqZI0YldYCyFu4yjsk,24811
|
91
91
|
pycityagent/cityagent/message_intercept.py,sha256=HiNOtBXKq40LCmvsw2KMLxMsbmXSVcbRytAO-eI-1sU,3279
|
92
92
|
pycityagent/cityagent/governmentagent.py,sha256=HJLuhvEmllu_1KnFEJsYCIasaBJT0BV9Cn_4Y2QGPqg,2791
|
93
93
|
pycityagent/cityagent/blocks/dispatcher.py,sha256=mEa1r3tRS3KI1BMZR_w_sbUGzOj6aUJuiUrsHv1n2n0,2943
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|