Spaces:
Sleeping
Sleeping
| """Logging utilities (placeholder for legacy compatibility).""" | |
| import json | |
| import logging | |
| from uuid import uuid4 | |
| from pathlib import Path | |
| from threading import Lock | |
| from datetime import datetime | |
| from typing import Dict, Any, Optional | |
| from .config import load_config | |
| def save_logs( | |
| scheduler=None, | |
| json_dataset_path: Path = None, | |
| logs_data: Dict[str, Any] = None, | |
| feedback: str = None | |
| ) -> None: | |
| """ | |
| Save logs (placeholder for legacy compatibility). | |
| Args: | |
| scheduler: HuggingFace scheduler (not used in refactored version) | |
| json_dataset_path: Path to JSON dataset | |
| logs_data: Log data dictionary | |
| feedback: User feedback | |
| Note: | |
| This is a placeholder function for backward compatibility. | |
| In the refactored version, logging would be handled differently. | |
| """ | |
| if not is_logging_enabled(): | |
| return | |
| try: | |
| current_time = datetime.now().timestamp() | |
| logs_data["time"] = str(current_time) | |
| if feedback: | |
| logs_data["feedback"] = feedback | |
| logs_data["record_id"] = str(uuid4()) | |
| field_order = [ | |
| "record_id", | |
| "session_id", | |
| "time", | |
| "session_duration_seconds", | |
| "client_location", | |
| "platform", | |
| "system_prompt", | |
| "sources", | |
| "reports", | |
| "subtype", | |
| "year", | |
| "question", | |
| "retriever", | |
| "endpoint_type", | |
| "reader", | |
| "docs", | |
| "answer", | |
| "feedback" | |
| ] | |
| ordered_logs = {k: logs_data.get(k) for k in field_order if k in logs_data} | |
| lock = getattr(scheduler, "lock", None) | |
| if lock is None: | |
| lock = Lock() | |
| with lock: | |
| with open(json_dataset_path, 'a') as f: | |
| json.dump(ordered_logs, f) | |
| f.write("\n") | |
| logging.info("logging done") | |
| except Exception as e: | |
| logging.error(f"Error saving logs: {e}") | |
| raise | |
| def setup_logging(log_level: str = "INFO", log_file: str = None) -> None: | |
| """ | |
| Set up logging configuration. | |
| Args: | |
| log_level: Logging level | |
| log_file: Optional log file path | |
| """ | |
| if not is_logging_enabled(): | |
| return | |
| # Configure logging | |
| logging.basicConfig( | |
| level=getattr(logging, log_level.upper()), | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.StreamHandler(), | |
| logging.FileHandler(log_file) if log_file else logging.NullHandler() | |
| ] | |
| ) | |
| def log_query_response( | |
| query: str, | |
| response: str, | |
| metadata: Dict[str, Any] = None | |
| ) -> None: | |
| """ | |
| Log query and response for analysis. | |
| Args: | |
| query: User query | |
| response: System response | |
| metadata: Additional metadata | |
| """ | |
| if not is_logging_enabled(): | |
| return | |
| logger = logging.getLogger(__name__) | |
| log_entry = { | |
| "query": query, | |
| "response_length": len(response), | |
| "metadata": metadata or {} | |
| } | |
| logger.info(f"Query processed: {log_entry}") | |
| def log_error(error: Exception, context: Dict[str, Any] = None) -> None: | |
| """ | |
| Log error with context. | |
| Args: | |
| error: Exception that occurred | |
| context: Additional context information | |
| """ | |
| if not is_logging_enabled(): | |
| return | |
| logger = logging.getLogger(__name__) | |
| error_info = { | |
| "error_type": type(error).__name__, | |
| "error_message": str(error), | |
| "context": context or {} | |
| } | |
| logger.error(f"Error occurred: {error_info}") | |
| def log_performance_metrics( | |
| operation: str, | |
| duration: float, | |
| metadata: Dict[str, Any] = None | |
| ) -> None: | |
| """ | |
| Log performance metrics. | |
| Args: | |
| operation: Name of the operation | |
| duration: Duration in seconds | |
| metadata: Additional metadata | |
| """ | |
| if not is_logging_enabled(): | |
| return | |
| logger = logging.getLogger(__name__) | |
| metrics = { | |
| "operation": operation, | |
| "duration_seconds": duration, | |
| "metadata": metadata or {} | |
| } | |
| logger.info(f"Performance metrics: {metrics}") | |
| def is_session_enabled() -> bool: | |
| """ | |
| Returns True if session management is enabled, False otherwise. | |
| Checks environment variable ENABLE_SESSION first, then config. | |
| """ | |
| env = os.getenv("ENABLE_SESSION") | |
| if env is not None: | |
| return env.lower() in ("1", "true", "yes", "on") | |
| config = load_config() | |
| return config.get("features", {}).get("enable_session", True) | |
| def is_logging_enabled() -> bool: | |
| """ | |
| Returns True if logging is enabled, False otherwise. | |
| Checks environment variable ENABLE_LOGGING first, then config. | |
| """ | |
| env = os.getenv("ENABLE_LOGGING") | |
| if env is not None: | |
| return env.lower() in ("1", "true", "yes", "on") | |
| config = load_config() | |
| return config.get("features", {}).get("enable_logging", True) | |