|
import logging
|
|
import json
|
|
import os
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
class JSONResearchHandler:
|
|
def __init__(self, json_file):
|
|
self.json_file = json_file
|
|
self.research_data = {
|
|
"timestamp": datetime.now().isoformat(),
|
|
"events": [],
|
|
"content": {
|
|
"query": "",
|
|
"sources": [],
|
|
"context": [],
|
|
"report": "",
|
|
"costs": 0.0
|
|
}
|
|
}
|
|
|
|
def log_event(self, event_type: str, data: dict):
|
|
self.research_data["events"].append({
|
|
"timestamp": datetime.now().isoformat(),
|
|
"type": event_type,
|
|
"data": data
|
|
})
|
|
self._save_json()
|
|
|
|
def update_content(self, key: str, value):
|
|
self.research_data["content"][key] = value
|
|
self._save_json()
|
|
|
|
def _save_json(self):
|
|
with open(self.json_file, 'w') as f:
|
|
json.dump(self.research_data, f, indent=2)
|
|
|
|
def setup_research_logging():
|
|
|
|
logs_dir = Path("logs")
|
|
logs_dir.mkdir(exist_ok=True)
|
|
|
|
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
|
|
|
|
log_file = logs_dir / f"research_{timestamp}.log"
|
|
json_file = logs_dir / f"research_{timestamp}.json"
|
|
|
|
|
|
file_handler = logging.FileHandler(log_file)
|
|
file_handler.setLevel(logging.INFO)
|
|
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
|
|
|
|
|
|
research_logger = logging.getLogger('research')
|
|
research_logger.setLevel(logging.INFO)
|
|
|
|
|
|
research_logger.handlers.clear()
|
|
|
|
|
|
research_logger.addHandler(file_handler)
|
|
|
|
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
|
|
research_logger.addHandler(console_handler)
|
|
|
|
|
|
research_logger.propagate = False
|
|
|
|
|
|
json_handler = JSONResearchHandler(json_file)
|
|
|
|
return str(log_file), str(json_file), research_logger, json_handler
|
|
|
|
|
|
def get_research_logger():
|
|
return logging.getLogger('research')
|
|
|
|
def get_json_handler():
|
|
return getattr(logging.getLogger('research'), 'json_handler', None) |