23 lines
652 B
Python
23 lines
652 B
Python
"""Structured observability helpers for LLM routing decisions."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import hashlib
|
|
import json
|
|
from typing import Any, Dict, Optional
|
|
|
|
|
|
def _mask_user_id(user_id: Optional[str]) -> str:
|
|
if not user_id:
|
|
return "anonymous"
|
|
return hashlib.sha256(str(user_id).encode("utf-8")).hexdigest()[:12]
|
|
|
|
|
|
def emit_routing_event(logger, event: str, *, user_id: Optional[str] = None, **fields: Any) -> None:
|
|
payload: Dict[str, Any] = {
|
|
"event": event,
|
|
"tenant": _mask_user_id(user_id),
|
|
**fields,
|
|
}
|
|
logger.info("[llm_routing] {}", json.dumps(payload, sort_keys=True, default=str))
|