Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-feedback/src/lexigram/ai/feedback/__init__.py: 65%
20 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 07:19 +0800
1"""Feedback loop module for continuous learning."""
3from __future__ import annotations
5from importlib.metadata import PackageNotFoundError, version
6from typing import TYPE_CHECKING, Any
8try:
9 __version__ = version("lexigram-ai-safety")
10except PackageNotFoundError:
11 __version__ = "0.0.0"
13if TYPE_CHECKING:
14 from lexigram.ai.feedback.config import FeedbackConfig
15 from lexigram.ai.feedback.di.provider import FeedbackProvider
16 from lexigram.ai.feedback.exceptions import (
17 FeedbackAuthorizationError,
18 FeedbackError,
19 FeedbackProcessingError,
20 FeedbackTooLargeError,
21 FeedbackValidationError,
22 )
23 from lexigram.ai.feedback.hooks import (
24 FeedbackProcessedHook,
25 FeedbackStoredHook,
26 FeedbackSubmittedHook,
27 )
28 from lexigram.ai.feedback.middleware import (
29 FeedbackContext,
30 FeedbackMiddleware,
31 )
32 from lexigram.ai.feedback.module import FeedbackModule
33 from lexigram.ai.feedback.services.collector import FeedbackCollector
34 from lexigram.ai.feedback.services.feedback_service import FeedbackService
35 from lexigram.ai.feedback.storage import (
36 CachedFeedbackStore,
37 DatabaseFeedbackStore,
38 FeedbackStoreProtocol,
39 FeedbackSummary,
40 )
41 from lexigram.ai.feedback.types import FeedbackItem, FeedbackType
43_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
44 # --- Config ---
45 "FeedbackConfig": ("lexigram.ai.feedback.config", "FeedbackConfig"),
46 # --- DI ---
47 "FeedbackProvider": ("lexigram.ai.feedback.di.provider", "FeedbackProvider"),
48 "FeedbackModule": ("lexigram.ai.feedback.module", "FeedbackModule"),
49 # --- Exceptions ---
50 "FeedbackAuthorizationError": (
51 "lexigram.ai.feedback.exceptions",
52 "FeedbackAuthorizationError",
53 ),
54 "FeedbackError": ("lexigram.ai.feedback.exceptions", "FeedbackError"),
55 "FeedbackProcessingError": (
56 "lexigram.ai.feedback.exceptions",
57 "FeedbackProcessingError",
58 ),
59 "FeedbackTooLargeError": (
60 "lexigram.ai.feedback.exceptions",
61 "FeedbackTooLargeError",
62 ),
63 "FeedbackValidationError": (
64 "lexigram.ai.feedback.exceptions",
65 "FeedbackValidationError",
66 ),
67 # --- Hooks ---
68 "FeedbackProcessedHook": (
69 "lexigram.ai.feedback.hooks",
70 "FeedbackProcessedHook",
71 ),
72 "FeedbackStoredHook": ("lexigram.ai.feedback.hooks", "FeedbackStoredHook"),
73 "FeedbackSubmittedHook": ("lexigram.ai.feedback.hooks", "FeedbackSubmittedHook"),
74 # --- Middleware ---
75 "FeedbackContext": ("lexigram.ai.feedback.middleware", "FeedbackContext"),
76 "FeedbackMiddleware": ("lexigram.ai.feedback.middleware", "FeedbackMiddleware"),
77 # --- Services ---
78 "FeedbackCollector": (
79 "lexigram.ai.feedback.services.collector",
80 "FeedbackCollector",
81 ),
82 "FeedbackService": (
83 "lexigram.ai.feedback.services.feedback_service",
84 "FeedbackService",
85 ),
86 # --- Storage ---
87 "CachedFeedbackStore": ("lexigram.ai.feedback.storage", "CachedFeedbackStore"),
88 "DatabaseFeedbackStore": ("lexigram.ai.feedback.storage", "DatabaseFeedbackStore"),
89 "FeedbackSummary": ("lexigram.ai.feedback.storage", "FeedbackSummary"),
90 # --- Types ---
91 "FeedbackItem": ("lexigram.ai.feedback.types", "FeedbackItem"),
92 "FeedbackType": ("lexigram.ai.feedback.types", "FeedbackType"),
93 # --- Protocols ---
94 "FeedbackProtocol": ("lexigram.ai.feedback.protocols", "FeedbackProtocol"),
95 "FeedbackStoreProtocol": (
96 "lexigram.ai.feedback.protocols",
97 "FeedbackStoreProtocol",
98 ),
99 # --- Events ---
100 "FeedbackSubmittedEvent": ("lexigram.ai.feedback.events", "FeedbackSubmittedEvent"),
101}
104def __getattr__(name: str) -> Any:
105 """Lazy-load symbols on first access."""
106 if name in _LAZY_IMPORTS:
107 import importlib
109 module_path, attr_name = _LAZY_IMPORTS[name]
110 module = importlib.import_module(module_path)
111 value = getattr(module, attr_name)
112 globals()[name] = value
113 return value
114 raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
117def __dir__() -> list[str]:
118 """Enumerate available attributes for IDE support."""
119 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys()))
122__all__ = [
123 "CachedFeedbackStore",
124 "DatabaseFeedbackStore",
125 "FeedbackAuthorizationError",
126 "FeedbackCollector",
127 "FeedbackConfig",
128 "FeedbackContext",
129 "FeedbackError",
130 "FeedbackItem",
131 "FeedbackMiddleware",
132 "FeedbackModule",
133 "FeedbackProcessedHook",
134 "FeedbackProcessingError",
135 "FeedbackProtocol",
136 "FeedbackProvider",
137 "FeedbackService",
138 "FeedbackStoreProtocol",
139 "FeedbackStoredHook",
140 "FeedbackSubmittedEvent",
141 "FeedbackSubmittedHook",
142 "FeedbackSummary",
143 "FeedbackTooLargeError",
144 "FeedbackType",
145 "FeedbackValidationError",
146]