Low-level primitives

Direct access to blazechunk's core algorithms for advanced use cases.

Chunker methods

All high-level chunkers expose the same four methods:

from blazechunk import RecursiveChunker

chunker = RecursiveChunker(chunk_size=2048)

# Synchronous
chunks: list[Chunk] = chunker.chunk(text: str)

# Asynchronous (runs off the event loop)
chunks: list[Chunk] = await chunker.chunk_async(text: str)

# Batch synchronous
batches: list[list[Chunk]] = chunker.chunk_batch(texts: Sequence[str])

# Batch asynchronous (with optional concurrency limit)
batches: list[list[Chunk]] = await chunker.chunk_batch_async(
    texts: Sequence[str],
    max_concurrency: int | None = None
)

Chunk object

Every chunk has four read-only attributes:

chunk.text: str                # The chunk text
chunk.start_index: int         # Byte offset into the original text
chunk.end_index: int           # Byte offset into the original text
chunk.token_count: int         # Token count per the configured tokenizer

# Invariant: chunk.text == original_text[start_index:end_index]
# (except TableChunker, which re-includes the table header in each chunk)

Tokenizer options

The tokenizer parameter accepts:

# Built-in tokenizers:
tokenizer="character"   # Unicode grapheme clusters
tokenizer="word"        # Word boundaries
tokenizer="byte"        # Raw UTF-8 bytes
tokenizer="row"         # Row-based (for TableChunker)

# Advanced: path to HuggingFace tokenizer.json (requires hf-tokenizer feature)
tokenizer="/path/to/tokenizer.json"
Note
All tokenizers are optimized for performance and used internally by every chunker. Specify the tokenizer when initializing any chunker.

Low-level zero-copy fast path

For maximum throughput, use the functional API directly:

from blazechunk import chunk, chunk_async

# Sync generator of zero-copy memoryview slices
for view in chunk(b"Hello. World. Test.", size=10, delimiters=b"."):
    print(bytes(view))

# Async variant returns owned bytes
chunks = await chunk_async(b"Hello. World.", size=10, delimiters=b".")
Output
b'Hello.'
b' World.'
b' Test.'

Chunker constructors

All chunkers use keyword-only arguments with sensible defaults:

from blazechunk import (
    RecursiveChunker, SentenceChunker, TokenChunker,
    TableChunker, CodeChunker
)

RecursiveChunker(*, tokenizer="character", chunk_size=2048, 
                 min_characters_per_chunk=24, rules=None)

SentenceChunker(*, tokenizer="character", chunk_size=2048, 
                chunk_overlap=0, min_sentences_per_chunk=1,
                min_characters_per_sentence=12, delim=None, 
                include_delim="prev")

TokenChunker(*, tokenizer="character", chunk_size=2048, 
             chunk_overlap=None)  # int | float | None

TableChunker(*, tokenizer="row", chunk_size=3)

CodeChunker(*, tokenizer="character", chunk_size=2048, 
            language="auto")
Note
include_delim accepts "prev", "next", or "none". For TokenChunker, chunk_overlap can be an int (token count) or float (fraction, e.g., 0.1).