"Add_structured_routing_logs_to_text_generation_modular"
This commit is contained in:
@@ -4,6 +4,9 @@ Logger utilities to prevent conflicts between different logging configurations.
|
||||
|
||||
from loguru import logger
|
||||
import sys
|
||||
import hashlib
|
||||
import json
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
def safe_logger_config(format_string: str, level: str = "INFO"):
|
||||
@@ -51,3 +54,58 @@ def get_service_logger(service_name: str, format_string: str = None):
|
||||
safe_logger_config(format_string)
|
||||
|
||||
return logger.bind(service=service_name)
|
||||
|
||||
|
||||
def _mask_user_id(user_id: Optional[str]) -> str:
|
||||
"""Mask user ID for privacy in logs."""
|
||||
if not user_id:
|
||||
return "anonymous"
|
||||
return hashlib.sha256(str(user_id).encode("utf-8")).hexdigest()[:12]
|
||||
|
||||
|
||||
def emit_routing_event(
|
||||
logger_instance,
|
||||
flow_type: str,
|
||||
*,
|
||||
route_intent: str = "primary",
|
||||
provider_selected: str,
|
||||
model_selected: str,
|
||||
preferred_provider: Optional[str] = None,
|
||||
fallback_count: int = 0,
|
||||
fallback_models_tried: Optional[list] = None,
|
||||
tenant_user_id: Optional[str] = None,
|
||||
extra: Optional[Dict[str, Any]] = None,
|
||||
level: str = "info"
|
||||
) -> None:
|
||||
"""
|
||||
Emit structured routing event for LLM provider selection.
|
||||
|
||||
Args:
|
||||
logger_instance: Logger instance to use
|
||||
flow_type: Type of flow (e.g., "sif_agent", "premium_tool")
|
||||
route_intent: Route intent ("primary" or "fallback")
|
||||
provider_selected: Selected provider name
|
||||
model_selected: Selected model name
|
||||
preferred_provider: Preferred provider (if any)
|
||||
fallback_count: Number of fallback attempts made
|
||||
fallback_models_tried: List of models tried as fallbacks
|
||||
tenant_user_id: Tenant user ID (will be hashed)
|
||||
extra: Additional fields to include
|
||||
level: Log level to use
|
||||
"""
|
||||
payload: Dict[str, Any] = {
|
||||
"flow_type": flow_type,
|
||||
"route_intent": route_intent,
|
||||
"provider_selected": provider_selected,
|
||||
"model_selected": model_selected,
|
||||
"preferred_provider": preferred_provider,
|
||||
"fallback_count": fallback_count,
|
||||
"fallback_models_tried": fallback_models_tried or [],
|
||||
"tenant": _mask_user_id(tenant_user_id),
|
||||
}
|
||||
|
||||
if extra:
|
||||
payload.update(extra)
|
||||
|
||||
log_method = getattr(logger_instance, level.lower(), logger_instance.info)
|
||||
log_method("[llm_routing] {}", json.dumps(payload, sort_keys=True, default=str))
|
||||
|
||||
Reference in New Issue
Block a user