|
from typing import Any, Dict, List, Optional, Literal |
|
from collections import defaultdict |
|
from datetime import datetime |
|
from bw_utils import load_json_file, save_json_file, load_jsonl_file, save_jsonl_file |
|
import os |
|
|
|
|
|
class HistoryManager: |
|
def __init__(self): |
|
self.detailed_history = [] |
|
|
|
def add_record(self, record): |
|
"""添加一个事件记录 |
|
record = { |
|
"cur_round":cur_round, |
|
"role_code":role_code, |
|
"detail":detail, |
|
"type":act_type, |
|
"initiator":initiator, |
|
"actor":actor |
|
"group":group, |
|
"other_info":other_info, |
|
"record_id":record_id |
|
} |
|
""" |
|
self.detailed_history.append(record) |
|
|
|
def modify_record(self, record_id: str, detail: str): |
|
"""修改特定记录""" |
|
for record in self.detailed_history: |
|
if record["record_id"] == record_id: |
|
record["detail"] = detail |
|
print(f"Record {record_id} has been modified.") |
|
return record['group'] |
|
|
|
def search_record_detail(self, record_id: str): |
|
for record in self.detailed_history[::-1]: |
|
if record["record_id"] == record_id: |
|
return record["detail"] |
|
return None |
|
|
|
def get_recent_history(self, recent_k = 5): |
|
return [record["detail"] for record in self.detailed_history[-recent_k:]] |
|
|
|
def get_subsequent_history(self,start_idx): |
|
return [record["detail"] for record in self.detailed_history[start_idx:]] |
|
|
|
def get_complete_history(self,): |
|
return [record["detail"] for record in self.detailed_history[:]] |
|
|
|
def __len__(self): |
|
return len(self.detailed_history) |
|
|
|
def __getstate__(self): |
|
states = {key: value for key, value in self.__dict__.items() \ |
|
if isinstance(value, (str, int, list, dict, bool, type(None)))} |
|
return states |
|
|
|
def __setstate__(self, states): |
|
self.__dict__.update(states) |
|
|
|
def save_to_file(self, root_dir): |
|
filename = os.path.join(root_dir, f"./simulation_history.json") |
|
save_json_file(filename, self.__getstate__() ) |
|
|
|
def load_from_file(self, root_dir): |
|
filename = os.path.join(root_dir, f"./simulation_history.json") |
|
states = load_json_file(filename) |
|
self.__setstate__(states) |
|
|
|
|
|
|