add mg ser&deser

This commit is contained in:
better629 2023-11-28 09:29:00 +08:00
parent 4db99b825a
commit 949bc747f9
16 changed files with 693 additions and 16 deletions

View file

@ -13,6 +13,7 @@
"""
import asyncio
from typing import Iterable, Set
from pathlib import Path
from pydantic import BaseModel, Field
@ -20,6 +21,7 @@ from metagpt.logs import logger
from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.utils.common import is_subscribed
from metagpt.utils.utils import read_json_file, write_json_file
class Environment(BaseModel):
@ -35,6 +37,42 @@ class Environment(BaseModel):
class Config:
arbitrary_types_allowed = True
def serialize(self, stg_path: Path):
roles_path = stg_path.joinpath("roles.json")
roles_info = []
for role_key, role in self.roles.items():
roles_info.append({
"role_class": role.__class__.__name__,
"module_name": role.__module__,
"role_name": role.name
})
role.serialize(stg_path=stg_path.joinpath(f"roles/{role.__class__.__name__}_{role.name}"))
write_json_file(roles_path, roles_info)
self.memory.serialize(stg_path)
history_path = stg_path.joinpath("history.json")
write_json_file(history_path, {"content": self.history})
def deserialize(self, stg_path: Path):
""" stg_path: ./storage/team/environment/ """
roles_path = stg_path.joinpath("roles.json")
roles_info = read_json_file(roles_path)
for role_info in roles_info:
role_class = role_info.get("role_class")
role_name = role_info.get("role_name")
role_path = stg_path.joinpath(f"roles/{role_class}_{role_name}")
role = Role.deserialize(role_path)
self.add_role(role)
memory = Memory.deserialize(stg_path)
self.memory = memory
history_path = stg_path.joinpath("history.json")
history = read_json_file(history_path)
self.history = history.get("content")
def add_role(self, role: Role):
"""增加一个在当前环境的角色
Add a role in the current environment