Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-rag/src/lexigram/ai/rag/synthesis/formatters/text.py: 28%

18 statements  

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

1"""Plain text formatter. 

2 

3This module implements a simple plain text formatter for synthesis results. 

4""" 

5 

6from __future__ import annotations 

7 

8from lexigram.ai.rag.synthesis.types import SynthesisResult 

9 

10 

11class PlainTextFormatter: 

12 """Plain text response formatter. 

13 

14 This formatter outputs synthesis results as clean plain text without 

15 any markup or special formatting. 

16 

17 Attributes: 

18 include_metadata: Whether to include metadata footer 

19 include_sources: Whether to include source list 

20 """ 

21 

22 def __init__( 

23 self, 

24 include_metadata: bool = False, 

25 include_sources: bool = True, 

26 ): 

27 """Initialize the plain text formatter. 

28 

29 Args: 

30 include_metadata: Include metadata footer 

31 include_sources: Include source list 

32 """ 

33 self.include_metadata = include_metadata 

34 self.include_sources = include_sources 

35 

36 def format(self, result: SynthesisResult) -> str: 

37 """Format result as plain text. 

38 

39 Args: 

40 result: The synthesis result 

41 

42 Returns: 

43 Plain text output 

44 """ 

45 parts = [result.response] 

46 

47 # Add sources if requested 

48 if self.include_sources and result.sources: 

49 parts.append("\n\nSources:") 

50 for i, source in enumerate(result.sources, 1): 

51 parts.append(f"{i}. {source}") 

52 

53 # Add metadata if requested 

54 if self.include_metadata: 

55 parts.append(f"\n\nStrategy: {result.strategy.value}") 

56 parts.append(f"Chunks used: {result.num_chunks_used}") 

57 

58 if result.quality_metrics: 

59 parts.append( 

60 f"Confidence: {result.quality_metrics.confidence:.2f}", 

61 ) 

62 

63 return "".join(parts)