Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-governance/src/lexigram/ai/governance/__init__.py: 85%

20 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""AI Governance sub-package.""" 

2 

3from __future__ import annotations 

4 

5from importlib.metadata import PackageNotFoundError, version 

6from typing import TYPE_CHECKING, Any 

7 

8try: 

9 __version__ = version("lexigram-ai-governance") 

10except PackageNotFoundError: 

11 __version__ = "0.0.0" 

12 

13if TYPE_CHECKING: 

14 from lexigram.ai.governance.audit import ( 

15 AIAuditEvent, 

16 AIAuditStore, 

17 AuditEventType, 

18 AuditQuery, 

19 AuditSummary, 

20 InMemoryAuditStore, 

21 ) 

22 from lexigram.ai.governance.config import GovernanceConfig 

23 from lexigram.ai.governance.content_gate import ( 

24 AlwaysAllowGate, 

25 CompositeGate, 

26 ContentPolicyGateProtocol, 

27 ContentPolicyService, 

28 PolicyDecision, 

29 PolicyObserverProtocol, 

30 PolicyOutcome, 

31 PolicyRequest, 

32 ) 

33 from lexigram.ai.governance.di.provider import GovernanceProvider 

34 from lexigram.ai.governance.exceptions import ( 

35 BudgetExceededError, 

36 GovernanceError, 

37 ModelAccessDeniedError, 

38 RateLimitExceededError, 

39 ResourceExhaustedError, 

40 ) 

41 from lexigram.ai.governance.hooks import ( 

42 GovernanceAuditRecordedHook, 

43 GovernancePersistenceWrittenHook, 

44 GovernancePolicyEvaluatedHook, 

45 ) 

46 from lexigram.ai.governance.module import GovernanceModule 

47 from lexigram.ai.governance.persistence import ( 

48 GovernancePersistence, 

49 InMemoryGovernancePersistence, 

50 RedisGovernancePersistence, 

51 ) 

52 from lexigram.ai.governance.resource.reconciliation import ( 

53 GaugeReconciliationCallback, 

54 GaugeReconciliationWorker, 

55 ) 

56 from lexigram.ai.governance.resource.registry import ( 

57 ResourceUnitRegistry, 

58 ) 

59 from lexigram.ai.governance.resource.tracker import ( 

60 ResourceUnitTracker, 

61 ) 

62 from lexigram.ai.governance.services.manager import AIGovernanceManager 

63 

64_LAZY_IMPORTS: dict[str, tuple[str, str]] = { 

65 # --- Content Gate --- 

66 "AlwaysAllowGate": ( 

67 "lexigram.ai.governance.content_gate", 

68 "AlwaysAllowGate", 

69 ), 

70 "CompositeGate": ( 

71 "lexigram.ai.governance.content_gate", 

72 "CompositeGate", 

73 ), 

74 "ContentPolicyGateProtocol": ( 

75 "lexigram.ai.governance.content_gate", 

76 "ContentPolicyGateProtocol", 

77 ), 

78 "ContentPolicyService": ( 

79 "lexigram.ai.governance.content_gate", 

80 "ContentPolicyService", 

81 ), 

82 "PolicyDecision": ( 

83 "lexigram.ai.governance.content_gate", 

84 "PolicyDecision", 

85 ), 

86 "PolicyObserverProtocol": ( 

87 "lexigram.ai.governance.content_gate", 

88 "PolicyObserverProtocol", 

89 ), 

90 "PolicyOutcome": ( 

91 "lexigram.ai.governance.content_gate", 

92 "PolicyOutcome", 

93 ), 

94 "PolicyRequest": ( 

95 "lexigram.ai.governance.content_gate", 

96 "PolicyRequest", 

97 ), 

98 # --- Audit --- 

99 "AIAuditEvent": ("lexigram.ai.governance.audit", "AIAuditEvent"), 

100 "AIAuditStore": ("lexigram.ai.governance.audit", "AIAuditStore"), 

101 "AuditEventType": ("lexigram.ai.governance.audit", "AuditEventType"), 

102 "AuditQuery": ("lexigram.ai.governance.audit", "AuditQuery"), 

103 "AuditSummary": ("lexigram.ai.governance.audit", "AuditSummary"), 

104 "InMemoryAuditStore": ("lexigram.ai.governance.audit", "InMemoryAuditStore"), 

105 # --- Config --- 

106 "GovernanceConfig": ("lexigram.ai.governance.config", "GovernanceConfig"), 

107 # --- DI --- 

108 "GovernanceProvider": ("lexigram.ai.governance.di.provider", "GovernanceProvider"), 

109 "GovernanceModule": ("lexigram.ai.governance.module", "GovernanceModule"), 

110 # --- Exceptions --- 

111 "GovernanceError": ("lexigram.ai.governance.exceptions", "GovernanceError"), 

112 "BudgetExceededError": ("lexigram.ai.governance.exceptions", "BudgetExceededError"), 

113 "ModelAccessDeniedError": ( 

114 "lexigram.ai.governance.exceptions", 

115 "ModelAccessDeniedError", 

116 ), 

117 "RateLimitExceededError": ( 

118 "lexigram.ai.governance.exceptions", 

119 "RateLimitExceededError", 

120 ), 

121 # --- Hooks --- 

122 "GovernanceAuditRecordedHook": ( 

123 "lexigram.ai.governance.hooks", 

124 "GovernanceAuditRecordedHook", 

125 ), 

126 "GovernancePersistenceWrittenHook": ( 

127 "lexigram.ai.governance.hooks", 

128 "GovernancePersistenceWrittenHook", 

129 ), 

130 "GovernancePolicyEvaluatedHook": ( 

131 "lexigram.ai.governance.hooks", 

132 "GovernancePolicyEvaluatedHook", 

133 ), 

134 # --- Persistence --- 

135 "GovernancePersistence": ( 

136 "lexigram.ai.governance.persistence", 

137 "GovernancePersistence", 

138 ), 

139 "InMemoryGovernancePersistence": ( 

140 "lexigram.ai.governance.persistence", 

141 "InMemoryGovernancePersistence", 

142 ), 

143 "RedisGovernancePersistence": ( 

144 "lexigram.ai.governance.persistence", 

145 "RedisGovernancePersistence", 

146 ), 

147 # --- Resource --- 

148 "ResourceExhaustedError": ( 

149 "lexigram.ai.governance.exceptions", 

150 "ResourceExhaustedError", 

151 ), 

152 "ResourceUnitRegistry": ( 

153 "lexigram.ai.governance.resource.registry", 

154 "ResourceUnitRegistry", 

155 ), 

156 "ResourceUnitTracker": ( 

157 "lexigram.ai.governance.resource.tracker", 

158 "ResourceUnitTracker", 

159 ), 

160 "GaugeReconciliationCallback": ( 

161 "lexigram.ai.governance.resource.reconciliation", 

162 "GaugeReconciliationCallback", 

163 ), 

164 "GaugeReconciliationWorker": ( 

165 "lexigram.ai.governance.resource.reconciliation", 

166 "GaugeReconciliationWorker", 

167 ), 

168 # --- Services --- 

169 "AIGovernanceManager": ( 

170 "lexigram.ai.governance.services.manager", 

171 "AIGovernanceManager", 

172 ), 

173 # --- Protocols --- 

174 "AIAuditStoreProtocol": ( 

175 "lexigram.ai.governance.protocols", 

176 "AIAuditStoreProtocol", 

177 ), 

178 "AIGovernanceProtocol": ( 

179 "lexigram.ai.governance.protocols", 

180 "AIGovernanceProtocol", 

181 ), 

182 "CostTrackingProtocol": ( 

183 "lexigram.ai.governance.protocols", 

184 "CostTrackingProtocol", 

185 ), 

186 # --- Events --- 

187 "PolicyEvaluatedEvent": ("lexigram.ai.governance.events", "PolicyEvaluatedEvent"), 

188} 

189 

190 

191def __getattr__(name: str) -> Any: 

192 """Lazy-load symbols on first access.""" 

193 if name in _LAZY_IMPORTS: 

194 import importlib 

195 

196 module_path, attr_name = _LAZY_IMPORTS[name] 

197 module = importlib.import_module(module_path) 

198 value = getattr(module, attr_name) 

199 globals()[name] = value 

200 return value 

201 raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 

202 

203 

204def __dir__() -> list[str]: 

205 """Enumerate available attributes for IDE support.""" 

206 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys())) 

207 

208 

209__all__ = [ 

210 "AIAuditEvent", 

211 "AIAuditStore", 

212 "AIAuditStoreProtocol", 

213 "AIGovernanceManager", 

214 "AIGovernanceProtocol", 

215 "AlwaysAllowGate", 

216 "AuditEventType", 

217 "AuditQuery", 

218 "AuditSummary", 

219 "BudgetExceededError", 

220 "CompositeGate", 

221 "ContentPolicyGateProtocol", 

222 "ContentPolicyService", 

223 "CostTrackingProtocol", 

224 "GaugeReconciliationCallback", 

225 "GaugeReconciliationWorker", 

226 "GovernanceAuditRecordedHook", 

227 "GovernanceConfig", 

228 "GovernanceError", 

229 "GovernanceModule", 

230 "GovernancePersistence", 

231 "GovernancePersistenceWrittenHook", 

232 "GovernancePolicyEvaluatedHook", 

233 "GovernanceProvider", 

234 "InMemoryAuditStore", 

235 "InMemoryGovernancePersistence", 

236 "ModelAccessDeniedError", 

237 "PolicyDecision", 

238 "PolicyEvaluatedEvent", 

239 "PolicyObserverProtocol", 

240 "PolicyOutcome", 

241 "PolicyRequest", 

242 "RateLimitExceededError", 

243 "RedisGovernancePersistence", 

244 "ResourceExhaustedError", 

245 "ResourceUnitRegistry", 

246 "ResourceUnitTracker", 

247]