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

17 statements  

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

1"""RAG (Retrieval-Augmented Generation) module. 

2 

3Root ``__init__.py`` exposes only the core pipeline API. 

4All specialised symbols remain importable from their subpackage paths, e.g.:: 

5 

6 from lexigram.ai.rag.evaluation import HallucinationDetector 

7 from lexigram.ai.rag.chunking import SemanticChunker 

8 from lexigram.ai.rag.hyde import SingleHyDEGenerator 

9""" 

10 

11from __future__ import annotations 

12 

13import importlib.metadata 

14from typing import TYPE_CHECKING, Any 

15 

16__path__ = __import__("pkgutil").extend_path(__path__, __name__) 

17 

18from lexigram.ai.rag.constants import __version__ as __version__ 

19 

20_LAZY_IMPORTS = { 

21 # DI Provider 

22 "RAGModule": "lexigram.ai.rag.module", 

23 "RAGProvider": "lexigram.ai.rag.di.provider", 

24 # Events 

25 "RetrievalCompletedEvent": "lexigram.ai.rag.events", 

26 "SynthesisCompletedEvent": "lexigram.ai.rag.events", 

27 # Hooks 

28 "RAGAnswerSynthesizedHook": "lexigram.ai.rag.hooks", 

29 "RAGDocumentsRetrievedHook": "lexigram.ai.rag.hooks", 

30 "RAGPipelineStartedHook": "lexigram.ai.rag.hooks", 

31 # Core types 

32 "Chunk": "lexigram.ai.rag.types", 

33 "Context": "lexigram.ai.rag.types", 

34 "RAGError": "lexigram.ai.rag.types", 

35 # Pipeline 

36 "RAGPipeline": "lexigram.ai.rag.pipeline", 

37 "PipelineBuilder": "lexigram.ai.rag.pipeline.builder", 

38 # Config 

39 "RAGConfig": "lexigram.ai.rag.config", 

40 "RAGTenancyConfig": "lexigram.ai.rag.config", 

41 "PipelineConfig": "lexigram.ai.rag.config", 

42 "IngestionConfig": "lexigram.ai.rag.config", 

43 "RetrievalConfig": "lexigram.ai.rag.config", 

44 "SynthesisConfig": "lexigram.ai.rag.config", 

45 # Chunking — factory + primary types only 

46 "ChunkingConfig": "lexigram.ai.rag.chunking", 

47 "create_chunker": "lexigram.ai.rag.chunking", 

48 # Cache 

49 "RAGCache": "lexigram.ai.rag.cache", 

50 # Tenancy 

51 "TenantScopedRAGPipeline": "lexigram.ai.rag.tenancy", 

52 # Strategy registries 

53 "RerankingStrategyRegistry": "lexigram.ai.rag.reranking.strategy_registry", 

54 "RetrievalStrategyRegistry": "lexigram.ai.rag.retrieval.strategy_registry", 

55 # Types 

56 "RerankResult": "lexigram.ai.rag.reranking.types", 

57 # Contracts re-exports 

58 "ChunkerProtocol": "lexigram.contracts.ai.vector", 

59} 

60 

61if TYPE_CHECKING: 

62 from lexigram.ai.rag.cache import RAGCache 

63 from lexigram.ai.rag.chunking import ( 

64 ChunkingConfig, 

65 create_chunker, 

66 ) 

67 from lexigram.ai.rag.config import ( 

68 IngestionConfig, 

69 PipelineConfig, 

70 RAGConfig, 

71 RAGTenancyConfig, 

72 RetrievalConfig, 

73 SynthesisConfig, 

74 ) 

75 from lexigram.ai.rag.di.provider import RAGProvider 

76 from lexigram.ai.rag.events import ( 

77 RetrievalCompletedEvent, 

78 SynthesisCompletedEvent, 

79 ) 

80 from lexigram.ai.rag.hooks import ( 

81 RAGAnswerSynthesizedHook, 

82 RAGDocumentsRetrievedHook, 

83 RAGPipelineStartedHook, 

84 ) 

85 from lexigram.ai.rag.pipeline import RAGPipeline 

86 from lexigram.ai.rag.pipeline.builder import PipelineBuilder 

87 from lexigram.ai.rag.reranking.strategy_registry import ( 

88 RerankingStrategyRegistry, 

89 ) 

90 from lexigram.ai.rag.reranking.types import RerankResult 

91 from lexigram.ai.rag.retrieval.strategy_registry import ( 

92 RetrievalStrategyRegistry, 

93 ) 

94 from lexigram.ai.rag.tenancy import TenantScopedRAGPipeline 

95 from lexigram.ai.rag.types import ( 

96 Chunk, 

97 Context, 

98 RAGError, 

99 ) 

100 from lexigram.contracts.ai.vector import ChunkerProtocol 

101 

102 

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

104 if name in _LAZY_IMPORTS: 

105 import importlib 

106 

107 module = importlib.import_module(_LAZY_IMPORTS[name]) 

108 value = getattr(module, name) 

109 globals()[name] = value 

110 return value 

111 raise AttributeError(f"module {__name__} has no attribute {name}") 

112 

113 

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

115 return __all__ 

116 

117 

118__all__ = [ 

119 "Chunk", 

120 "ChunkerProtocol", 

121 "ChunkingConfig", 

122 "Context", 

123 "IngestionConfig", 

124 "PipelineBuilder", 

125 "PipelineConfig", 

126 "RAGAnswerSynthesizedHook", 

127 "RAGCache", 

128 "RAGConfig", 

129 "RAGDocumentsRetrievedHook", 

130 "RAGError", 

131 "RAGModule", 

132 "RAGPipeline", 

133 "RAGPipelineStartedHook", 

134 "RAGProvider", 

135 "RAGTenancyConfig", 

136 "RerankResult", 

137 "RerankingStrategyRegistry", 

138 "RetrievalCompletedEvent", 

139 "RetrievalConfig", 

140 "RetrievalStrategyRegistry", 

141 "SynthesisCompletedEvent", 

142 "SynthesisConfig", 

143 "TenantScopedRAGPipeline", 

144 "create_chunker", 

145]