/
yakobsonsa
/
bi_agent
Обзор
Документация
Войти
/
yakobsonsa
/
bi_agent
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/services/explainability.py
60 строк
2 KB
Yakobsonsa
vers 2.0
02 фев 2026, 00:06
02 фев 2026, 00:06
72f33ab
Код
Авторство
О чём код?
"""Explainability tracer for SQL and provenance.""" from __future__ import annotations import time from dataclasses import dataclass from typing import List, Optional @dataclass class TraceEvent: """Single trace event with optional timing.""" name: str detail: str duration_ms: Optional[int] = None class ExplainabilityTracer: """Collects trace events for explainability.""" def __init__(self) -> None: self._events: List[TraceEvent] = [] def add_event(self, name: str, detail: str, duration_ms: Optional[int] = None) -> None: """Add a trace event.""" self._events.append(TraceEvent(name=name, detail=detail, duration_ms=duration_ms)) def timer(self) -> "_Timer": """Context timer for measuring durations.""" return _Timer() def to_text(self) -> str: """Render trace as multi-line string.""" lines = ["SQL Trace:"] for event in self._events: duration = f" ({event.duration_ms} ms)" if event.duration_ms is not None else "" lines.append(f"- {event.name}: {event.detail}{duration}") return "\n".join(lines) class _Timer: """Simple timer for trace measurements (context manager).""" def __init__(self) -> None: self._start = time.perf_counter() self.duration_ms: int = 0 def __enter__(self) -> "_Timer": """Enter context manager.""" self._start = time.perf_counter() return self def __exit__(self, exc_type, exc_val, exc_tb) -> None: """Exit context manager and calculate duration.""" self.duration_ms = int((time.perf_counter() - self._start) * 1000) def stop_ms(self) -> int: """Stop timer and return elapsed milliseconds.""" return int((time.perf_counter() - self._start) * 1000)