"""Fixed-size sliding chunker (default).""" from __future__ import annotations from typing import List from ..core.types import Chunk, Document def fixed_chunker(doc: Document, chunk_size: int = 600, overlap: int = 100) -> List[Chunk]: text = doc.text if len(text) <= chunk_size: return [Chunk(doc_id=doc.id, chunk_id=f"{doc.id}::0", text=text, start=0, end=len(text), metadata=dict(doc.metadata))] chunks: List[Chunk] = [] i = 0 idx = 0 while i < len(text): end = min(len(text), i + chunk_size) chunks.append(Chunk( doc_id=doc.id, chunk_id=f"{doc.id}::{idx}", text=text[i:end], start=i, end=end, metadata=dict(doc.metadata), )) idx += 1 if end == len(text): break i = end - overlap return chunks