Spaces:
Running
Running
File size: 1,070 Bytes
0772b5a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import time
import uuid
import logging
from typing import Optional, Dict, Any
from pydantic import BaseModel, Field
logger = logging.getLogger(__name__)
class LLMTelemetryRecord(BaseModel):
request_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
agent: str
tier: int = 1
model: str
provider: str
key_id: str
latency_ms: float = 0.0
input_tokens: int = 0
output_tokens: int = 0
status: str = "success" # success, retry, failed
retry_count: int = 0
error: Optional[str] = None
class LLMTelemetry:
"""Safe LLM observability and logging."""
@staticmethod
def log_record(record: LLMTelemetryRecord) -> None:
logger.info(
f"[LLMTelemetry] req={record.request_id[:8]} agent={record.agent} tier={record.tier} "
f"model={record.model} key={record.key_id} lat={record.latency_ms:.0f}ms "
f"in_tok={record.input_tokens} out_tok={record.output_tokens} status={record.status} "
f"retries={record.retry_count}"
)
telemetry = LLMTelemetry()
|