gpt-agents / swarmai /utils /CustomLogger.py
alex-mindspace's picture
(hopefully) working swarm demo
b3509ba
import logging
import json
from pathlib import Path
class CustomFormatter(logging.Formatter):
def format(self, record):
"""record.__dict__ looks like:
{'name': 'SwarmLogger',
'msg': {'message': "Created 2 agents with roles: ['python developer' 'python developer']"}, 'args': (), 'levelname': 'INFO', 'levelno': 20, 'pathname': 'D:\\00Repos\\GPT-Swarm\\tests\\..\\swarmai\\Swarm.py', 'filename': 'Swarm.py', 'module': 'Swarm', 'exc_info': None, 'exc_text': None, 'stack_info': None, 'lineno': 203, 'funcName': 'log', 'created': 1681553727.7010381, 'msecs': 701.038122177124, 'relativeCreated': 1111.7806434631348, 'thread': 46472, 'threadName': 'MainThread', 'processName': 'MainProcess', 'process': 65684}
"""
record_content = record.msg
if "message" in record_content:
message = record_content["message"]
else:
message = record_content
if 'agent_id' not in record_content:
record_content["agent_id"] = -1
if 'cycle' not in record_content:
record_content["cycle"] = -1
if 'step' not in record_content:
record_content["step"] = "swarm"
log_data = {
'time': self.formatTime(record, self.datefmt),
'level': record.levelname,
'agent_id': record_content["agent_id"],
'cycle': record_content["cycle"],
'step': record_content["step"],
'message': message
}
return json.dumps(log_data)
class CustomLogger(logging.Logger):
def __init__(self, log_folder):
super().__init__("SwarmLogger")
self.log_folder = log_folder
self.log_folder.mkdir(parents=True, exist_ok=True)
log_file = f"{self.log_folder}/swarm.json"
# write empty string to the log file to clear it
with open(log_file, "w") as f:
f.write("")
f.close()
# Create a custom logger instance and configure it
self.log_file = log_file
self.log_folder = self.log_folder
self.setLevel(logging.DEBUG)
formatter = CustomFormatter()
fh = logging.FileHandler(log_file)
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
self.addHandler(fh)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(formatter)
self.addHandler(ch)