Skip to content

Commit f44fed1

Browse files
committed
update readme
1 parent 996c51b commit f44fed1

1 file changed

Lines changed: 124 additions & 1 deletion

File tree

README.md

Lines changed: 124 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,133 @@ for (const chunk of chunks) {
6565

6666
| Package | Description | Dependencies |
6767
|---------|-------------|--------------|
68-
| [@chonkiejs/core](./packages/core) | Local chunking (Recursive, Token) with character-based tokenization | Zero |
68+
| [@chonkiejs/core](./packages/core) | Local chunking (Recursive, Token, Sentence, Semantic, Code, Table, Fast) with character-based tokenization | Zero |
6969
| [@chonkiejs/cloud](./packages/cloud) | Cloud-based chunkers (Semantic, Neural, Code, etc.) via api.chonkie.ai | @chonkiejs/core |
7070
| [@chonkiejs/token](./packages/token) | HuggingFace tokenizer support for core chunkers | @huggingface/transformers |
7171

72+
## Chunkers
73+
74+
All chunkers are available from `@chonkiejs/core` and follow the same pattern: `await ChunkerClass.create(options)` returns an instance, then `await chunker.chunk(text)` returns a `Chunk[]`.
75+
76+
### TokenChunker
77+
78+
Splits text into fixed-size token chunks with optional overlap.
79+
80+
```typescript
81+
import { TokenChunker } from '@chonkiejs/core';
82+
83+
const chunker = await TokenChunker.create({
84+
chunkSize: 512, // max tokens per chunk (default: 512)
85+
chunkOverlap: 50, // overlapping tokens between chunks (default: 0)
86+
tokenizer: 'character', // tokenizer model name or Tokenizer instance (default: 'character')
87+
});
88+
const chunks = await chunker.chunk(text);
89+
```
90+
91+
### RecursiveChunker
92+
93+
Recursively splits text using a hierarchy of rules: paragraphs → sentences → punctuation → words → characters. The most general-purpose chunker.
94+
95+
```typescript
96+
import { RecursiveChunker } from '@chonkiejs/core';
97+
98+
const chunker = await RecursiveChunker.create({
99+
chunkSize: 512, // max tokens per chunk (default: 512)
100+
tokenizer: 'character', // tokenizer model name or Tokenizer instance (default: 'character')
101+
minCharactersPerChunk: 24, // min characters when merging splits (default: 24)
102+
// rules: RecursiveRules, // custom split hierarchy (optional)
103+
});
104+
const chunks = await chunker.chunk(text);
105+
```
106+
107+
### SentenceChunker
108+
109+
Groups sentences into token-sized chunks, respecting sentence boundaries.
110+
111+
```typescript
112+
import { SentenceChunker } from '@chonkiejs/core';
113+
114+
const chunker = await SentenceChunker.create({
115+
chunkSize: 2048, // max tokens per chunk (default: 2048)
116+
chunkOverlap: 0, // overlapping tokens between chunks (default: 0)
117+
minSentencesPerChunk: 1, // min sentences per chunk (default: 1)
118+
minCharactersPerSentence: 12, // min chars for a sentence (default: 12)
119+
delim: ['. ', '! ', '? ', '\n'], // sentence boundary delimiters (default)
120+
includeDelim: 'prev', // attach delimiter to 'prev' | 'next' | 'none' (default: 'prev')
121+
tokenizer: 'character',
122+
});
123+
const chunks = await chunker.chunk(text);
124+
```
125+
126+
### SemanticChunker
127+
128+
Detects natural chunk boundaries by computing embedding similarity between sliding sentence windows and splitting at low-similarity valleys.
129+
130+
```typescript
131+
import { SemanticChunker } from '@chonkiejs/core';
132+
133+
const chunker = await SemanticChunker.create({
134+
embeddings: async (texts) => myModel.encode(texts), // required: (texts: string[]) => Promise<number[][]>
135+
// or: embeddings: myModel, // any object with .embed(texts) method
136+
chunkSize: 2048, // max tokens per chunk (default: 2048)
137+
threshold: 0.8, // similarity threshold for splits; lower = more splits (default: 0.8)
138+
similarityWindow: 3, // sentences per sliding window embedding (default: 3)
139+
minSentencesPerChunk: 1, // min sentences per chunk (default: 1)
140+
minCharactersPerSentence: 24,
141+
tokenizer: 'character',
142+
});
143+
const chunks = await chunker.chunk(text);
144+
```
145+
146+
### CodeChunker
147+
148+
Splits source code into AST-aware chunks using [tree-sitter](https://tree-sitter.github.io/). Requires `web-tree-sitter` and a language grammar.
149+
150+
```typescript
151+
import { CodeChunker } from '@chonkiejs/core';
152+
153+
// Using a language id (requires `tree-sitter-wasms` package)
154+
const chunker = await CodeChunker.create({
155+
language: 'javascript', // language id, .wasm path/URL, or Language instance
156+
chunkSize: 2048,
157+
tokenizer: 'character',
158+
});
159+
const chunks = chunker.chunk(sourceCode); // synchronous after create()
160+
```
161+
162+
### TableChunker
163+
164+
Splits markdown or HTML tables into smaller sub-tables, each repeating the original header.
165+
166+
```typescript
167+
import { TableChunker } from '@chonkiejs/core';
168+
169+
// Row mode (default): at most N data rows per chunk
170+
const chunker = await TableChunker.create({
171+
tokenizer: 'row', // 'row' for row-based, or any tokenizer for token-based (default: 'row')
172+
chunkSize: 3, // max rows per chunk in row mode, max tokens in token mode (default: 3)
173+
});
174+
const chunks = chunker.chunk(markdownOrHtmlTable); // synchronous
175+
```
176+
177+
### FastChunker
178+
179+
High-throughput byte-based chunker powered by WASM. Does not count tokens — suited for pre-processing or when speed matters most.
180+
181+
```typescript
182+
import { FastChunker } from '@chonkiejs/core';
183+
184+
const chunker = await FastChunker.create({
185+
chunkSize: 4096, // target chunk size in bytes (default: 4096)
186+
delimiters: '\n.?', // boundary characters (default: '\n.?')
187+
// pattern: '---', // multi-byte pattern (overrides delimiters)
188+
prefix: false, // attach delimiter to start of next chunk (default: false)
189+
consecutive: false, // split at start of consecutive delimiter runs (default: false)
190+
forwardFallback: false, // search forward if no boundary found in backward window (default: false)
191+
});
192+
const chunks = chunker.chunk(text); // synchronous
193+
```
194+
72195
## Contributing
73196

74197
Want to help grow Chonkie? Check out [CONTRIBUTING.md](CONTRIBUTING.md) to get started! Whether you're fixing bugs, adding features, improving docs, or simply leaving a ⭐️ on the repo, every contribution helps make Chonkie a better CHONK for everyone.

0 commit comments

Comments
 (0)