1"""
2Preprocessed document result class.
3"""
4
5from __future__ import annotations
6
7from dataclasses import dataclass, field
8from datetime import UTC, datetime
9from typing import Any
10
11from lexigram.ai.rag.preprocessing.types import ExtractedImage, ExtractedTable
12
13
14@dataclass
15class PreprocessedDocument:
16 """Result of document preprocessing.
17
18 Attributes:
19 content: Main text content.
20 metadata: Document metadata.
21 raw_content: Original raw content.
22 preprocessing_stats: Statistics about preprocessing.
23 """
24
25 content: str = ""
26 metadata: Any = None
27 raw_content: str | None = None
28 preprocessing_stats: dict[str, Any] = field(default_factory=dict)
29 text: str = ""
30 images: list[ExtractedImage] = field(default_factory=list)
31 tables: list[ExtractedTable] = field(default_factory=list)
32 timestamp: datetime = field(default_factory=lambda: datetime.now(UTC))
33 processing_time: float | None = None
34
35 def __post_init__(self) -> Any:
36 if self.text and not self.content:
37 self.content = self.text
38 if self.content and not self.text:
39 self.text = self.content