genAI-demo / src /utils.py
Nazim Tairov
initial commit
b821944
"""
Utility functions for the Data Insights App.
Includes logging setup and helper functions.
"""
import logging
import sys
from datetime import datetime
from typing import Any, Dict, List
# Configure logging to console
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)
def setup_logger(name: str) -> logging.Logger:
"""
Creates and returns a logger with the specified name.
Inputs: name (string)
Outputs: Logger instance
"""
return logging.getLogger(name)
def log_function_call(function_name: str, parameters: Dict[str, Any]) -> None:
"""
Logs a function call with its parameters.
Inputs: function_name (string), parameters (dict)
Outputs: None
"""
logger.info(f"Function called: {function_name}")
logger.info(f"Parameters: {parameters}")
def log_query_result(result_summary: str) -> None:
"""
Logs a summary of query results (not full data).
Inputs: result_summary (string)
Outputs: None
"""
logger.info(f"Query result: {result_summary}")
def log_safety_block(operation: str, reason: str) -> None:
"""
Logs when a dangerous operation is blocked.
Inputs: operation (string), reason (string)
Outputs: None
"""
logger.warning(f"BLOCKED OPERATION: {operation}")
logger.warning(f"Reason: {reason}")
def format_price(price: float) -> str:
"""
Formats price as USD currency.
Inputs: price (float)
Outputs: formatted string
"""
return f"${price:,.2f}"
def format_timestamp() -> str:
"""
Returns current timestamp as formatted string.
Inputs: None
Outputs: timestamp string
"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def truncate_results(data: List[Dict], max_items: int = 20) -> List[Dict]:
"""
Truncates results to prevent sending too much data to LLM.
Inputs: data (list of dicts), max_items (int)
Outputs: truncated list
"""
if len(data) > max_items:
logger.info(f"Truncating results from {len(data)} to {max_items} items")
return data[:max_items]
return data