rag.splitters
- class CharacterChunker(chunk_size=1000, chunk_overlap=200, metadata=None, respect_word_boundaries=True)[source]
Bases:
ChunkerBaseCharacter-based chunking with word-boundary awareness.
- Parameters:
- class ChunkerBase(chunk_size=1000, chunk_overlap=200, metadata=None)[source]
Bases:
ABCAbstract base class for text chunking strategies.
- Parameters:
- class CodeChunker(chunk_size=1000, chunk_overlap=200, metadata=None, language='python', split_by='function')[source]
Bases:
ChunkerBaseCode-aware chunking that splits by functions/classes.
- Parameters:
- LANGUAGE_PATTERNS: dict[str, dict[str, str]] = {'generic': {'class': '^(class|struct|interface)\\s+\\w+', 'comment': '^(#|//|/\\*)', 'function': '^(function|func|def|fn)\\s+\\w+', 'import': '^(import|use|require)'}, 'go': {'class': '^type\\s+\\w+\\s+struct', 'comment': '^(//|/\\*)', 'function': '^func\\s+(\\(\\w+\\s+\\*?\\w+\\)\\s+)?\\w+\\s*\\(', 'import': '^import\\s+'}, 'java': {'class': '^\\s*(public\\s+)?(abstract\\s+)?class\\s+\\w+|interface\\s+\\w+', 'comment': '^(//|/\\*)', 'function': '^\\s*(public|private|protected|static)?\\s*\\w+\\s+\\w+\\s*\\(', 'import': '^import\\s+'}, 'javascript': {'class': '^(export\\s+)?class\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(async\\s+)?function\\s+\\w+|const\\s+\\w+\\s*=\\s*(async\\s+)?\\([^)]*\\)\\s*=>|export\\s+(async\\s+)?function', 'import': '^(import\\s+|export\\s+|require\\s*\\()'}, 'python': {'class': '^class\\s+\\w+[\\(:]', 'comment': '^(#|\'\'\'|\\"\\"\\")', 'decorator': '^@\\w+', 'function': '^(async\\s+)?def\\s+\\w+\\s*\\(', 'import': '^(import\\s+|from\\s+\\S+\\s+import)'}, 'rust': {'class': '^(pub\\s+)?struct\\s+\\w+|impl\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(pub\\s+)?(async\\s+)?fn\\s+\\w+', 'import': '^use\\s+'}, 'typescript': {'class': '^(export\\s+)?(abstract\\s+)?class\\s+\\w+|interface\\s+\\w+|type\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(async\\s+)?(function\\s+\\w+|const\\s+\\w+\\s*=\\s*(async\\s+)?\\([^)]*\\)\\s*(:\\s*\\w+)?\\s*=>|export\\s+(async\\s+)?function)', 'import': '^(import\\s+|export\\s+|require\\s*\\()'}}
- class HierarchicalChunker(chunk_size=400, chunk_overlap=100, metadata=None, parent_chunk_size=1500, max_levels=2)[source]
Bases:
ChunkerBaseHierarchical chunking with parent-child relationships.
- Parameters:
- chunk(text, metadata=None)[source]
Split text into hierarchical chunks with parent-child relationships.
- get_parent_chunks(chunks)[source]
Filter to return only parent chunks.
- Parameters:
chunks (list[HierarchicalTextChunk])
- Return type:
- get_child_chunks(chunks)[source]
Filter to return only child chunks.
- Parameters:
chunks (list[HierarchicalTextChunk])
- Return type:
- get_chunks_with_parent_context(child_chunks, all_chunks)[source]
Get child chunks with their parent context for retrieval.
- Parameters:
child_chunks (list[HierarchicalTextChunk]) – Child chunks retrieved from search.
all_chunks (list[HierarchicalTextChunk]) – All chunks (to look up parents).
- Returns:
List of dicts with child content and parent context.
- Return type:
- class HierarchicalTextChunk(content, chunk_index, start_char, end_char, metadata=None, id='', parent_id=None, child_ids=None, hierarchy_level=0)[source]
Bases:
TextChunkA text chunk that participates in a parent-child hierarchy.
Used by hierarchical chunking strategies that maintain relationships between larger parent chunks and smaller child chunks.
- Parameters:
- class MarkdownChunker(chunk_size=1000, chunk_overlap=200, metadata=None, split_headers=None, preserve_structure=True, max_chunk_fallback=True)[source]
Bases:
ChunkerBaseMarkdown-aware chunking that splits by headers.
- Parameters:
chunk_size (int) – Maximum characters per chunk.
chunk_overlap (int) – Overlap between consecutive chunks.
metadata (dict[str, Any] | None) – Default metadata for all chunks.
split_headers (list[str] | None) – List of header levels to split on (e.g., [“h1”, “h2”]).
preserve_structure (bool) – Whether to include header in chunk content.
max_chunk_fallback (bool) – Whether to further split large sections.
- HEADER_PATTERNS = {'h1': '^# .+', 'h2': '^## .+', 'h3': '^### .+', 'h4': '^#### .+', 'h5': '^##### .+', 'h6': '^###### .+'}
- class RecursiveChunker(chunk_size=1000, chunk_overlap=200, metadata=None, separators=None, keep_separator=True)[source]
Bases:
ChunkerBaseRecursive chunking that splits hierarchically by separators.
- Parameters:
chunk_size (int) – Maximum characters per chunk.
chunk_overlap (int) – Overlap between consecutive chunks.
metadata (dict[str, Any] | None) – Default metadata for all chunks.
separators (list[str] | None) – List of separators in order of preference.
keep_separator (bool) – Whether to keep the separator with chunks.
- DEFAULT_SEPARATORS = ['\n\n\n', '\n\n', '\n', '. ', '! ', '? ', '; ', ', ', ' ', '']
- class TextChunk(content, chunk_index, start_char, end_char, metadata=None)[source]
Bases:
objectA single chunk of text produced by a chunker.
- Parameters:
- chunk_text(text, strategy='recursive', chunk_size=1000, chunk_overlap=200, metadata=None, **kwargs)[source]
Convenience function to chunk text with a single call.
- Parameters:
- Returns:
List of TextChunk objects.
- Return type:
- get_chunker(strategy='recursive', chunk_size=1000, chunk_overlap=200, metadata=None, **kwargs)[source]
Get a chunker instance based on strategy name.
- Parameters:
strategy (str) – Chunking strategy name (character, recursive, markdown, code, hierarchical).
chunk_size (int) – Maximum chunk size.
chunk_overlap (int) – Overlap between chunks.
metadata (dict[str, Any] | None) – Default metadata for chunks.
**kwargs (Any) – Additional strategy-specific parameters.
- Returns:
Configured chunker instance.
- Raises:
ValueError – If strategy name is not recognized.
- Return type:
Classes
- class CharacterChunker(chunk_size=1000, chunk_overlap=200, metadata=None, respect_word_boundaries=True)[source]
Bases:
ChunkerBaseCharacter-based chunking with word-boundary awareness.
- Parameters:
- class ChunkerBase(chunk_size=1000, chunk_overlap=200, metadata=None)[source]
Bases:
ABCAbstract base class for text chunking strategies.
- Parameters:
- class CodeChunker(chunk_size=1000, chunk_overlap=200, metadata=None, language='python', split_by='function')[source]
Bases:
ChunkerBaseCode-aware chunking that splits by functions/classes.
- Parameters:
- LANGUAGE_PATTERNS: dict[str, dict[str, str]] = {'generic': {'class': '^(class|struct|interface)\\s+\\w+', 'comment': '^(#|//|/\\*)', 'function': '^(function|func|def|fn)\\s+\\w+', 'import': '^(import|use|require)'}, 'go': {'class': '^type\\s+\\w+\\s+struct', 'comment': '^(//|/\\*)', 'function': '^func\\s+(\\(\\w+\\s+\\*?\\w+\\)\\s+)?\\w+\\s*\\(', 'import': '^import\\s+'}, 'java': {'class': '^\\s*(public\\s+)?(abstract\\s+)?class\\s+\\w+|interface\\s+\\w+', 'comment': '^(//|/\\*)', 'function': '^\\s*(public|private|protected|static)?\\s*\\w+\\s+\\w+\\s*\\(', 'import': '^import\\s+'}, 'javascript': {'class': '^(export\\s+)?class\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(async\\s+)?function\\s+\\w+|const\\s+\\w+\\s*=\\s*(async\\s+)?\\([^)]*\\)\\s*=>|export\\s+(async\\s+)?function', 'import': '^(import\\s+|export\\s+|require\\s*\\()'}, 'python': {'class': '^class\\s+\\w+[\\(:]', 'comment': '^(#|\'\'\'|\\"\\"\\")', 'decorator': '^@\\w+', 'function': '^(async\\s+)?def\\s+\\w+\\s*\\(', 'import': '^(import\\s+|from\\s+\\S+\\s+import)'}, 'rust': {'class': '^(pub\\s+)?struct\\s+\\w+|impl\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(pub\\s+)?(async\\s+)?fn\\s+\\w+', 'import': '^use\\s+'}, 'typescript': {'class': '^(export\\s+)?(abstract\\s+)?class\\s+\\w+|interface\\s+\\w+|type\\s+\\w+', 'comment': '^(//|/\\*|\\*)', 'function': '^(async\\s+)?(function\\s+\\w+|const\\s+\\w+\\s*=\\s*(async\\s+)?\\([^)]*\\)\\s*(:\\s*\\w+)?\\s*=>|export\\s+(async\\s+)?function)', 'import': '^(import\\s+|export\\s+|require\\s*\\()'}}
- class HierarchicalChunker(chunk_size=400, chunk_overlap=100, metadata=None, parent_chunk_size=1500, max_levels=2)[source]
Bases:
ChunkerBaseHierarchical chunking with parent-child relationships.
- Parameters:
- chunk(text, metadata=None)[source]
Split text into hierarchical chunks with parent-child relationships.
- get_parent_chunks(chunks)[source]
Filter to return only parent chunks.
- Parameters:
chunks (list[HierarchicalTextChunk])
- Return type:
- get_child_chunks(chunks)[source]
Filter to return only child chunks.
- Parameters:
chunks (list[HierarchicalTextChunk])
- Return type:
- get_chunks_with_parent_context(child_chunks, all_chunks)[source]
Get child chunks with their parent context for retrieval.
- Parameters:
child_chunks (list[HierarchicalTextChunk]) – Child chunks retrieved from search.
all_chunks (list[HierarchicalTextChunk]) – All chunks (to look up parents).
- Returns:
List of dicts with child content and parent context.
- Return type:
- class HierarchicalTextChunk(content, chunk_index, start_char, end_char, metadata=None, id='', parent_id=None, child_ids=None, hierarchy_level=0)[source]
Bases:
TextChunkA text chunk that participates in a parent-child hierarchy.
Used by hierarchical chunking strategies that maintain relationships between larger parent chunks and smaller child chunks.
- Parameters:
- class MarkdownChunker(chunk_size=1000, chunk_overlap=200, metadata=None, split_headers=None, preserve_structure=True, max_chunk_fallback=True)[source]
Bases:
ChunkerBaseMarkdown-aware chunking that splits by headers.
- Parameters:
chunk_size (int) – Maximum characters per chunk.
chunk_overlap (int) – Overlap between consecutive chunks.
metadata (dict[str, Any] | None) – Default metadata for all chunks.
split_headers (list[str] | None) – List of header levels to split on (e.g., [“h1”, “h2”]).
preserve_structure (bool) – Whether to include header in chunk content.
max_chunk_fallback (bool) – Whether to further split large sections.
- HEADER_PATTERNS = {'h1': '^# .+', 'h2': '^## .+', 'h3': '^### .+', 'h4': '^#### .+', 'h5': '^##### .+', 'h6': '^###### .+'}
- class RecursiveChunker(chunk_size=1000, chunk_overlap=200, metadata=None, separators=None, keep_separator=True)[source]
Bases:
ChunkerBaseRecursive chunking that splits hierarchically by separators.
- Parameters:
chunk_size (int) – Maximum characters per chunk.
chunk_overlap (int) – Overlap between consecutive chunks.
metadata (dict[str, Any] | None) – Default metadata for all chunks.
separators (list[str] | None) – List of separators in order of preference.
keep_separator (bool) – Whether to keep the separator with chunks.
- DEFAULT_SEPARATORS = ['\n\n\n', '\n\n', '\n', '. ', '! ', '? ', '; ', ', ', ' ', '']
Functions
- chunk_text(text, strategy='recursive', chunk_size=1000, chunk_overlap=200, metadata=None, **kwargs)[source]
Convenience function to chunk text with a single call.
- Parameters:
- Returns:
List of TextChunk objects.
- Return type:
- get_chunker(strategy='recursive', chunk_size=1000, chunk_overlap=200, metadata=None, **kwargs)[source]
Get a chunker instance based on strategy name.
- Parameters:
strategy (str) – Chunking strategy name (character, recursive, markdown, code, hierarchical).
chunk_size (int) – Maximum chunk size.
chunk_overlap (int) – Overlap between chunks.
metadata (dict[str, Any] | None) – Default metadata for chunks.
**kwargs (Any) – Additional strategy-specific parameters.
- Returns:
Configured chunker instance.
- Raises:
ValueError – If strategy name is not recognized.
- Return type: