from typing import Any from .token_utils import count_tokens_approx from .text_utils import normalize_text def create_chunk( chunk_id: str, chunk_type: str, index_mode: str, content: str, metadata: dict[str, Any], ) -> dict[str, Any]: """Tạo ra một "chunk" (một phần dữ liệu) với các thông tin cụ thể. Hàm này nhận vào các thông tin cơ bản của một chunk như ID, loại, chế độ lập chỉ mục, nội dung và các thông tin bổ sung (metadata). Nó sẽ chuẩn hóa nội dung đầu vào và ước tính số lượng token (đơn vị xử lý văn bản) trong nội dung đó. Kết quả trả về là một từ điển chứa tất cả các thông tin này, sẵn sàng để sử dụng trong các hệ thống tìm kiếm hoặc xử lý dữ liệu. Args: chunk_id: Một chuỗi định danh (ID) duy nhất cho chunk này. Giúp phân biệt chunk này với các chunk khác. chunk_type: Loại của chunk, ví dụ: "text" (văn bản), "image_description" (mô tả ảnh). Giúp hệ thống biết cách xử lý nội dung. index_mode: Chế độ lập chỉ mục cho chunk này, ví dụ: "semantic" (ngữ nghĩa), "keyword" (từ khóa). Điều này ảnh hưởng đến cách chunk được tìm kiếm. content: Nội dung chính của chunk, thường là một đoạn văn bản. Nội dung này sẽ được chuẩn hóa trước khi lưu. metadata: Một từ điển chứa các thông tin bổ sung không bắt buộc về chunk. Ví dụ: {"author": "John Doe", "date": "2023-10-27"}. Returns: Một từ điển đại diện cho chunk đã tạo. Từ điển này bao gồm: - "chunk_id": ID duy nhất của chunk. - "chunk_type": Loại của chunk. - "index_mode": Chế độ lập chỉ mục. - "content": Nội dung đã được chuẩn hóa. - "token_count_approx": Số lượng token ước tính trong nội dung đã chuẩn hóa. - "metadata": Các thông tin bổ sung. """ content = normalize_text(content) return { "chunk_id": chunk_id, "chunk_type": chunk_type, "index_mode": index_mode, "content": content, "token_count_approx": count_tokens_approx(content), "metadata": metadata, }