Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-rag/src/lexigram/ai/rag/context_compression/types.py: 100%

30 statements  

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

1"""Types and data structures for context compression.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass, field 

6from enum import StrEnum 

7 

8 

9class CompressionStrategy(StrEnum): 

10 """Available compression strategies.""" 

11 

12 EXTRACTIVE = "extractive" 

13 ABSTRACTIVE = "abstractive" 

14 RERANKING = "reranking" 

15 TOKEN_LIMIT = "token_limit" # noqa: S105 # strategy name, not a credential 

16 SEMANTIC_DEDUP = "semantic_dedup" 

17 HYBRID = "hybrid" 

18 LLMLINGUA2 = "llmlingua2" 

19 

20 

21@dataclass 

22class CompressionResult: 

23 """Result of context compression. 

24 

25 Attributes: 

26 original_text: Original uncompressed text. 

27 compressed_text: Compressed text. 

28 original_tokens: Estimated original token count. 

29 compressed_tokens: Estimated compressed token count. 

30 compression_ratio: Ratio of compressed to original size. 

31 strategy: Strategy used for compression. 

32 metadata: Additional compression metadata. 

33 """ 

34 

35 original_text: str 

36 compressed_text: str 

37 original_tokens: int 

38 compressed_tokens: int 

39 compression_ratio: float 

40 strategy: CompressionStrategy 

41 metadata: dict = field(default_factory=dict) 

42 

43 def __repr__(self) -> str: 

44 """String representation.""" 

45 return ( 

46 f"CompressionResult(ratio={self.compression_ratio:.2f}, " 

47 f"tokens={self.original_tokens}{self.compressed_tokens})" 

48 ) 

49 

50 @property 

51 def token_savings(self) -> int: 

52 """Calculate token savings.""" 

53 return self.original_tokens - self.compressed_tokens 

54 

55 @property 

56 def savings_percentage(self) -> float: 

57 """Calculate savings as percentage.""" 

58 if self.original_tokens == 0: 

59 return 0.0 

60 return (self.token_savings / self.original_tokens) * 100