1"""Intelligence monitoring and observability.
2
3This module provides tools for monitoring the health, performance,
4and behavior of the intelligence layer.
5"""
6
7from __future__ import annotations
8
9from importlib.metadata import PackageNotFoundError, version
10from typing import TYPE_CHECKING, Any
11
12try:
13 __version__ = version("lexigram-ai-observability")
14except PackageNotFoundError:
15 __version__ = "0.0.0"
16
17if TYPE_CHECKING:
18 from lexigram.ai.observability.callbacks.manager import CallbackManagerImpl
19 from lexigram.ai.observability.config import ObservabilityConfig
20 from lexigram.ai.observability.decorators import (
21 trace_llm,
22 trace_rag,
23 trace_vector,
24 track_embedding_operation,
25 track_llm_call,
26 track_vector_operation,
27 )
28 from lexigram.ai.observability.di.provider import ObservabilityProvider
29 from lexigram.ai.observability.exceptions import (
30 HealthCheckError,
31 MetricsError,
32 ObservabilityError,
33 TracingError,
34 )
35 from lexigram.ai.observability.health import AIHealthMonitor
36 from lexigram.ai.observability.hooks import (
37 AIObservabilityStartedHook,
38 HealthCheckRunHook,
39 LLMCallTracedHook,
40 )
41 from lexigram.ai.observability.metrics import (
42 AIMetrics,
43 )
44 from lexigram.ai.observability.module import ObservabilityModule
45 from lexigram.ai.observability.protocols import (
46 AIHealthMonitorProtocol,
47 AIMetricsProtocol,
48 AITracerProtocol,
49 ObservabilityProtocol,
50 )
51 from lexigram.ai.observability.tracing import (
52 AITracer,
53 )
54 from lexigram.ai.observability.wrappers import (
55 ObservableLLMClient,
56 ObservableVectorStore,
57 )
58 from lexigram.contracts import HealthCheckResult, HealthStatus
59
60_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
61 # --- Callback ---
62 "CallbackManagerImpl": (
63 "lexigram.ai.observability.callback_manager",
64 "CallbackManagerImpl",
65 ),
66 # --- Hooks ---
67 "AIObservabilityStartedHook": (
68 "lexigram.ai.observability.hooks",
69 "AIObservabilityStartedHook",
70 ),
71 "HealthCheckRunHook": (
72 "lexigram.ai.observability.hooks",
73 "HealthCheckRunHook",
74 ),
75 "LLMCallTracedHook": (
76 "lexigram.ai.observability.hooks",
77 "LLMCallTracedHook",
78 ),
79 # --- Config ---
80 "ObservabilityConfig": ("lexigram.ai.observability.config", "ObservabilityConfig"),
81 # --- DI ---
82 "ObservabilityProvider": (
83 "lexigram.ai.observability.di.provider",
84 "ObservabilityProvider",
85 ),
86 "ObservabilityModule": ("lexigram.ai.observability.module", "ObservabilityModule"),
87 # --- Exceptions ---
88 "ObservabilityError": (
89 "lexigram.ai.observability.exceptions",
90 "ObservabilityError",
91 ),
92 "HealthCheckError": ("lexigram.ai.observability.exceptions", "HealthCheckError"),
93 "MetricsError": ("lexigram.ai.observability.exceptions", "MetricsError"),
94 "TracingError": ("lexigram.ai.observability.exceptions", "TracingError"),
95 # --- Health ---
96 "AIHealthMonitor": ("lexigram.ai.observability.health", "AIHealthMonitor"),
97 # --- Metrics ---
98 "AIMetrics": ("lexigram.ai.observability.metrics", "AIMetrics"),
99 "track_llm_call": ("lexigram.ai.observability.decorators", "track_llm_call"),
100 "track_vector_operation": (
101 "lexigram.ai.observability.decorators",
102 "track_vector_operation",
103 ),
104 "track_embedding_operation": (
105 "lexigram.ai.observability.decorators",
106 "track_embedding_operation",
107 ),
108 # --- Protocols ---
109 "ObservabilityProtocol": (
110 "lexigram.ai.observability.protocols",
111 "ObservabilityProtocol",
112 ),
113 "AITracerProtocol": ("lexigram.ai.observability.protocols", "AITracerProtocol"),
114 "AIMetricsProtocol": ("lexigram.ai.observability.protocols", "AIMetricsProtocol"),
115 "AIHealthMonitorProtocol": (
116 "lexigram.ai.observability.protocols",
117 "AIHealthMonitorProtocol",
118 ),
119 # --- Tracing ---
120 "AITracer": ("lexigram.ai.observability.tracing", "AITracer"),
121 "trace_llm": ("lexigram.ai.observability.decorators", "trace_llm"),
122 "trace_rag": ("lexigram.ai.observability.decorators", "trace_rag"),
123 "trace_vector": ("lexigram.ai.observability.decorators", "trace_vector"),
124 # --- Wrappers ---
125 "ObservableLLMClient": (
126 "lexigram.ai.observability.wrappers",
127 "ObservableLLMClient",
128 ),
129 "ObservableVectorStore": (
130 "lexigram.ai.observability.wrappers",
131 "ObservableVectorStore",
132 ),
133 # --- Contracts Re-exports ---
134 "HealthCheckResult": ("lexigram.contracts", "HealthCheckResult"),
135 "HealthStatus": ("lexigram.contracts", "HealthStatus"),
136}
137
138
139def __getattr__(name: str) -> Any:
140 """Lazy-load symbols on first access."""
141 if name in _LAZY_IMPORTS:
142 import importlib
143
144 module_path, attr_name = _LAZY_IMPORTS[name]
145 module = importlib.import_module(module_path)
146 value = getattr(module, attr_name)
147 globals()[name] = value
148 return value
149 raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
150
151
152def __dir__() -> list[str]:
153 """Enumerate available attributes for IDE support."""
154 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys()))
155
156
157__all__ = [
158 "AIHealthMonitor",
159 "AIHealthMonitorProtocol",
160 "AIMetrics",
161 "AIMetricsProtocol",
162 "AIObservabilityStartedHook",
163 "AITracer",
164 "AITracerProtocol",
165 "CallbackManagerImpl",
166 "HealthCheckError",
167 "HealthCheckResult",
168 "HealthCheckRunHook",
169 "HealthStatus",
170 "LLMCallTracedHook",
171 "MetricsError",
172 "ObservabilityConfig",
173 "ObservabilityError",
174 "ObservabilityModule",
175 "ObservabilityProtocol",
176 "ObservabilityProvider",
177 "ObservableLLMClient",
178 "ObservableVectorStore",
179 "TracingError",
180 "trace_llm",
181 "trace_rag",
182 "trace_vector",
183 "track_embedding_operation",
184 "track_llm_call",
185 "track_vector_operation",
186]