Spaces:
Sleeping
Sleeping
| import logging | |
| import sys | |
| from datetime import datetime | |
| from typing import Dict, Any | |
| def setup_logging(level=logging.INFO): | |
| """Setup comprehensive logging configuration""" | |
| # Create formatter | |
| formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| datefmt='%Y-%m-%d %H:%M:%S' | |
| ) | |
| # Console handler | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(level) | |
| console_handler.setFormatter(formatter) | |
| # File handler | |
| file_handler = logging.FileHandler(f'legal_rag_{datetime.now().strftime("%Y%m%d")}.log') | |
| file_handler.setLevel(logging.DEBUG) | |
| file_handler.setFormatter(formatter) | |
| # Configure root logger | |
| logging.basicConfig( | |
| level=level, | |
| handlers=[console_handler, file_handler], | |
| force=True | |
| ) | |
| # Specific logger configurations | |
| legal_logger = logging.getLogger('legal_rag') | |
| legal_logger.setLevel(logging.DEBUG) | |
| mongodb_logger = logging.getLogger('pymongo') | |
| mongodb_logger.setLevel(logging.WARNING) | |
| print("✅ Logging setup completed") | |
| class PerformanceLogger: | |
| """Logger for performance monitoring""" | |
| def __init__(self): | |
| self.metrics = { | |
| "query_times": [], | |
| "routing_times": [], | |
| "retrieval_times": [], | |
| "generation_times": [] | |
| } | |
| def log_query_time(self, session_id: str, duration: float): | |
| """Log query processing time""" | |
| self.metrics["query_times"].append({ | |
| "session_id": session_id, | |
| "duration": duration, | |
| "timestamp": datetime.now() | |
| }) | |
| logging.info(f"Query processed in {duration:.2f}s for session {session_id}") | |
| def log_routing_decision(self, session_id: str, decision: str, confidence: str, method: str): | |
| """Log routing decisions""" | |
| logging.debug(f"Routing: session={session_id}, decision={decision}, confidence={confidence}, method={method}") | |
| def get_performance_report(self) -> Dict[str, Any]: | |
| """Generate performance report""" | |
| query_times = [m["duration"] for m in self.metrics["query_times"]] | |
| return { | |
| "total_queries": len(query_times), | |
| "average_query_time": sum(query_times) / len(query_times) if query_times else 0, | |
| "max_query_time": max(query_times) if query_times else 0, | |
| "min_query_time": min(query_times) if query_times else 0 | |
| } |