Spaces:
Paused
Paused
| 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(): | |
| # Create logs directory if it doesn't exist | |
| logs_dir = Path("logs") | |
| logs_dir.mkdir(exist_ok=True) | |
| # Generate timestamp for log files | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| # Create log file paths | |
| log_file = logs_dir / f"research_{timestamp}.log" | |
| json_file = logs_dir / f"research_{timestamp}.json" | |
| # Configure file handler for research logs | |
| file_handler = logging.FileHandler(log_file) | |
| file_handler.setLevel(logging.INFO) | |
| file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) | |
| # Get research logger and configure it | |
| research_logger = logging.getLogger('research') | |
| research_logger.setLevel(logging.INFO) | |
| # Remove any existing handlers to avoid duplicates | |
| research_logger.handlers.clear() | |
| # Add file handler | |
| research_logger.addHandler(file_handler) | |
| # Add stream handler for console output | |
| console_handler = logging.StreamHandler() | |
| console_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) | |
| research_logger.addHandler(console_handler) | |
| # Prevent propagation to root logger to avoid duplicate logs | |
| research_logger.propagate = False | |
| # Create JSON handler | |
| json_handler = JSONResearchHandler(json_file) | |
| return str(log_file), str(json_file), research_logger, json_handler | |
| # Create a function to get the logger and JSON handler | |
| def get_research_logger(): | |
| return logging.getLogger('research') | |
| def get_json_handler(): | |
| return getattr(logging.getLogger('research'), 'json_handler', None) |