diff --git a/CHANGELOG.md b/CHANGELOG.md index c224121..74da574 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v0.14.1 + +### What's New + +- Small performance improvements where checking the size of the chunk is avoided if we already know it is too small or we don't need to. +- Loosen dependency ranges for Rust crates to allow for more flexibility in the versions you can use. + ## v0.14.0 ### What's New diff --git a/Cargo.lock b/Cargo.lock index 3033593..4ca806d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -148,9 +148,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -1073,7 +1073,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] @@ -1277,7 +1277,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -1339,9 +1339,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall 0.5.2", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1436,7 +1436,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8746739f11d39ce5ad5c2520a9b75285310dbfe78c541ccf832d38615765aec0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "memchr", "unicase", ] @@ -1585,11 +1585,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -1732,7 +1732,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -1760,7 +1760,7 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.5", "subtle", "zeroize", ] @@ -1792,9 +1792,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" dependencies = [ "ring", "rustls-pki-types", @@ -1853,7 +1853,7 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -1872,9 +1872,8 @@ dependencies = [ [[package]] name = "semantic-text-splitter" -version = "0.14.0" +version = "0.14.1" dependencies = [ - "auto_enums", "pyo3", "text-splitter", "tiktoken-rs", @@ -2109,7 +2108,7 @@ dependencies = [ [[package]] name = "text-splitter" -version = "0.14.0" +version = "0.14.1" dependencies = [ "ahash", "auto_enums", @@ -2191,9 +2190,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "tinyvec" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +checksum = "ce6b6a2fb3a985e99cebfaefa9faa3024743da73304ca1c683a36429613d3d22" dependencies = [ "tinyvec_macros", ] @@ -2413,11 +2412,11 @@ dependencies = [ "once_cell", "rustls 0.22.4", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.5", "serde", "serde_json", "url", - "webpki-roots 0.26.1", + "webpki-roots 0.26.3", ] [[package]] @@ -2552,9 +2551,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.1" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" dependencies = [ "rustls-pki-types", ] @@ -2605,7 +2604,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2625,18 +2624,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -2647,9 +2646,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -2659,9 +2658,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -2671,9 +2670,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" @@ -2689,9 +2688,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -2701,9 +2700,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -2713,9 +2712,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -2725,9 +2724,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" @@ -2817,9 +2816,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.12+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 1baa9a9..fbe29a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ members = ["bindings/*"] [workspace.package] -version = "0.14.0" +version = "0.14.1" authors = ["Ben Brandt "] edition = "2021" description = "Split text into semantic chunks, up to a desired chunk size. Supports calculating length by characters and tokens, and is callable from Rust and Python." @@ -60,38 +60,38 @@ rustdoc-args = ["--cfg", "docsrs"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -ahash = "0.8.11" -auto_enums = "0.8.5" -either = "1.13.0" -itertools = "0.13.0" -once_cell = "1.19.0" -pulldown-cmark = { version = "0.11.0", default-features = false, optional = true } +ahash = "0.8.7" +auto_enums = "0.8" +either = "1.6" +itertools = "0.13" +once_cell = "1.18" +pulldown-cmark = { version = "0.11", default-features = false, optional = true } regex = "1.10.5" -rust_tokenizers = { version = "8.1.1", optional = true } -strum = { version = "0.26.3", features = ["derive"] } -thiserror = "1.0.61" -tiktoken-rs = { version = "0.5.9", optional = true } -tokenizers = { version = "0.19.1", default-features = false, features = [ +rust_tokenizers = { version = "8", optional = true } +strum = { version = "0.26", features = ["derive"] } +thiserror = "1.0.49" +tiktoken-rs = { version = "0.5", optional = true } +tokenizers = { version = "0.19", default-features = false, features = [ "onig", ], optional = true } -tree-sitter = { version = "0.22.6", optional = true } -unicode-segmentation = "1.11.0" +tree-sitter = { version = "0.22", optional = true } +unicode-segmentation = "1.11" [dev-dependencies] -cached-path = { version = "0.6.1", default-features = false, features = [ +cached-path = { version = "0.6", default-features = false, features = [ "rustls-tls", ] } dirs = "5.0.1" divan = "0.1.14" -fake = "2.9.2" -insta = { version = "1.39.0", features = ["glob", "yaml"] } -more-asserts = "0.3.1" -rayon = "1.10.0" -tokenizers = { version = "0.19.1", default-features = false, features = [ +fake = "2" +insta = { version = "1.39", features = ["glob", "yaml"] } +more-asserts = "0.3" +rayon = "1.10" +tokenizers = { version = "0.19", default-features = false, features = [ "onig", "http", ] } -tree-sitter-rust = "0.21.2" +tree-sitter-rust = "0.21" [[bench]] name = "chunk_size" @@ -109,10 +109,4 @@ workspace = true # Tokenizers and indirect deps can cause slow runtime [profile.dev.package."*"] -opt-level = 1 - -[profile.dev.package.insta] -opt-level = 3 - -[profile.dev.package.similar] opt-level = 3 diff --git a/README.md b/README.md index 902eded..816a768 100644 --- a/README.md +++ b/README.md @@ -201,9 +201,9 @@ There are lots of methods of determining sentence breaks, all to varying degrees | Dependency Feature | Version Supported | Description | | ------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `rust_tokenizers` | `8.1.1` | Enables `(Text/Markdown)Splitter::new` to take any of the provided tokenizers as an argument. | -| `tiktoken-rs` | `0.5.8` | Enables `(Text/Markdown)Splitter::new` to take `tiktoken_rs::CoreBPE` as an argument. This is useful for splitting text for `OpenAI` models. | -| `tokenizers` | `0.19.1` | Enables `(Text/Markdown)Splitter::new` to take `tokenizers::Tokenizer` as an argument. This is useful for splitting text models that have a Hugging Face-compatible tokenizer. | +| `rust_tokenizers` | `^8.0.0` | Enables `(Text/Markdown)Splitter::new` to take any of the provided tokenizers as an argument. | +| `tiktoken-rs` | `^0.5.0` | Enables `(Text/Markdown)Splitter::new` to take `tiktoken_rs::CoreBPE` as an argument. This is useful for splitting text for `OpenAI` models. | +| `tokenizers` | `^0.19.0` | Enables `(Text/Markdown)Splitter::new` to take `tokenizers::Tokenizer` as an argument. This is useful for splitting text models that have a Hugging Face-compatible tokenizer. | ## Inspiration diff --git a/benches/chunk_size.rs b/benches/chunk_size.rs index f488069..208286a 100644 --- a/benches/chunk_size.rs +++ b/benches/chunk_size.rs @@ -59,6 +59,7 @@ static FILES: Lazy> = Lazy::new(|| { m }); +#[cfg(feature = "rust-tokenizers")] static BERT_TOKENIZER: Lazy = Lazy::new(|| { let vocab_path = download_file_to_cache( "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt", diff --git a/benches/output.txt b/benches/output.txt index 0c2d37b..b68b428 100644 --- a/benches/output.txt +++ b/benches/output.txt @@ -8,20 +8,20 @@ chunk_size fastest │ slowest │ median ├─ code │ │ │ │ │ │ ├─ characters │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 805.1 ms │ 861.9 ms │ 812.4 ms │ 816 ms │ 100 │ 100 -│ │ │ 109.3 KB/s │ 102.1 KB/s │ 108.3 KB/s │ 107.8 KB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 782.8 ms │ 835.4 ms │ 809.6 ms │ 807.9 ms │ 100 │ 100 +│ │ │ 112.4 KB/s │ 105.3 KB/s │ 108.7 KB/s │ 108.9 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 6164 │ 6164 │ 6164 │ 6102 │ │ -│ │ │ 109.9 MB │ 109.9 MB │ 109.9 MB │ 108.8 MB │ │ +│ │ │ 6164 │ 0 │ 6164 │ 6102 │ │ +│ │ │ 109.9 MB │ 0 B │ 109.9 MB │ 108.8 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 6165 │ 6165 │ 6165 │ 6103 │ │ -│ │ │ 445.9 MB │ 445.9 MB │ 445.9 MB │ 441.5 MB │ │ +│ │ │ 6165 │ 0 │ 6165 │ 6103 │ │ +│ │ │ 445.9 MB │ 0 B │ 445.9 MB │ 441.5 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 24490 │ 24490 │ 24490 │ 24245 │ │ -│ │ │ 335.9 MB │ 335.9 MB │ 335.9 MB │ 332.5 MB │ │ +│ │ │ 24490 │ 0 │ 24490 │ 24245 │ │ +│ │ │ 335.9 MB │ 0 B │ 335.9 MB │ 332.5 MB │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 48.65 ms │ 54.18 ms │ 48.89 ms │ 49.01 ms │ 100 │ 100 -│ │ │ 1.809 MB/s │ 1.624 MB/s │ 1.8 MB/s │ 1.795 MB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 47.81 ms │ 54.3 ms │ 48.22 ms │ 48.79 ms │ 100 │ 100 +│ │ │ 1.84 MB/s │ 1.621 MB/s │ 1.825 MB/s │ 1.804 MB/s │ │ │ │ │ alloc: │ │ │ │ │ │ │ │ 350 │ 350 │ 350 │ 350 │ │ │ │ │ 5.852 MB │ 5.852 MB │ 5.852 MB │ 5.852 MB │ │ @@ -32,8 +32,8 @@ chunk_size fastest │ slowest │ median │ │ │ 1374 │ 1374 │ 1374 │ 1374 │ │ │ │ │ 18.45 MB │ 18.45 MB │ 18.45 MB │ 18.45 MB │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ hashbrown_set_rs 9.176 ms │ 9.882 ms │ 9.237 ms │ 9.251 ms │ 100 │ 100 -│ │ 9.592 MB/s │ 8.907 MB/s │ 9.528 MB/s │ 9.514 MB/s │ │ +│ │ ╰─ hashbrown_set_rs 9.197 ms │ 9.887 ms │ 9.253 ms │ 9.267 ms │ 100 │ 100 +│ │ 9.57 MB/s │ 8.902 MB/s │ 9.512 MB/s │ 9.497 MB/s │ │ │ │ alloc: │ │ │ │ │ │ │ 29 │ 29 │ 29 │ 29 │ │ │ │ 472.4 KB │ 472.4 KB │ 472.4 KB │ 472.4 KB │ │ @@ -45,120 +45,120 @@ chunk_size fastest │ slowest │ median │ │ 2.252 MB │ 2.252 MB │ 2.252 MB │ 2.252 MB │ │ │ ├─ rust_tokenizers │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 500 ms │ 526.9 ms │ 501.5 ms │ 502.8 ms │ 100 │ 100 -│ │ │ 176 KB/s │ 167 KB/s │ 175.5 KB/s │ 175 KB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 494.6 ms │ 512.7 ms │ 498.3 ms │ 498.8 ms │ 100 │ 100 +│ │ │ 177.9 KB/s │ 171.6 KB/s │ 176.6 KB/s │ 176.4 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 8430316 │ 8430320 │ 8430316 │ 8430316 │ │ -│ │ │ 618.9 MB │ 619 MB │ 618.9 MB │ 618.9 MB │ │ +│ │ │ 8362745 │ 8362749 │ 8362745 │ 8362745 │ │ +│ │ │ 614.1 MB │ 614.1 MB │ 614.1 MB │ 614.1 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 8430317 │ 8430319 │ 8430317 │ 8430317 │ │ -│ │ │ 908.7 MB │ 908.7 MB │ 908.7 MB │ 908.7 MB │ │ +│ │ │ 8362746 │ 8362748 │ 8362746 │ 8362746 │ │ +│ │ │ 903 MB │ 903 MB │ 903 MB │ 903 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 264002 │ 264002 │ 264002 │ 264002 │ │ -│ │ │ 289.6 MB │ 289.6 MB │ 289.6 MB │ 289.6 MB │ │ +│ │ │ 261066 │ 261066 │ 261066 │ 261066 │ │ +│ │ │ 288.7 MB │ 288.7 MB │ 288.7 MB │ 288.7 MB │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 102.9 ms │ 113.6 ms │ 103.7 ms │ 103.9 ms │ 100 │ 100 -│ │ │ 855.4 KB/s │ 774.4 KB/s │ 848.3 KB/s │ 846.7 KB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 101.2 ms │ 108.3 ms │ 102 ms │ 102.1 ms │ 100 │ 100 +│ │ │ 869 KB/s │ 812.3 KB/s │ 862.7 KB/s │ 862 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 2728776 │ 2728776 │ 2728776 │ 2728776 │ │ -│ │ │ 189.8 MB │ 189.8 MB │ 189.8 MB │ 189.8 MB │ │ +│ │ │ 2698716 │ 2698716 │ 2698716 │ 2698716 │ │ +│ │ │ 187.8 MB │ 187.8 MB │ 187.8 MB │ 187.8 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 2728777 │ 2728777 │ 2728777 │ 2728777 │ │ -│ │ │ 258 MB │ 258 MB │ 258 MB │ 258 MB │ │ +│ │ │ 2698717 │ 2698717 │ 2698717 │ 2698717 │ │ +│ │ │ 255.4 MB │ 255.4 MB │ 255.4 MB │ 255.4 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 81250 │ 81250 │ 81250 │ 81250 │ │ -│ │ │ 68.09 MB │ 68.09 MB │ 68.09 MB │ 68.09 MB │ │ +│ │ │ 79887 │ 79887 │ 79887 │ 79887 │ │ +│ │ │ 67.51 MB │ 67.51 MB │ 67.51 MB │ 67.51 MB │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ hashbrown_set_rs 41.58 ms │ 47.29 ms │ 42.17 ms │ 42.18 ms │ 100 │ 100 -│ │ 2.116 MB/s │ 1.861 MB/s │ 2.087 MB/s │ 2.086 MB/s │ │ +│ │ ╰─ hashbrown_set_rs 46.94 ms │ 52.35 ms │ 47.21 ms │ 47.31 ms │ 100 │ 100 +│ │ 1.875 MB/s │ 1.681 MB/s │ 1.864 MB/s │ 1.86 MB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 1161480 │ 1161480 │ 1161480 │ 1161480 │ │ -│ │ 79.8 MB │ 79.8 MB │ 79.8 MB │ 79.8 MB │ │ +│ │ 1333625 │ 1333625 │ 1333625 │ 1333625 │ │ +│ │ 91.76 MB │ 91.76 MB │ 91.76 MB │ 91.76 MB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 1161481 │ 1161481 │ 1161481 │ 1161481 │ │ -│ │ 104.7 MB │ 104.7 MB │ 104.7 MB │ 104.7 MB │ │ +│ │ 1333626 │ 1333626 │ 1333626 │ 1333626 │ │ +│ │ 121.6 MB │ 121.6 MB │ 121.6 MB │ 121.6 MB │ │ │ │ grow: │ │ │ │ │ -│ │ 34097 │ 34097 │ 34097 │ 34097 │ │ -│ │ 24.9 MB │ 24.9 MB │ 24.9 MB │ 24.9 MB │ │ +│ │ 38562 │ 38562 │ 38562 │ 38562 │ │ +│ │ 29.81 MB │ 29.81 MB │ 29.81 MB │ 29.81 MB │ │ │ ├─ tiktoken │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 394.6 ms │ 414.3 ms │ 398.2 ms │ 400.4 ms │ 100 │ 100 -│ │ │ 223 KB/s │ 212.4 KB/s │ 221 KB/s │ 219.7 KB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 391.8 ms │ 425.6 ms │ 395.2 ms │ 398.4 ms │ 100 │ 100 +│ │ │ 224.6 KB/s │ 206.8 KB/s │ 222.6 KB/s │ 220.9 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 1560480 │ 1560480 │ 1560480 │ 1560480 │ │ -│ │ │ 120.6 MB │ 120.6 MB │ 120.6 MB │ 120.6 MB │ │ +│ │ │ 1549146 │ 1549146 │ 1549146 │ 1549146 │ │ +│ │ │ 119.9 MB │ 119.9 MB │ 119.9 MB │ 119.9 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 1871988 │ 1871988 │ 1871988 │ 1871988 │ │ -│ │ │ 270 MB │ 270 MB │ 270 MB │ 270 MB │ │ +│ │ │ 1860654 │ 1860654 │ 1860654 │ 1860654 │ │ +│ │ │ 269.1 MB │ 269.1 MB │ 269.1 MB │ 269.1 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 456904 │ 456904 │ 456904 │ 456904 │ │ -│ │ │ 130.9 MB │ 130.9 MB │ 130.9 MB │ 130.9 MB │ │ +│ │ │ 454756 │ 454756 │ 454756 │ 454756 │ │ +│ │ │ 130.7 MB │ 130.7 MB │ 130.7 MB │ 130.7 MB │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ hashbrown_set_rs 98.08 ms │ 103.1 ms │ 100.5 ms │ 100 ms │ 100 │ 100 -│ │ │ 897.4 KB/s │ 853.2 KB/s │ 875.4 KB/s │ 879.7 KB/s │ │ +│ │ │ ╰─ hashbrown_set_rs 96.92 ms │ 104.5 ms │ 97.78 ms │ 97.97 ms │ 100 │ 100 +│ │ │ 908.1 KB/s │ 841.5 KB/s │ 900.2 KB/s │ 898.4 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 590427 │ 590427 │ 590427 │ 590427 │ │ -│ │ │ 38.05 MB │ 38.05 MB │ 38.05 MB │ 38.05 MB │ │ +│ │ │ 586728 │ 586728 │ 586728 │ 586728 │ │ +│ │ │ 37.82 MB │ 37.82 MB │ 37.82 MB │ 37.82 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 901935 │ 901935 │ 901935 │ 901935 │ │ -│ │ │ 83.06 MB │ 83.06 MB │ 83.06 MB │ 83.06 MB │ │ +│ │ │ 898236 │ 898236 │ 898236 │ 898236 │ │ +│ │ │ 82.73 MB │ 82.73 MB │ 82.73 MB │ 82.73 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 166098 │ 166098 │ 166098 │ 166098 │ │ -│ │ │ 26.61 MB │ 26.61 MB │ 26.61 MB │ 26.61 MB │ │ +│ │ │ 165222 │ 165222 │ 165222 │ 165222 │ │ +│ │ │ 26.5 MB │ 26.5 MB │ 26.5 MB │ 26.5 MB │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ hashbrown_set_rs 61.42 ms │ 67.35 ms │ 62.01 ms │ 62.22 ms │ 100 │ 100 -│ │ 1.433 MB/s │ 1.306 MB/s │ 1.419 MB/s │ 1.414 MB/s │ │ +│ │ ╰─ hashbrown_set_rs 67.37 ms │ 72.75 ms │ 67.85 ms │ 68.02 ms │ 100 │ 100 +│ │ 1.306 MB/s │ 1.209 MB/s │ 1.297 MB/s │ 1.294 MB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 397840 │ 397840 │ 397840 │ 397840 │ │ -│ │ 24.83 MB │ 24.83 MB │ 24.83 MB │ 24.83 MB │ │ +│ │ 442430 │ 442430 │ 442430 │ 442430 │ │ +│ │ 27.59 MB │ 27.59 MB │ 27.59 MB │ 27.59 MB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 709348 │ 709348 │ 709348 │ 709348 │ │ -│ │ 58.94 MB │ 58.94 MB │ 58.94 MB │ 58.94 MB │ │ +│ │ 753938 │ 753938 │ 753938 │ 753938 │ │ +│ │ 63.15 MB │ 63.15 MB │ 63.15 MB │ 63.15 MB │ │ │ │ grow: │ │ │ │ │ -│ │ 111367 │ 111367 │ 111367 │ 111367 │ │ -│ │ 15.7 MB │ 15.7 MB │ 15.7 MB │ 15.7 MB │ │ +│ │ 124138 │ 124138 │ 124138 │ 124138 │ │ +│ │ 17.15 MB │ 17.15 MB │ 17.15 MB │ 17.15 MB │ │ │ ╰─ tokenizers │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ ╰─ hashbrown_set_rs 706.4 ms │ 792.6 ms │ 722.8 ms │ 726.4 ms │ 100 │ 100 -│ │ 124.5 KB/s │ 111 KB/s │ 121.7 KB/s │ 121.1 KB/s │ │ +│ │ ╰─ hashbrown_set_rs 702.2 ms │ 743.2 ms │ 706.9 ms │ 708.7 ms │ 100 │ 100 +│ │ 125.3 KB/s │ 118.4 KB/s │ 124.5 KB/s │ 124.1 KB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 10051800 │ 10051800 │ 10051800 │ 10051800 │ │ -│ │ 1.089 GB │ 1.089 GB │ 1.089 GB │ 1.089 GB │ │ +│ │ 9915047 │ 9915047 │ 9915047 │ 9915047 │ │ +│ │ 1.079 GB │ 1.079 GB │ 1.079 GB │ 1.079 GB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 10109853 │ 10109853 │ 10109853 │ 10109853 │ │ -│ │ 1.723 GB │ 1.723 GB │ 1.723 GB │ 1.723 GB │ │ +│ │ 9973100 │ 9973100 │ 9973100 │ 9973100 │ │ +│ │ 1.71 GB │ 1.71 GB │ 1.71 GB │ 1.71 GB │ │ │ │ grow: │ │ │ │ │ -│ │ 431057 │ 431057 │ 431057 │ 431057 │ │ -│ │ 629 MB │ 629 MB │ 629 MB │ 629 MB │ │ +│ │ 415920 │ 415920 │ 415920 │ 415920 │ │ +│ │ 626.5 MB │ 626.5 MB │ 626.5 MB │ 626.5 MB │ │ │ ├─ 1024 │ │ │ │ │ -│ │ ╰─ hashbrown_set_rs 149.7 ms │ 159.3 ms │ 150.3 ms │ 150.9 ms │ 100 │ 100 -│ │ 587.7 KB/s │ 552.3 KB/s │ 585.2 KB/s │ 582.9 KB/s │ │ +│ │ ╰─ hashbrown_set_rs 149.1 ms │ 162.4 ms │ 151.1 ms │ 151.4 ms │ 100 │ 100 +│ │ 590.3 KB/s │ 541.7 KB/s │ 582.4 KB/s │ 581.2 KB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 2970854 │ 2970854 │ 2970854 │ 2970854 │ │ -│ │ 316 MB │ 316 MB │ 316 MB │ 316 MB │ │ +│ │ 2952298 │ 2952298 │ 2952298 │ 2952298 │ │ +│ │ 314.4 MB │ 314.4 MB │ 314.4 MB │ 314.4 MB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 3028907 │ 3028907 │ 3028907 │ 3028907 │ │ -│ │ 486.8 MB │ 486.8 MB │ 486.8 MB │ 486.8 MB │ │ +│ │ 3010351 │ 3010351 │ 3010351 │ 3010351 │ │ +│ │ 484.6 MB │ 484.6 MB │ 484.6 MB │ 484.6 MB │ │ │ │ grow: │ │ │ │ │ -│ │ 86270 │ 86270 │ 86270 │ 86270 │ │ -│ │ 166 MB │ 166 MB │ 166 MB │ 166 MB │ │ +│ │ 83979 │ 83979 │ 83979 │ 83979 │ │ +│ │ 165.4 MB │ 165.4 MB │ 165.4 MB │ 165.4 MB │ │ │ ╰─ 16384 │ │ │ │ │ -│ ╰─ hashbrown_set_rs 93.83 ms │ 101.1 ms │ 94.24 ms │ 94.49 ms │ 100 │ 100 -│ 938 KB/s │ 870.1 KB/s │ 933.9 KB/s │ 931.4 KB/s │ │ +│ ╰─ hashbrown_set_rs 93.09 ms │ 105.3 ms │ 94.1 ms │ 94.58 ms │ 100 │ 100 +│ 945.4 KB/s │ 835.7 KB/s │ 935.4 KB/s │ 930.6 KB/s │ │ │ alloc: │ │ │ │ │ -│ 2030279 │ 2030279 │ 2030279 │ 2030279 │ │ -│ 213.2 MB │ 213.2 MB │ 213.2 MB │ 213.2 MB │ │ +│ 2033644 │ 2033644 │ 2033644 │ 2033644 │ │ +│ 213.5 MB │ 213.5 MB │ 213.5 MB │ 213.5 MB │ │ │ dealloc: │ │ │ │ │ -│ 2088332 │ 2088332 │ 2088332 │ 2088332 │ │ -│ 328.9 MB │ 328.9 MB │ 328.9 MB │ 328.9 MB │ │ +│ 2091697 │ 2091697 │ 2091697 │ 2091697 │ │ +│ 329.5 MB │ 329.5 MB │ 329.5 MB │ 329.5 MB │ │ │ grow: │ │ │ │ │ -│ 44407 │ 44407 │ 44407 │ 44407 │ │ -│ 110.9 MB │ 110.9 MB │ 110.9 MB │ 110.9 MB │ │ +│ 43866 │ 43866 │ 43866 │ 43866 │ │ +│ 111.1 MB │ 111.1 MB │ 111.1 MB │ 111.1 MB │ │ ├─ markdown │ │ │ │ │ │ ├─ characters │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 573.9 ms │ 622.3 ms │ 601.4 ms │ 599.1 ms │ 100 │ 100 -│ │ │ 357.2 KB/s │ 329.4 KB/s │ 340.8 KB/s │ 342.2 KB/s │ │ +│ │ │ ╰─ commonmark_spec 586 ms │ 627.5 ms │ 614.8 ms │ 605.3 ms │ 100 │ 100 +│ │ │ 349.8 KB/s │ 326.7 KB/s │ 333.4 KB/s │ 338.6 KB/s │ │ │ │ │ alloc: │ │ │ │ │ │ │ │ 13613 │ 13613 │ 13613 │ 13613 │ │ │ │ │ 11.01 MB │ 11.01 MB │ 11.01 MB │ 11.01 MB │ │ @@ -172,14 +172,14 @@ chunk_size fastest │ slowest │ median │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 33.67 ms │ 41.6 ms │ 33.95 ms │ 34.18 ms │ 100 │ 100 -│ │ │ 6.088 MB/s │ 4.927 MB/s │ 6.037 MB/s │ 5.997 MB/s │ │ +│ │ │ ╰─ commonmark_spec 35.96 ms │ 38.77 ms │ 36.22 ms │ 36.48 ms │ 100 │ 100 +│ │ │ 5.7 MB/s │ 5.287 MB/s │ 5.659 MB/s │ 5.619 MB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 777 │ 777 │ 777 │ 777 │ │ -│ │ │ 913 KB │ 913 KB │ 913 KB │ 913 KB │ │ +│ │ │ 776 │ 776 │ 776 │ 776 │ │ +│ │ │ 912.4 KB │ 912.4 KB │ 912.4 KB │ 912.4 KB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 778 │ 778 │ 778 │ 778 │ │ -│ │ │ 3.331 MB │ 3.331 MB │ 3.331 MB │ 3.331 MB │ │ +│ │ │ 777 │ 777 │ 777 │ 777 │ │ +│ │ │ 3.33 MB │ 3.33 MB │ 3.33 MB │ 3.33 MB │ │ │ │ │ grow: │ │ │ │ │ │ │ │ 2296 │ 2296 │ 2296 │ 2296 │ │ │ │ │ 2.213 MB │ 2.213 MB │ 2.213 MB │ 2.213 MB │ │ @@ -187,8 +187,8 @@ chunk_size fastest │ slowest │ median │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ commonmark_spec 2.894 ms │ 3.225 ms │ 2.976 ms │ 2.986 ms │ 100 │ 100 -│ │ 70.82 MB/s │ 63.56 MB/s │ 68.87 MB/s │ 68.65 MB/s │ │ +│ │ ╰─ commonmark_spec 3.032 ms │ 3.517 ms │ 3.155 ms │ 3.18 ms │ 100 │ 100 +│ │ 67.61 MB/s │ 58.28 MB/s │ 64.97 MB/s │ 64.46 MB/s │ │ │ │ alloc: │ │ │ │ │ │ │ 84 │ 84 │ 84 │ 84 │ │ │ │ 360.9 KB │ 360.9 KB │ 360.9 KB │ 360.9 KB │ │ @@ -203,152 +203,152 @@ chunk_size fastest │ slowest │ median │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ ├─ rust_tokenizers │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 1.496 s │ 1.547 s │ 1.516 s │ 1.519 s │ 100 │ 100 -│ │ │ 136.9 KB/s │ 132.4 KB/s │ 135.1 KB/s │ 134.9 KB/s │ │ +│ │ │ ╰─ commonmark_spec 1.498 s │ 1.673 s │ 1.519 s │ 1.542 s │ 100 │ 100 +│ │ │ 136.8 KB/s │ 122.5 KB/s │ 134.9 KB/s │ 132.8 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 45617041 │ 45617041 │ 45617041 │ 45617041 │ │ -│ │ │ 3.103 GB │ 3.103 GB │ 3.103 GB │ 3.103 GB │ │ +│ │ │ 45442579 │ 45442579 │ 45442579 │ 45442579 │ │ +│ │ │ 3.091 GB │ 3.091 GB │ 3.091 GB │ 3.091 GB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 45617042 │ 45617042 │ 45617042 │ 45617042 │ │ -│ │ │ 4.214 GB │ 4.214 GB │ 4.214 GB │ 4.214 GB │ │ +│ │ │ 45442580 │ 45442580 │ 45442580 │ 45442580 │ │ +│ │ │ 4.198 GB │ 4.198 GB │ 4.198 GB │ 4.198 GB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 1110969 │ 1110969 │ 1110969 │ 1110969 │ │ -│ │ │ 1.11 GB │ 1.11 GB │ 1.11 GB │ 1.11 GB │ │ +│ │ │ 1104002 │ 1104002 │ 1104002 │ 1104002 │ │ +│ │ │ 1.107 GB │ 1.107 GB │ 1.107 GB │ 1.107 GB │ │ │ │ │ shrink: │ │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 429 ms │ 451.8 ms │ 436.3 ms │ 437.1 ms │ 100 │ 100 -│ │ │ 477.8 KB/s │ 453.7 KB/s │ 469.8 KB/s │ 468.9 KB/s │ │ +│ │ │ ╰─ commonmark_spec 433.6 ms │ 449.9 ms │ 435.5 ms │ 436.9 ms │ 100 │ 100 +│ │ │ 472.8 KB/s │ 455.6 KB/s │ 470.6 KB/s │ 469.1 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 15412977 │ 15412977 │ 15412977 │ 15412977 │ │ -│ │ │ 1.06 GB │ 1.06 GB │ 1.06 GB │ 1.06 GB │ │ +│ │ │ 15311639 │ 15311639 │ 15311639 │ 15311639 │ │ +│ │ │ 1.053 GB │ 1.053 GB │ 1.053 GB │ 1.053 GB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 15412978 │ 15412978 │ 15412978 │ 15412978 │ │ -│ │ │ 1.441 GB │ 1.441 GB │ 1.441 GB │ 1.441 GB │ │ +│ │ │ 15311640 │ 15311640 │ 15311640 │ 15311640 │ │ +│ │ │ 1.432 GB │ 1.432 GB │ 1.432 GB │ 1.432 GB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 366180 │ 366180 │ 366180 │ 366180 │ │ -│ │ │ 381.2 MB │ 381.2 MB │ 381.2 MB │ 381.2 MB │ │ +│ │ │ 362827 │ 362827 │ 362827 │ 362827 │ │ +│ │ │ 378.8 MB │ 378.8 MB │ 378.8 MB │ 378.8 MB │ │ │ │ │ shrink: │ │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ commonmark_spec 184.2 ms │ 197.6 ms │ 188 ms │ 188.8 ms │ 100 │ 100 -│ │ 1.112 MB/s │ 1.037 MB/s │ 1.09 MB/s │ 1.085 MB/s │ │ +│ │ ╰─ commonmark_spec 183.4 ms │ 191.4 ms │ 183.9 ms │ 184.3 ms │ 100 │ 100 +│ │ 1.117 MB/s │ 1.071 MB/s │ 1.114 MB/s │ 1.112 MB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 6760824 │ 6760824 │ 6760824 │ 6760824 │ │ -│ │ 466.3 MB │ 466.3 MB │ 466.3 MB │ 466.3 MB │ │ +│ │ 6592447 │ 6592447 │ 6592447 │ 6592447 │ │ +│ │ 454.8 MB │ 454.8 MB │ 454.8 MB │ 454.8 MB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 6760825 │ 6760825 │ 6760825 │ 6760825 │ │ -│ │ 630.1 MB │ 630.1 MB │ 630.1 MB │ 630.1 MB │ │ +│ │ 6592448 │ 6592448 │ 6592448 │ 6592448 │ │ +│ │ 614.9 MB │ 614.9 MB │ 614.9 MB │ 614.9 MB │ │ │ │ grow: │ │ │ │ │ -│ │ 156975 │ 156975 │ 156975 │ 156975 │ │ -│ │ 163.5 MB │ 163.5 MB │ 163.5 MB │ 163.5 MB │ │ +│ │ 153354 │ 153354 │ 153354 │ 153354 │ │ +│ │ 159.9 MB │ 159.9 MB │ 159.9 MB │ 159.9 MB │ │ │ │ shrink: │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ ├─ tiktoken │ │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 1.048 s │ 1.077 s │ 1.051 s │ 1.053 s │ 100 │ 100 -│ │ │ 195.6 KB/s │ 190.2 KB/s │ 194.9 KB/s │ 194.5 KB/s │ │ +│ │ │ ╰─ commonmark_spec 977.1 ms │ 1.351 s │ 1.043 s │ 1.032 s │ 100 │ 100 +│ │ │ 209.8 KB/s │ 151.6 KB/s │ 196.4 KB/s │ 198.5 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 6463171 │ 6463171 │ 6463171 │ 6463171 │ │ -│ │ │ 445.9 MB │ 445.9 MB │ 445.9 MB │ 445.9 MB │ │ +│ │ │ 6447823 │ 6447823 │ 6447823 │ 6447823 │ │ +│ │ │ 444.6 MB │ 444.6 MB │ 444.6 MB │ 444.6 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 6774679 │ 6774679 │ 6774679 │ 6774679 │ │ -│ │ │ 796 MB │ 796 MB │ 796 MB │ 796 MB │ │ +│ │ │ 6759331 │ 6759331 │ 6759331 │ 6759331 │ │ +│ │ │ 793.4 MB │ 793.4 MB │ 793.4 MB │ 793.4 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 1804436 │ 1804436 │ 1804436 │ 1804436 │ │ -│ │ │ 331.5 MB │ 331.5 MB │ 331.5 MB │ 331.5 MB │ │ +│ │ │ 1798544 │ 1798544 │ 1798544 │ 1798544 │ │ +│ │ │ 330.2 MB │ 330.2 MB │ 330.2 MB │ 330.2 MB │ │ │ │ │ shrink: │ │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ├─ 1024 │ │ │ │ │ -│ │ │ ╰─ commonmark_spec 281.2 ms │ 295.1 ms │ 287.3 ms │ 287.1 ms │ 100 │ 100 -│ │ │ 728.8 KB/s │ 694.5 KB/s │ 713.3 KB/s │ 713.9 KB/s │ │ +│ │ │ ╰─ commonmark_spec 260.4 ms │ 315.6 ms │ 263 ms │ 265.8 ms │ 100 │ 100 +│ │ │ 787.2 KB/s │ 649.5 KB/s │ 779.2 KB/s │ 771.3 KB/s │ │ │ │ │ alloc: │ │ │ │ │ -│ │ │ 2074050 │ 2074050 │ 2074050 │ 2074050 │ │ -│ │ │ 140.1 MB │ 140.1 MB │ 140.1 MB │ 140.1 MB │ │ +│ │ │ 2065207 │ 2065207 │ 2065207 │ 2065207 │ │ +│ │ │ 139.5 MB │ 139.5 MB │ 139.5 MB │ 139.5 MB │ │ │ │ │ dealloc: │ │ │ │ │ -│ │ │ 2385558 │ 2385558 │ 2385558 │ 2385558 │ │ -│ │ │ 259.9 MB │ 259.9 MB │ 259.9 MB │ 259.9 MB │ │ +│ │ │ 2376715 │ 2376715 │ 2376715 │ 2376715 │ │ +│ │ │ 258.9 MB │ 258.9 MB │ 258.9 MB │ 258.9 MB │ │ │ │ │ grow: │ │ │ │ │ -│ │ │ 584202 │ 584202 │ 584202 │ 584202 │ │ -│ │ │ 101.3 MB │ 101.3 MB │ 101.3 MB │ 101.3 MB │ │ +│ │ │ 581674 │ 581674 │ 581674 │ 581674 │ │ +│ │ │ 100.8 MB │ 100.8 MB │ 100.8 MB │ 100.8 MB │ │ │ │ │ shrink: │ │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ │ ╰─ 16384 │ │ │ │ │ -│ │ ╰─ commonmark_spec 105 ms │ 114 ms │ 107.7 ms │ 107.5 ms │ 100 │ 100 -│ │ 1.952 MB/s │ 1.797 MB/s │ 1.902 MB/s │ 1.906 MB/s │ │ +│ │ ╰─ commonmark_spec 94.4 ms │ 321 ms │ 95.6 ms │ 99.33 ms │ 100 │ 100 +│ │ 2.171 MB/s │ 638.5 KB/s │ 2.144 MB/s │ 2.063 MB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 787983 │ 787983 │ 787983 │ 787983 │ │ -│ │ 53.45 MB │ 53.45 MB │ 53.45 MB │ 53.45 MB │ │ +│ │ 758152 │ 758152 │ 758152 │ 758152 │ │ +│ │ 51.43 MB │ 51.43 MB │ 51.43 MB │ 51.43 MB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 1099491 │ 1099491 │ 1099491 │ 1099491 │ │ -│ │ 111.5 MB │ 111.5 MB │ 111.5 MB │ 111.5 MB │ │ +│ │ 1069660 │ 1069660 │ 1069660 │ 1069660 │ │ +│ │ 108 MB │ 108 MB │ 108 MB │ 108 MB │ │ │ │ grow: │ │ │ │ │ -│ │ 223912 │ 223912 │ 223912 │ 223912 │ │ -│ │ 39.57 MB │ 39.57 MB │ 39.57 MB │ 39.57 MB │ │ +│ │ 215221 │ 215221 │ 215221 │ 215221 │ │ +│ │ 38.09 MB │ 38.09 MB │ 38.09 MB │ 38.09 MB │ │ │ │ shrink: │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ ╰─ tokenizers │ │ │ │ │ │ ├─ 64 │ │ │ │ │ -│ │ ╰─ commonmark_spec 2.013 s │ 2.261 s │ 2.044 s │ 2.063 s │ 100 │ 100 -│ │ 101.8 KB/s │ 90.67 KB/s │ 100.2 KB/s │ 99.36 KB/s │ │ +│ │ ╰─ commonmark_spec 1.878 s │ 2.213 s │ 1.938 s │ 1.95 s │ 100 │ 100 +│ │ 109.1 KB/s │ 92.63 KB/s │ 105.7 KB/s │ 105.1 KB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 46294685 │ 46294685 │ 46294685 │ 46294685 │ │ -│ │ 4.353 GB │ 4.353 GB │ 4.353 GB │ 4.353 GB │ │ +│ │ 46071208 │ 46071208 │ 46071208 │ 46071208 │ │ +│ │ 4.336 GB │ 4.336 GB │ 4.336 GB │ 4.336 GB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 46352738 │ 46352738 │ 46352738 │ 46352738 │ │ -│ │ 6.749 GB │ 6.749 GB │ 6.749 GB │ 6.749 GB │ │ +│ │ 46129261 │ 46129261 │ 46129261 │ 46129261 │ │ +│ │ 6.725 GB │ 6.725 GB │ 6.725 GB │ 6.725 GB │ │ │ │ grow: │ │ │ │ │ -│ │ 1551879 │ 1551879 │ 1551879 │ 1551879 │ │ -│ │ 2.391 GB │ 2.391 GB │ 2.391 GB │ 2.391 GB │ │ +│ │ 1520439 │ 1520439 │ 1520439 │ 1520439 │ │ +│ │ 2.384 GB │ 2.384 GB │ 2.384 GB │ 2.384 GB │ │ │ │ shrink: │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ ├─ 1024 │ │ │ │ │ -│ │ ╰─ commonmark_spec 604 ms │ 648.8 ms │ 609.9 ms │ 611.5 ms │ 100 │ 100 -│ │ 339.4 KB/s │ 315.9 KB/s │ 336.1 KB/s │ 335.2 KB/s │ │ +│ │ ╰─ commonmark_spec 558 ms │ 817.4 ms │ 569.7 ms │ 579.5 ms │ 100 │ 100 +│ │ 367.3 KB/s │ 250.8 KB/s │ 359.8 KB/s │ 353.7 KB/s │ │ │ │ alloc: │ │ │ │ │ -│ │ 15542414 │ 15542414 │ 15542414 │ 15542414 │ │ -│ │ 1.509 GB │ 1.509 GB │ 1.509 GB │ 1.509 GB │ │ +│ │ 15435139 │ 15435139 │ 15435139 │ 15435139 │ │ +│ │ 1.501 GB │ 1.501 GB │ 1.501 GB │ 1.501 GB │ │ │ │ dealloc: │ │ │ │ │ -│ │ 15600467 │ 15600467 │ 15600467 │ 15600467 │ │ -│ │ 2.336 GB │ 2.336 GB │ 2.336 GB │ 2.336 GB │ │ +│ │ 15493192 │ 15493192 │ 15493192 │ 15493192 │ │ +│ │ 2.323 GB │ 2.323 GB │ 2.323 GB │ 2.323 GB │ │ │ │ grow: │ │ │ │ │ -│ │ 357862 │ 357862 │ 357862 │ 357862 │ │ -│ │ 821.9 MB │ 821.9 MB │ 821.9 MB │ 821.9 MB │ │ +│ │ 345885 │ 345885 │ 345885 │ 345885 │ │ +│ │ 817.3 MB │ 817.3 MB │ 817.3 MB │ 817.3 MB │ │ │ │ shrink: │ │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ │ ╰─ 16384 │ │ │ │ │ -│ ╰─ commonmark_spec 261.3 ms │ 270.8 ms │ 262.8 ms │ 263.7 ms │ 100 │ 100 -│ 784.5 KB/s │ 757 KB/s │ 780 KB/s │ 777.4 KB/s │ │ +│ ╰─ commonmark_spec 241.4 ms │ 258.3 ms │ 242.9 ms │ 243.5 ms │ 100 │ 100 +│ 849.1 KB/s │ 793.5 KB/s │ 843.7 KB/s │ 841.7 KB/s │ │ │ alloc: │ │ │ │ │ -│ 6805983 │ 6805983 │ 6805983 │ 6805983 │ │ -│ 667.9 MB │ 667.9 MB │ 667.9 MB │ 667.9 MB │ │ +│ 6636037 │ 6636037 │ 6636037 │ 6636037 │ │ +│ 651.4 MB │ 651.4 MB │ 651.4 MB │ 651.4 MB │ │ │ dealloc: │ │ │ │ │ -│ 6864036 │ 6864036 │ 6864036 │ 6864036 │ │ -│ 1.044 GB │ 1.044 GB │ 1.044 GB │ 1.044 GB │ │ +│ 6694090 │ 6694090 │ 6694090 │ 6694090 │ │ +│ 1.019 GB │ 1.019 GB │ 1.019 GB │ 1.019 GB │ │ │ grow: │ │ │ │ │ -│ 122450 │ 122450 │ 122450 │ 122450 │ │ -│ 371.2 MB │ 371.2 MB │ 371.2 MB │ 371.2 MB │ │ +│ 118860 │ 118860 │ 118860 │ 118860 │ │ +│ 362.7 MB │ 362.7 MB │ 362.7 MB │ 362.7 MB │ │ │ shrink: │ │ │ │ │ │ 13 │ 13 │ 13 │ 13 │ │ │ 94 B │ 94 B │ 94 B │ 94 B │ │ ╰─ text │ │ │ │ │ ├─ characters │ │ │ │ │ │ ├─ 64 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 127.3 ms │ 138.4 ms │ 127.8 ms │ 128 ms │ 100 │ 100 - │ │ │ 1.284 MB/s │ 1.181 MB/s │ 1.279 MB/s │ 1.277 MB/s │ │ + │ │ ├─ romeo_and_juliet 126.7 ms │ 143.6 ms │ 128.1 ms │ 128.4 ms │ 100 │ 100 + │ │ │ 1.291 MB/s │ 1.139 MB/s │ 1.276 MB/s │ 1.274 MB/s │ │ │ │ │ alloc: │ │ │ │ │ - │ │ │ 11091 │ 11091 │ 11091 │ 11093 │ │ + │ │ │ 11090 │ 11090 │ 11090 │ 11092 │ │ │ │ │ 32.09 MB │ 32.09 MB │ 32.09 MB │ 32.09 MB │ │ │ │ │ dealloc: │ │ │ │ │ - │ │ │ 11092 │ 11092 │ 11092 │ 11093 │ │ + │ │ │ 11091 │ 11091 │ 11091 │ 11092 │ │ │ │ │ 120.8 MB │ 120.8 MB │ 120.8 MB │ 120.8 MB │ │ │ │ │ grow: │ │ │ │ │ │ │ │ 33184 │ 33184 │ 33184 │ 33184 │ │ @@ -356,8 +356,8 @@ chunk_size fastest │ slowest │ median │ │ │ shrink: │ │ │ │ │ │ │ │ 0 │ 0 │ 0 │ 0.05 │ │ │ │ │ 0 B │ 0 B │ 0 B │ 23.4 B │ │ - │ │ ╰─ room_with_a_view 102.8 ms │ 114.2 ms │ 103.1 ms │ 103.8 ms │ 100 │ 100 - │ │ 2.934 MB/s │ 2.642 MB/s │ 2.926 MB/s │ 2.906 MB/s │ │ + │ │ ╰─ room_with_a_view 102.3 ms │ 114.3 ms │ 102.7 ms │ 103.1 ms │ 100 │ 100 + │ │ 2.949 MB/s │ 2.64 MB/s │ 2.937 MB/s │ 2.925 MB/s │ │ │ │ alloc: │ │ │ │ │ │ │ 18124 │ 18124 │ 18124 │ 18124 │ │ │ │ 25.87 MB │ 25.87 MB │ 25.87 MB │ 25.87 MB │ │ @@ -368,8 +368,8 @@ chunk_size fastest │ slowest │ median │ │ 47956 │ 47956 │ 47956 │ 47956 │ │ │ │ 64.97 MB │ 64.97 MB │ 64.97 MB │ 64.97 MB │ │ │ ├─ 1024 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 7.058 ms │ 7.633 ms │ 7.151 ms │ 7.158 ms │ 100 │ 100 - │ │ │ 23.18 MB/s │ 21.43 MB/s │ 22.87 MB/s │ 22.85 MB/s │ │ + │ │ ├─ romeo_and_juliet 7.005 ms │ 7.297 ms │ 7.055 ms │ 7.058 ms │ 100 │ 100 + │ │ │ 23.35 MB/s │ 22.42 MB/s │ 23.19 MB/s │ 23.17 MB/s │ │ │ │ │ alloc: │ │ │ │ │ │ │ │ 573 │ 573 │ 573 │ 573 │ │ │ │ │ 1.634 MB │ 1.634 MB │ 1.634 MB │ 1.634 MB │ │ @@ -379,20 +379,20 @@ chunk_size fastest │ slowest │ median │ │ │ grow: │ │ │ │ │ │ │ │ 1712 │ 1712 │ 1712 │ 1712 │ │ │ │ │ 4.691 MB │ 4.691 MB │ 4.691 MB │ 4.691 MB │ │ - │ │ ╰─ room_with_a_view 6.349 ms │ 8.88 ms │ 6.397 ms │ 6.5 ms │ 100 │ 100 - │ │ 47.54 MB/s │ 33.99 MB/s │ 47.19 MB/s │ 46.44 MB/s │ │ + │ │ ╰─ room_with_a_view 6.317 ms │ 8.749 ms │ 6.358 ms │ 6.494 ms │ 100 │ 100 + │ │ 47.79 MB/s │ 34.5 MB/s │ 47.48 MB/s │ 46.48 MB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 1117 │ 1117 │ 1117 │ 1117 │ │ - │ │ 1.574 MB │ 1.574 MB │ 1.574 MB │ 1.574 MB │ │ + │ │ 1116 │ 1116 │ 1116 │ 1116 │ │ + │ │ 1.573 MB │ 1.573 MB │ 1.573 MB │ 1.573 MB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 1118 │ 1118 │ 1118 │ 1118 │ │ + │ │ 1117 │ 1117 │ 1117 │ 1117 │ │ │ │ 5.868 MB │ 5.868 MB │ 5.868 MB │ 5.868 MB │ │ │ │ grow: │ │ │ │ │ - │ │ 2940 │ 2940 │ 2940 │ 2940 │ │ - │ │ 3.992 MB │ 3.992 MB │ 3.992 MB │ 3.992 MB │ │ + │ │ 2941 │ 2941 │ 2941 │ 2941 │ │ + │ │ 3.993 MB │ 3.993 MB │ 3.993 MB │ 3.993 MB │ │ │ ╰─ 16384 │ │ │ │ │ - │ ├─ romeo_and_juliet 914.6 µs │ 1.117 ms │ 986.7 µs │ 976.8 µs │ 100 │ 100 - │ │ 178.8 MB/s │ 146.3 MB/s │ 165.8 MB/s │ 167.4 MB/s │ │ + │ ├─ romeo_and_juliet 910.2 µs │ 1.017 ms │ 925.4 µs │ 927.8 µs │ 100 │ 100 + │ │ 179.7 MB/s │ 160.7 MB/s │ 176.8 MB/s │ 176.3 MB/s │ │ │ │ alloc: │ │ │ │ │ │ │ 53 │ 53 │ 53 │ 53 │ │ │ │ 152.9 KB │ 152.9 KB │ 152.9 KB │ 152.9 KB │ │ @@ -402,8 +402,8 @@ chunk_size fastest │ slowest │ median │ │ grow: │ │ │ │ │ │ │ 162 │ 162 │ 162 │ 162 │ │ │ │ 642.8 KB │ 642.8 KB │ 642.8 KB │ 642.8 KB │ │ - │ ╰─ room_with_a_view 867.1 µs │ 991.9 µs │ 888.1 µs │ 901.2 µs │ 100 │ 100 - │ 348.1 MB/s │ 304.3 MB/s │ 339.9 MB/s │ 335 MB/s │ │ + │ ╰─ room_with_a_view 863.2 µs │ 910.6 µs │ 869.1 µs │ 869.9 µs │ 100 │ 100 + │ 349.7 MB/s │ 331.5 MB/s │ 347.3 MB/s │ 347 MB/s │ │ │ alloc: │ │ │ │ │ │ 102 │ 102 │ 102 │ 102 │ │ │ 158.1 KB │ 158.1 KB │ 158.1 KB │ 158.1 KB │ │ @@ -415,212 +415,212 @@ chunk_size fastest │ slowest │ median │ 454 KB │ 454 KB │ 454 KB │ 454 KB │ │ ├─ rust_tokenizers │ │ │ │ │ │ ├─ 64 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 796.3 ms │ 827.6 ms │ 806.3 ms │ 809.8 ms │ 100 │ 100 - │ │ │ 205.4 KB/s │ 197.6 KB/s │ 202.9 KB/s │ 202 KB/s │ │ + │ │ ├─ romeo_and_juliet 773.7 ms │ 895.4 ms │ 810.8 ms │ 817.6 ms │ 100 │ 100 + │ │ │ 211.4 KB/s │ 182.7 KB/s │ 201.7 KB/s │ 200.1 KB/s │ │ │ │ │ alloc: │ │ │ │ │ - │ │ │ 22964285 │ 22964285 │ 22964285 │ 22964285 │ │ - │ │ │ 1.727 GB │ 1.727 GB │ 1.727 GB │ 1.727 GB │ │ + │ │ │ 22899296 │ 22899296 │ 22899296 │ 22899296 │ │ + │ │ │ 1.723 GB │ 1.723 GB │ 1.723 GB │ 1.723 GB │ │ │ │ │ dealloc: │ │ │ │ │ - │ │ │ 22964286 │ 22964286 │ 22964286 │ 22964286 │ │ - │ │ │ 2.25 GB │ 2.25 GB │ 2.25 GB │ 2.25 GB │ │ + │ │ │ 22899297 │ 22899297 │ 22899297 │ 22899297 │ │ + │ │ │ 2.245 GB │ 2.245 GB │ 2.245 GB │ 2.245 GB │ │ │ │ │ grow: │ │ │ │ │ - │ │ │ 739475 │ 739475 │ 739475 │ 739475 │ │ - │ │ │ 522.7 MB │ 522.7 MB │ 522.7 MB │ 522.7 MB │ │ - │ │ ╰─ room_with_a_view 1.238 s │ 1.337 s │ 1.26 s │ 1.265 s │ 100 │ 100 - │ │ 243.7 KB/s │ 225.6 KB/s │ 239.4 KB/s │ 238.5 KB/s │ │ + │ │ │ 735753 │ 735753 │ 735753 │ 735753 │ │ + │ │ │ 522 MB │ 522 MB │ 522 MB │ 522 MB │ │ + │ │ ╰─ room_with_a_view 1.185 s │ 1.527 s │ 1.211 s │ 1.221 s │ 100 │ 100 + │ │ 254.7 KB/s │ 197.6 KB/s │ 249.1 KB/s │ 247.1 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 35100997 │ 35100997 │ 35100997 │ 35100997 │ │ - │ │ 2.755 GB │ 2.755 GB │ 2.755 GB │ 2.755 GB │ │ + │ │ 35054306 │ 35054306 │ 35054306 │ 35054306 │ │ + │ │ 2.751 GB │ 2.751 GB │ 2.751 GB │ 2.751 GB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 35100998 │ 35100998 │ 35100998 │ 35100998 │ │ - │ │ 3.539 GB │ 3.539 GB │ 3.539 GB │ 3.539 GB │ │ + │ │ 35054307 │ 35054307 │ 35054307 │ 35054307 │ │ + │ │ 3.535 GB │ 3.535 GB │ 3.535 GB │ 3.535 GB │ │ │ │ grow: │ │ │ │ │ - │ │ 1345341 │ 1345341 │ 1345341 │ 1345341 │ │ - │ │ 784.2 MB │ 784.2 MB │ 784.2 MB │ 784.2 MB │ │ + │ │ 1343271 │ 1343271 │ 1343271 │ 1343271 │ │ + │ │ 783.8 MB │ 783.8 MB │ 783.8 MB │ 783.8 MB │ │ │ ├─ 1024 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 233.5 ms │ 247.2 ms │ 238.6 ms │ 238.5 ms │ 100 │ 100 - │ │ │ 700.5 KB/s │ 661.7 KB/s │ 685.5 KB/s │ 685.9 KB/s │ │ + │ │ ├─ romeo_and_juliet 219.4 ms │ 483.3 ms │ 231.3 ms │ 233.2 ms │ 100 │ 100 + │ │ │ 745.5 KB/s │ 338.5 KB/s │ 707.1 KB/s │ 701.6 KB/s │ │ │ │ │ alloc: │ │ │ │ │ - │ │ │ 6841781 │ 6841781 │ 6841781 │ 6841781 │ │ - │ │ │ 512.4 MB │ 512.4 MB │ 512.4 MB │ 512.4 MB │ │ + │ │ │ 6803775 │ 6803775 │ 6803775 │ 6803775 │ │ + │ │ │ 509.6 MB │ 509.6 MB │ 509.6 MB │ 509.6 MB │ │ │ │ │ dealloc: │ │ │ │ │ - │ │ │ 6841782 │ 6841782 │ 6841782 │ 6841782 │ │ - │ │ │ 666.1 MB │ 666.1 MB │ 666.1 MB │ 666.1 MB │ │ + │ │ │ 6803776 │ 6803776 │ 6803776 │ 6803776 │ │ + │ │ │ 662.5 MB │ 662.5 MB │ 662.5 MB │ 662.5 MB │ │ │ │ │ grow: │ │ │ │ │ - │ │ │ 213683 │ 213683 │ 213683 │ 213683 │ │ - │ │ │ 153.5 MB │ 153.5 MB │ 153.5 MB │ 153.5 MB │ │ - │ │ ╰─ room_with_a_view 500.2 ms │ 516.3 ms │ 505.5 ms │ 506 ms │ 100 │ 100 - │ │ 603.5 KB/s │ 584.6 KB/s │ 597.2 KB/s │ 596.6 KB/s │ │ + │ │ │ 211785 │ 211785 │ 211785 │ 211785 │ │ + │ │ │ 152.7 MB │ 152.7 MB │ 152.7 MB │ 152.7 MB │ │ + │ │ ╰─ room_with_a_view 476.4 ms │ 505.2 ms │ 477.7 ms │ 480.1 ms │ 100 │ 100 + │ │ 633.6 KB/s │ 597.5 KB/s │ 631.9 KB/s │ 628.7 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 14350869 │ 14350869 │ 14350869 │ 14350869 │ │ - │ │ 1.121 GB │ 1.121 GB │ 1.121 GB │ 1.121 GB │ │ + │ │ 14271884 │ 14271884 │ 14271884 │ 14271884 │ │ + │ │ 1.115 GB │ 1.115 GB │ 1.115 GB │ 1.115 GB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 14350870 │ 14350870 │ 14350870 │ 14350870 │ │ - │ │ 1.435 GB │ 1.435 GB │ 1.435 GB │ 1.435 GB │ │ + │ │ 14271885 │ 14271885 │ 14271885 │ 14271885 │ │ + │ │ 1.427 GB │ 1.427 GB │ 1.427 GB │ 1.427 GB │ │ │ │ grow: │ │ │ │ │ - │ │ 523890 │ 523890 │ 523890 │ 523890 │ │ - │ │ 313.6 MB │ 313.6 MB │ 313.6 MB │ 313.6 MB │ │ + │ │ 519557 │ 519557 │ 519557 │ 519557 │ │ + │ │ 311.9 MB │ 311.9 MB │ 311.9 MB │ 311.9 MB │ │ │ ╰─ 16384 │ │ │ │ │ - │ ├─ romeo_and_juliet 119 ms │ 131 ms │ 119.5 ms │ 120.1 ms │ 100 │ 100 - │ │ 1.374 MB/s │ 1.248 MB/s │ 1.368 MB/s │ 1.362 MB/s │ │ + │ ├─ romeo_and_juliet 117.6 ms │ 133.2 ms │ 118.1 ms │ 118.5 ms │ 100 │ 100 + │ │ 1.39 MB/s │ 1.228 MB/s │ 1.384 MB/s │ 1.379 MB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 3520004 │ 3520004 │ 3520004 │ 3520004 │ │ - │ │ 263.3 MB │ 263.3 MB │ 263.3 MB │ 263.3 MB │ │ + │ │ 3613498 │ 3613498 │ 3613498 │ 3613498 │ │ + │ │ 270.4 MB │ 270.4 MB │ 270.4 MB │ 270.4 MB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 3520005 │ 3520005 │ 3520005 │ 3520005 │ │ - │ │ 348.9 MB │ 348.9 MB │ 348.9 MB │ 348.9 MB │ │ + │ │ 3613499 │ 3613499 │ 3613499 │ 3613499 │ │ + │ │ 357.6 MB │ 357.6 MB │ 357.6 MB │ 357.6 MB │ │ │ │ grow: │ │ │ │ │ - │ │ 105901 │ 105901 │ 105901 │ 105901 │ │ - │ │ 85.36 MB │ 85.36 MB │ 85.36 MB │ 85.36 MB │ │ - │ ╰─ room_with_a_view 191 ms │ 198.3 ms │ 191.5 ms │ 191.8 ms │ 100 │ 100 - │ 1.58 MB/s │ 1.522 MB/s │ 1.576 MB/s │ 1.574 MB/s │ │ + │ │ 108374 │ 108374 │ 108374 │ 108374 │ │ + │ │ 87.05 MB │ 87.05 MB │ 87.05 MB │ 87.05 MB │ │ + │ ╰─ room_with_a_view 186.3 ms │ 202.1 ms │ 195.6 ms │ 192 ms │ 100 │ 100 + │ 1.619 MB/s │ 1.493 MB/s │ 1.542 MB/s │ 1.571 MB/s │ │ │ alloc: │ │ │ │ │ - │ 5451823 │ 5451823 │ 5451823 │ 5451823 │ │ - │ 425.7 MB │ 425.7 MB │ 425.7 MB │ 425.7 MB │ │ + │ 5459565 │ 5459565 │ 5459565 │ 5459565 │ │ + │ 426.4 MB │ 426.4 MB │ 426.4 MB │ 426.4 MB │ │ │ dealloc: │ │ │ │ │ - │ 5451824 │ 5451824 │ 5451824 │ 5451824 │ │ - │ 542.3 MB │ 542.3 MB │ 542.3 MB │ 542.3 MB │ │ + │ 5459566 │ 5459566 │ 5459566 │ 5459566 │ │ + │ 544.1 MB │ 544.1 MB │ 544.1 MB │ 544.1 MB │ │ │ grow: │ │ │ │ │ - │ 195316 │ 195316 │ 195316 │ 195316 │ │ - │ 116.3 MB │ 116.3 MB │ 116.3 MB │ 116.3 MB │ │ + │ 195530 │ 195530 │ 195530 │ 195530 │ │ + │ 117.3 MB │ 117.3 MB │ 117.3 MB │ 117.3 MB │ │ ├─ tiktoken │ │ │ │ │ │ ├─ 64 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 744.6 ms │ 758.1 ms │ 749.6 ms │ 749.9 ms │ 100 │ 100 - │ │ │ 219.7 KB/s │ 215.8 KB/s │ 218.2 KB/s │ 218.1 KB/s │ │ + │ │ ├─ romeo_and_juliet 696.1 ms │ 757.2 ms │ 716.4 ms │ 722.1 ms │ 100 │ 100 + │ │ │ 235 KB/s │ 216 KB/s │ 228.3 KB/s │ 226.5 KB/s │ │ │ │ │ alloc: │ │ │ │ │ - │ │ │ 6568864 │ 6568864 │ 6568864 │ 6568864 │ │ - │ │ │ 415.1 MB │ 415.1 MB │ 415.1 MB │ 415.1 MB │ │ + │ │ │ 6548486 │ 6548486 │ 6548486 │ 6548486 │ │ + │ │ │ 413.8 MB │ 413.8 MB │ 413.8 MB │ 413.8 MB │ │ │ │ │ dealloc: │ │ │ │ │ - │ │ │ 6880372 │ 6880372 │ 6880372 │ 6880372 │ │ - │ │ │ 683 MB │ 683 MB │ 683 MB │ 683 MB │ │ + │ │ │ 6859994 │ 6859994 │ 6859994 │ 6859994 │ │ + │ │ │ 681.2 MB │ 681.2 MB │ 681.2 MB │ 681.2 MB │ │ │ │ │ grow: │ │ │ │ │ - │ │ │ 1838047 │ 1838047 │ 1838047 │ 1838047 │ │ - │ │ │ 249.4 MB │ 249.4 MB │ 249.4 MB │ 249.4 MB │ │ - │ │ ╰─ room_with_a_view 1.009 s │ 1.113 s │ 1.04 s │ 1.04 s │ 100 │ 100 - │ │ 299.2 KB/s │ 271.2 KB/s │ 290.1 KB/s │ 290 KB/s │ │ + │ │ │ 1832701 │ 1832701 │ 1832701 │ 1832701 │ │ + │ │ │ 248.9 MB │ 248.9 MB │ 248.9 MB │ 248.9 MB │ │ + │ │ ╰─ room_with_a_view 942 ms │ 1.31 s │ 963 ms │ 973.2 ms │ 100 │ 100 + │ │ 320.4 KB/s │ 230.4 KB/s │ 313.5 KB/s │ 310.1 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 8945581 │ 8945581 │ 8945581 │ 8945581 │ │ - │ │ 563.3 MB │ 563.3 MB │ 563.3 MB │ 563.3 MB │ │ + │ │ 8932481 │ 8932481 │ 8932481 │ 8932481 │ │ + │ │ 562.5 MB │ 562.5 MB │ 562.5 MB │ 562.5 MB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 9257089 │ 9257089 │ 9257089 │ 9257089 │ │ - │ │ 968.3 MB │ 968.3 MB │ 968.3 MB │ 968.3 MB │ │ + │ │ 9243989 │ 9243989 │ 9243989 │ 9243989 │ │ + │ │ 967.2 MB │ 967.2 MB │ 967.2 MB │ 967.2 MB │ │ │ │ grow: │ │ │ │ │ - │ │ 2960518 │ 2960518 │ 2960518 │ 2960518 │ │ - │ │ 386.3 MB │ 386.3 MB │ 386.3 MB │ 386.3 MB │ │ + │ │ 2957828 │ 2957828 │ 2957828 │ 2957828 │ │ + │ │ 386 MB │ 386 MB │ 386 MB │ 386 MB │ │ │ ├─ 1024 │ │ │ │ │ - │ │ ├─ romeo_and_juliet 210.2 ms │ 224.7 ms │ 211.9 ms │ 213.1 ms │ 100 │ 100 - │ │ │ 778 KB/s │ 728 KB/s │ 772 KB/s │ 767.5 KB/s │ │ + │ │ ├─ romeo_and_juliet 194.1 ms │ 209.6 ms │ 196.1 ms │ 196.5 ms │ 100 │ 100 + │ │ │ 842.9 KB/s │ 780.4 KB/s │ 834.2 KB/s │ 832.3 KB/s │ │ │ │ │ alloc: │ │ │ │ │ - │ │ │ 1892272 │ 1892272 │ 1892272 │ 1892272 │ │ - │ │ │ 118 MB │ 118 MB │ 118 MB │ 118 MB │ │ + │ │ │ 1884767 │ 1884767 │ 1884767 │ 1884767 │ │ + │ │ │ 117.5 MB │ 117.5 MB │ 117.5 MB │ 117.5 MB │ │ │ │ │ dealloc: │ │ │ │ │ - │ │ │ 2203780 │ 2203780 │ 2203780 │ 2203780 │ │ - │ │ │ 204.8 MB │ 204.8 MB │ 204.8 MB │ 204.8 MB │ │ + │ │ │ 2196275 │ 2196275 │ 2196275 │ 2196275 │ │ + │ │ │ 204.1 MB │ 204.1 MB │ 204.1 MB │ 204.1 MB │ │ │ │ │ grow: │ │ │ │ │ - │ │ │ 530850 │ 530850 │ 530850 │ 530850 │ │ - │ │ │ 68.38 MB │ 68.38 MB │ 68.38 MB │ 68.38 MB │ │ - │ │ ╰─ room_with_a_view 413.8 ms │ 433.5 ms │ 422.9 ms │ 421.7 ms │ 100 │ 100 - │ │ 729.4 KB/s │ 696.3 KB/s │ 713.8 KB/s │ 715.8 KB/s │ │ + │ │ │ 528541 │ 528541 │ 528541 │ 528541 │ │ + │ │ │ 68.09 MB │ 68.09 MB │ 68.09 MB │ 68.09 MB │ │ + │ │ ╰─ room_with_a_view 387.9 ms │ 428 ms │ 412.7 ms │ 408.4 ms │ 100 │ 100 + │ │ 778.2 KB/s │ 705.3 KB/s │ 731.4 KB/s │ 739.1 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 3709836 │ 3709836 │ 3709836 │ 3709836 │ │ - │ │ 231.7 MB │ 231.7 MB │ 231.7 MB │ 231.7 MB │ │ + │ │ 3683605 │ 3683605 │ 3683605 │ 3683605 │ │ + │ │ 230 MB │ 230 MB │ 230 MB │ 230 MB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 4021344 │ 4021344 │ 4021344 │ 4021344 │ │ - │ │ 406 MB │ 406 MB │ 406 MB │ 406 MB │ │ + │ │ 3995113 │ 3995113 │ 3995113 │ 3995113 │ │ + │ │ 403.3 MB │ 403.3 MB │ 403.3 MB │ 403.3 MB │ │ │ │ grow: │ │ │ │ │ - │ │ 1221964 │ 1221964 │ 1221964 │ 1221964 │ │ - │ │ 155.7 MB │ 155.7 MB │ 155.7 MB │ 155.7 MB │ │ + │ │ 1212665 │ 1212665 │ 1212665 │ 1212665 │ │ + │ │ 154.6 MB │ 154.6 MB │ 154.6 MB │ 154.6 MB │ │ │ ╰─ 16384 │ │ │ │ │ - │ ├─ romeo_and_juliet 107.4 ms │ 120.9 ms │ 111.1 ms │ 111.4 ms │ 100 │ 100 - │ │ 1.522 MB/s │ 1.352 MB/s │ 1.471 MB/s │ 1.468 MB/s │ │ + │ ├─ romeo_and_juliet 99 ms │ 347 ms │ 107.3 ms │ 110 ms │ 100 │ 100 + │ │ 1.652 MB/s │ 471.4 KB/s │ 1.523 MB/s │ 1.487 MB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 956275 │ 956275 │ 956275 │ 956275 │ │ - │ │ 59.56 MB │ 59.56 MB │ 59.56 MB │ 59.56 MB │ │ + │ │ 953135 │ 953135 │ 953135 │ 953135 │ │ + │ │ 59.36 MB │ 59.36 MB │ 59.36 MB │ 59.36 MB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 1267783 │ 1267783 │ 1267783 │ 1267783 │ │ - │ │ 112.5 MB │ 112.5 MB │ 112.5 MB │ 112.5 MB │ │ + │ │ 1264643 │ 1264643 │ 1264643 │ 1264643 │ │ + │ │ 112.2 MB │ 112.2 MB │ 112.2 MB │ 112.2 MB │ │ │ │ grow: │ │ │ │ │ - │ │ 266929 │ 266929 │ 266929 │ 266929 │ │ - │ │ 34.48 MB │ 34.48 MB │ 34.48 MB │ 34.48 MB │ │ - │ ╰─ room_with_a_view 148.3 ms │ 163.6 ms │ 151.4 ms │ 152 ms │ 100 │ 100 - │ 2.035 MB/s │ 1.845 MB/s │ 1.993 MB/s │ 1.985 MB/s │ │ + │ │ 265947 │ 265947 │ 265947 │ 265947 │ │ + │ │ 34.35 MB │ 34.35 MB │ 34.35 MB │ 34.35 MB │ │ + │ ╰─ room_with_a_view 136.1 ms │ 151.6 ms │ 137.4 ms │ 138.2 ms │ 100 │ 100 + │ 2.217 MB/s │ 1.99 MB/s │ 2.196 MB/s │ 2.183 MB/s │ │ │ alloc: │ │ │ │ │ - │ 1309367 │ 1309367 │ 1309367 │ 1309367 │ │ - │ 81.75 MB │ 81.75 MB │ 81.75 MB │ 81.75 MB │ │ + │ 1291424 │ 1291424 │ 1291424 │ 1291424 │ │ + │ 80.63 MB │ 80.63 MB │ 80.63 MB │ 80.63 MB │ │ │ dealloc: │ │ │ │ │ - │ 1620875 │ 1620875 │ 1620875 │ 1620875 │ │ - │ 155.2 MB │ 155.2 MB │ 155.2 MB │ 155.2 MB │ │ + │ 1602932 │ 1602932 │ 1602932 │ 1602932 │ │ + │ 153.3 MB │ 153.3 MB │ 153.3 MB │ 153.3 MB │ │ │ grow: │ │ │ │ │ - │ 429953 │ 429953 │ 429953 │ 429953 │ │ - │ 54.84 MB │ 54.84 MB │ 54.84 MB │ 54.84 MB │ │ + │ 423983 │ 423983 │ 423983 │ 423983 │ │ + │ 54.08 MB │ 54.08 MB │ 54.08 MB │ 54.08 MB │ │ ╰─ tokenizers │ │ │ │ │ ├─ 64 │ │ │ │ │ - │ ├─ romeo_and_juliet 1.438 s │ 1.512 s │ 1.461 s │ 1.462 s │ 100 │ 100 - │ │ 113.7 KB/s │ 108.1 KB/s │ 111.9 KB/s │ 111.9 KB/s │ │ + │ ├─ romeo_and_juliet 1.331 s │ 1.44 s │ 1.363 s │ 1.368 s │ 100 │ 100 + │ │ 122.9 KB/s │ 113.6 KB/s │ 120 KB/s │ 119.5 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 29799042 │ 29799042 │ 29799042 │ 29799042 │ │ - │ │ 3.639 GB │ 3.639 GB │ 3.639 GB │ 3.639 GB │ │ + │ │ 29662372 │ 29662372 │ 29662372 │ 29662372 │ │ + │ │ 3.627 GB │ 3.627 GB │ 3.627 GB │ 3.627 GB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 29857095 │ 29857095 │ 29857095 │ 29857095 │ │ - │ │ 5.296 GB │ 5.296 GB │ 5.296 GB │ 5.296 GB │ │ + │ │ 29720425 │ 29720425 │ 29720425 │ 29720425 │ │ + │ │ 5.281 GB │ 5.281 GB │ 5.281 GB │ 5.281 GB │ │ │ │ grow: │ │ │ │ │ - │ │ 445155 │ 445155 │ 445155 │ 445155 │ │ - │ │ 1.652 GB │ 1.652 GB │ 1.652 GB │ 1.652 GB │ │ - │ ╰─ room_with_a_view 2.031 s │ 2.103 s │ 2.061 s │ 2.058 s │ 100 │ 100 - │ 148.5 KB/s │ 143.5 KB/s │ 146.4 KB/s │ 146.6 KB/s │ │ + │ │ 421592 │ 421592 │ 421592 │ 421592 │ │ + │ │ 1.649 GB │ 1.649 GB │ 1.649 GB │ 1.649 GB │ │ + │ ╰─ room_with_a_view 1.884 s │ 2.312 s │ 1.936 s │ 1.958 s │ 100 │ 100 + │ 160.2 KB/s │ 130.5 KB/s │ 155.9 KB/s │ 154.1 KB/s │ │ │ alloc: │ │ │ │ │ - │ 41106206 │ 41106206 │ 41106206 │ 41106206 │ │ - │ 5.344 GB │ 5.344 GB │ 5.344 GB │ 5.344 GB │ │ + │ 40991214 │ 40991214 │ 40991214 │ 40991214 │ │ + │ 5.335 GB │ 5.335 GB │ 5.335 GB │ 5.335 GB │ │ │ dealloc: │ │ │ │ │ - │ 41164259 │ 41164259 │ 41164259 │ 41164259 │ │ - │ 7.719 GB │ 7.719 GB │ 7.719 GB │ 7.719 GB │ │ + │ 41049267 │ 41049267 │ 41049267 │ 41049267 │ │ + │ 7.708 GB │ 7.708 GB │ 7.708 GB │ 7.708 GB │ │ │ grow: │ │ │ │ │ - │ 674019 │ 674019 │ 674019 │ 674019 │ │ - │ 2.369 GB │ 2.369 GB │ 2.369 GB │ 2.369 GB │ │ + │ 663011 │ 663011 │ 663011 │ 663011 │ │ + │ 2.367 GB │ 2.367 GB │ 2.367 GB │ 2.367 GB │ │ ├─ 1024 │ │ │ │ │ - │ ├─ romeo_and_juliet 390.4 ms │ 408.1 ms │ 396 ms │ 395.9 ms │ 100 │ 100 - │ │ 419 KB/s │ 400.9 KB/s │ 413.1 KB/s │ 413.2 KB/s │ │ + │ ├─ romeo_and_juliet 360.6 ms │ 383.4 ms │ 365.3 ms │ 366.5 ms │ 100 │ 100 + │ │ 453.7 KB/s │ 426.7 KB/s │ 447.8 KB/s │ 446.3 KB/s │ │ │ │ alloc: │ │ │ │ │ - │ │ 8212456 │ 8212456 │ 8212456 │ 8212456 │ │ - │ │ 1.009 GB │ 1.009 GB │ 1.009 GB │ 1.009 GB │ │ + │ │ 8164497 │ 8164497 │ 8164497 │ 8164497 │ │ + │ │ 1.004 GB │ 1.004 GB │ 1.004 GB │ 1.004 GB │ │ │ │ dealloc: │ │ │ │ │ - │ │ 8270509 │ 8270509 │ 8270509 │ 8270509 │ │ - │ │ 1.469 GB │ 1.469 GB │ 1.469 GB │ 1.469 GB │ │ + │ │ 8222550 │ 8222550 │ 8222550 │ 8222550 │ │ + │ │ 1.461 GB │ 1.461 GB │ 1.461 GB │ 1.461 GB │ │ │ │ grow: │ │ │ │ │ - │ │ 67360 │ 67360 │ 67360 │ 67360 │ │ - │ │ 454.6 MB │ 454.6 MB │ 454.6 MB │ 454.6 MB │ │ - │ ╰─ room_with_a_view 811.3 ms │ 889 ms │ 832.2 ms │ 834.8 ms │ 100 │ 100 - │ 372 KB/s │ 339.6 KB/s │ 362.7 KB/s │ 361.6 KB/s │ │ + │ │ 63112 │ 63112 │ 63112 │ 63112 │ │ + │ │ 452.4 MB │ 452.4 MB │ 452.4 MB │ 452.4 MB │ │ + │ ╰─ room_with_a_view 747.7 ms │ 812.4 ms │ 757.2 ms │ 764.6 ms │ 100 │ 100 + │ 403.7 KB/s │ 371.5 KB/s │ 398.6 KB/s │ 394.8 KB/s │ │ │ alloc: │ │ │ │ │ - │ 16382110 │ 16382110 │ 16382110 │ 16382110 │ │ - │ 2.144 GB │ 2.144 GB │ 2.144 GB │ 2.144 GB │ │ + │ 16265591 │ 16265591 │ 16265591 │ 16265591 │ │ + │ 2.129 GB │ 2.129 GB │ 2.129 GB │ 2.129 GB │ │ │ dealloc: │ │ │ │ │ - │ 16440163 │ 16440163 │ 16440163 │ 16440163 │ │ - │ 3.103 GB │ 3.103 GB │ 3.103 GB │ 3.103 GB │ │ + │ 16323644 │ 16323644 │ 16323644 │ 16323644 │ │ + │ 3.081 GB │ 3.081 GB │ 3.081 GB │ 3.081 GB │ │ │ grow: │ │ │ │ │ - │ 116788 │ 116788 │ 116788 │ 116788 │ │ - │ 953.3 MB │ 953.3 MB │ 953.3 MB │ 953.3 MB │ │ + │ 108387 │ 108387 │ 108387 │ 108387 │ │ + │ 946.9 MB │ 946.9 MB │ 946.9 MB │ 946.9 MB │ │ ╰─ 16384 │ │ │ │ │ - ├─ romeo_and_juliet 202.1 ms │ 213 ms │ 204.1 ms │ 204.3 ms │ 100 │ 100 - │ 809.2 KB/s │ 767.8 KB/s │ 801.5 KB/s │ 800.7 KB/s │ │ + ├─ romeo_and_juliet 188.4 ms │ 452.2 ms │ 191.7 ms │ 195.7 ms │ 100 │ 100 + │ 868.2 KB/s │ 361.8 KB/s │ 853.3 KB/s │ 835.8 KB/s │ │ │ alloc: │ │ │ │ │ - │ 4290267 │ 4290267 │ 4290267 │ 4290267 │ │ - │ 527.6 MB │ 527.6 MB │ 527.6 MB │ 527.6 MB │ │ + │ 4276716 │ 4276716 │ 4276716 │ 4276716 │ │ + │ 525.9 MB │ 525.9 MB │ 525.9 MB │ 525.9 MB │ │ │ dealloc: │ │ │ │ │ - │ 4348320 │ 4348320 │ 4348320 │ 4348320 │ │ - │ 773.4 MB │ 773.4 MB │ 773.4 MB │ 773.4 MB │ │ + │ 4334769 │ 4334769 │ 4334769 │ 4334769 │ │ + │ 771 MB │ 771 MB │ 771 MB │ 771 MB │ │ │ grow: │ │ │ │ │ - │ 14855 │ 14855 │ 14855 │ 14855 │ │ - │ 241 MB │ 241 MB │ 241 MB │ 241 MB │ │ - ╰─ room_with_a_view 326.4 ms │ 338.8 ms │ 328.2 ms │ 328.9 ms │ 100 │ 100 - 924.8 KB/s │ 891.1 KB/s │ 919.8 KB/s │ 917.8 KB/s │ │ + │ 14324 │ 14324 │ 14324 │ 14324 │ │ + │ 240.2 MB │ 240.2 MB │ 240.2 MB │ 240.2 MB │ │ + ╰─ room_with_a_view 305.6 ms │ 340.1 ms │ 307.3 ms │ 309 ms │ 100 │ 100 + 987.8 KB/s │ 887.6 KB/s │ 982.3 KB/s │ 976.7 KB/s │ │ alloc: │ │ │ │ │ - 6566133 │ 6566133 │ 6566133 │ 6566133 │ │ - 860.8 MB │ 860.8 MB │ 860.8 MB │ 860.8 MB │ │ + 6625517 │ 6625517 │ 6625517 │ 6625517 │ │ + 868.7 MB │ 868.7 MB │ 868.7 MB │ 868.7 MB │ │ dealloc: │ │ │ │ │ - 6624186 │ 6624186 │ 6624186 │ 6624186 │ │ - 1.259 GB │ 1.259 GB │ 1.259 GB │ 1.259 GB │ │ + 6683570 │ 6683570 │ 6683570 │ 6683570 │ │ + 1.27 GB │ 1.27 GB │ 1.27 GB │ 1.27 GB │ │ grow: │ │ │ │ │ - 22546 │ 22546 │ 22546 │ 22546 │ │ - 393.8 MB │ 393.8 MB │ 393.8 MB │ 393.8 MB │ │ + 22087 │ 22087 │ 22087 │ 22087 │ │ + 397 MB │ 397 MB │ 397 MB │ 397 MB │ │ diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index c232365..cb35493 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -15,19 +15,16 @@ name = "semantic_text_splitter" crate-type = ["cdylib"] [dependencies] -auto_enums = "0.8.5" -pyo3 = { version = "0.22.0", features = ["abi3-py38"] } +pyo3 = { version = "0.22", features = ["abi3-py38"] } text-splitter = { path = "../..", features = [ "code", "markdown", "tiktoken-rs", "tokenizers", ] } -tiktoken-rs = "0.5.9" -tokenizers = { version = "0.19.1", default-features = false, features = [ - "onig", -] } -tree-sitter = "0.22.6" +tiktoken-rs = "0.5" +tokenizers = { version = "0.19", default-features = false, features = ["onig"] } +tree-sitter = "0.22" [lints] workspace = true diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs index 0e58fe7..bd8d410 100644 --- a/bindings/python/src/lib.rs +++ b/bindings/python/src/lib.rs @@ -5,7 +5,6 @@ use std::str::FromStr; -use auto_enums::auto_enum; use pyo3::{ exceptions::{PyException, PyValueError}, ffi, @@ -16,7 +15,7 @@ use text_splitter::{ Characters, ChunkCapacity, ChunkCapacityError, ChunkConfig, ChunkConfigError, ChunkSizer, CodeSplitter, CodeSplitterError, MarkdownSplitter, TextSplitter, }; -use tiktoken_rs::{get_bpe_from_model, CoreBPE}; +use tiktoken_rs::get_bpe_from_model; use tokenizers::Tokenizer; use tree_sitter::{ffi::TSLanguage, Language}; @@ -127,39 +126,18 @@ impl<'text> ByteToCharOffsetTracker<'text> { } } -#[allow(clippy::large_enum_variant)] -enum TextSplitterOptions { - Characters(TextSplitter), - CustomCallback(TextSplitter), - Huggingface(TextSplitter), - Tiktoken(TextSplitter), -} +/// Allows for dynamically choosing between different chunk sizers +struct Sizer(Box); -impl TextSplitterOptions { - #[auto_enum(Iterator)] - fn chunks<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunks(text), - Self::CustomCallback(splitter) => splitter.chunks(text), - Self::Huggingface(splitter) => splitter.chunks(text), - Self::Tiktoken(splitter) => splitter.chunks(text), - } +impl Sizer { + fn new(sizer: impl ChunkSizer + 'static + Send) -> Self { + Self(Box::new(sizer)) } +} - #[auto_enum(Iterator)] - fn chunk_indices<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunk_indices(text), - Self::CustomCallback(splitter) => splitter.chunk_indices(text), - Self::Huggingface(splitter) => splitter.chunk_indices(text), - Self::Tiktoken(splitter) => splitter.chunk_indices(text), - } +impl ChunkSizer for Sizer { + fn size(&self, chunk: &str) -> usize { + self.0.size(chunk) } } @@ -250,7 +228,7 @@ Args: */ #[pyclass(frozen, name = "TextSplitter")] struct PyTextSplitter { - splitter: TextSplitterOptions, + splitter: TextSplitter, } #[pymethods] @@ -259,12 +237,13 @@ impl PyTextSplitter { #[pyo3(signature = (capacity, overlap=0, trim=true))] fn new(capacity: PyChunkCapacity, overlap: usize, trim: bool) -> PyResult { Ok(Self { - splitter: TextSplitterOptions::Characters(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_trim(trim), - )), + .with_trim(trim) + .with_sizer(Sizer::new(Characters)), + ), }) } @@ -302,13 +281,13 @@ impl PyTextSplitter { Tokenizer::from_str(&json).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: TextSplitterOptions::Huggingface(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -340,18 +319,18 @@ impl PyTextSplitter { overlap: usize, trim: bool, ) -> PyResult { - let tokenizer = json + let tokenizer: Tokenizer = json .parse() .map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: TextSplitterOptions::Huggingface(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -386,13 +365,13 @@ impl PyTextSplitter { let tokenizer = Tokenizer::from_file(path).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: TextSplitterOptions::Huggingface(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -427,13 +406,13 @@ impl PyTextSplitter { get_bpe_from_model(model).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: TextSplitterOptions::Tiktoken(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -466,13 +445,13 @@ impl PyTextSplitter { trim: bool, ) -> PyResult { Ok(Self { - splitter: TextSplitterOptions::CustomCallback(TextSplitter::new( + splitter: TextSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(CustomCallback(callback)) + .with_sizer(Sizer::new(CustomCallback(callback))) .with_trim(trim), - )), + ), }) } @@ -535,42 +514,6 @@ impl PyTextSplitter { } } -#[allow(clippy::large_enum_variant)] -enum MarkdownSplitterOptions { - Characters(MarkdownSplitter), - CustomCallback(MarkdownSplitter), - Huggingface(MarkdownSplitter), - Tiktoken(MarkdownSplitter), -} - -impl MarkdownSplitterOptions { - #[auto_enum(Iterator)] - fn chunks<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunks(text), - Self::CustomCallback(splitter) => splitter.chunks(text), - Self::Huggingface(splitter) => splitter.chunks(text), - Self::Tiktoken(splitter) => splitter.chunks(text), - } - } - - #[auto_enum(Iterator)] - fn chunk_indices<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunk_indices(text), - Self::CustomCallback(splitter) => splitter.chunk_indices(text), - Self::Huggingface(splitter) => splitter.chunk_indices(text), - Self::Tiktoken(splitter) => splitter.chunk_indices(text), - } - } -} - /** Markdown splitter. Recursively splits chunks into the largest semantic units that fit within the chunk size. Also will attempt to merge neighboring chunks if they can fit within the given chunk size. @@ -660,7 +603,7 @@ Args: */ #[pyclass(frozen, name = "MarkdownSplitter")] struct PyMarkdownSplitter { - splitter: MarkdownSplitterOptions, + splitter: MarkdownSplitter, } #[pymethods] @@ -669,12 +612,13 @@ impl PyMarkdownSplitter { #[pyo3(signature = (capacity, overlap=0, trim=true))] fn new(capacity: PyChunkCapacity, overlap: usize, trim: bool) -> PyResult { Ok(Self { - splitter: MarkdownSplitterOptions::Characters(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(Characters)) .with_trim(trim), - )), + ), }) } @@ -712,13 +656,13 @@ impl PyMarkdownSplitter { Tokenizer::from_str(&json).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: MarkdownSplitterOptions::Huggingface(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -750,18 +694,18 @@ impl PyMarkdownSplitter { overlap: usize, trim: bool, ) -> PyResult { - let tokenizer = json + let tokenizer: Tokenizer = json .parse() .map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: MarkdownSplitterOptions::Huggingface(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -796,13 +740,13 @@ impl PyMarkdownSplitter { let tokenizer = Tokenizer::from_file(path).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: MarkdownSplitterOptions::Huggingface(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -837,13 +781,13 @@ impl PyMarkdownSplitter { get_bpe_from_model(model).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: MarkdownSplitterOptions::Tiktoken(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) + .with_sizer(Sizer::new(tokenizer)) .with_trim(trim), - )), + ), }) } @@ -876,13 +820,13 @@ impl PyMarkdownSplitter { trim: bool, ) -> PyResult { Ok(Self { - splitter: MarkdownSplitterOptions::CustomCallback(MarkdownSplitter::new( + splitter: MarkdownSplitter::new( ChunkConfig::new(ChunkCapacity::try_from(capacity)?) .with_overlap(overlap) .map_err(PyChunkConfigError)? - .with_sizer(CustomCallback(callback)) + .with_sizer(Sizer::new(CustomCallback(callback))) .with_trim(trim), - )), + ), }) } @@ -948,42 +892,6 @@ impl PyMarkdownSplitter { } } -#[allow(clippy::large_enum_variant)] -enum CodeSplitterOptions { - Characters(CodeSplitter), - CustomCallback(CodeSplitter), - Huggingface(CodeSplitter), - Tiktoken(CodeSplitter), -} - -impl CodeSplitterOptions { - #[auto_enum(Iterator)] - fn chunks<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunks(text), - Self::CustomCallback(splitter) => splitter.chunks(text), - Self::Huggingface(splitter) => splitter.chunks(text), - Self::Tiktoken(splitter) => splitter.chunks(text), - } - } - - #[auto_enum(Iterator)] - fn chunk_indices<'splitter, 'text: 'splitter>( - &'splitter self, - text: &'text str, - ) -> impl Iterator + 'splitter { - match self { - Self::Characters(splitter) => splitter.chunk_indices(text), - Self::CustomCallback(splitter) => splitter.chunk_indices(text), - Self::Huggingface(splitter) => splitter.chunk_indices(text), - Self::Tiktoken(splitter) => splitter.chunk_indices(text), - } - } -} - /** Code splitter. Recursively splits chunks into the largest semantic units that fit within the chunk size. Also will attempt to merge neighboring chunks if they can fit within the given chunk size. @@ -1085,7 +993,7 @@ Args: */ #[pyclass(frozen, name = "CodeSplitter")] struct PyCodeSplitter { - splitter: CodeSplitterOptions, + splitter: CodeSplitter, } impl PyCodeSplitter { @@ -1106,16 +1014,15 @@ impl PyCodeSplitter { trim: bool, ) -> PyResult { Ok(Self { - splitter: CodeSplitterOptions::Characters( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(Characters)) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1156,17 +1063,15 @@ impl PyCodeSplitter { Tokenizer::from_str(&json).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: CodeSplitterOptions::Huggingface( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(tokenizer)) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1201,22 +1106,20 @@ impl PyCodeSplitter { overlap: usize, trim: bool, ) -> PyResult { - let tokenizer = json + let tokenizer: Tokenizer = json .parse() .map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: CodeSplitterOptions::Huggingface( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(tokenizer)) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1254,17 +1157,15 @@ impl PyCodeSplitter { let tokenizer = Tokenizer::from_file(path).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: CodeSplitterOptions::Huggingface( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(tokenizer)) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1302,17 +1203,15 @@ impl PyCodeSplitter { get_bpe_from_model(model).map_err(|e| PyException::new_err(format!("{e}")))?; Ok(Self { - splitter: CodeSplitterOptions::Tiktoken( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_sizer(tokenizer) - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(tokenizer)) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1348,17 +1247,15 @@ impl PyCodeSplitter { trim: bool, ) -> PyResult { Ok(Self { - splitter: CodeSplitterOptions::CustomCallback( - CodeSplitter::new( - Self::load_language(language), - ChunkConfig::new(ChunkCapacity::try_from(capacity)?) - .with_overlap(overlap) - .map_err(PyChunkConfigError)? - .with_sizer(CustomCallback(callback)) - .with_trim(trim), - ) - .map_err(PyCodeSplitterError)?, - ), + splitter: CodeSplitter::new( + Self::load_language(language), + ChunkConfig::new(ChunkCapacity::try_from(capacity)?) + .with_overlap(overlap) + .map_err(PyChunkConfigError)? + .with_sizer(Sizer::new(CustomCallback(callback))) + .with_trim(trim), + ) + .map_err(PyCodeSplitterError)?, }) } @@ -1420,9 +1317,11 @@ impl PyCodeSplitter { #[doc = include_str!("../README.md")] #[pymodule] -fn semantic_text_splitter(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - Ok(()) +mod semantic_text_splitter { + #[pymodule_export] + use super::PyCodeSplitter; + #[pymodule_export] + use super::PyMarkdownSplitter; + #[pymodule_export] + use super::PyTextSplitter; } diff --git a/src/chunk_size.rs b/src/chunk_size.rs index 075d8b7..9b31f45 100644 --- a/src/chunk_size.rs +++ b/src/chunk_size.rs @@ -206,7 +206,7 @@ pub struct ChunkSize { impl ChunkSize { #[must_use] - fn new(fits: Ordering, size: usize) -> Self { + pub fn new(fits: Ordering, size: usize) -> Self { Self { fits, size } } @@ -437,6 +437,7 @@ where ) -> (Option, Option) { let mut semantic_level = None; let mut max_offset = None; + let max_size = self.chunk_config.capacity.max; // We assume that larger levels are also longer. We can skip lower levels if going to a higher level would result in a shorter text let levels_with_first_chunk = @@ -449,11 +450,15 @@ where }); for (level, str) in levels_with_first_chunk { - let chunk_size = self.check_capacity(offset, str, false); - // If this no longer fits, we use the level we are at. - if chunk_size.fits.is_gt() { - max_offset = Some(offset + str.len()); - break; + // Skip tokenizing levels that we know are too small anyway. + let len = str.len(); + if len > max_size { + let chunk_size = self.check_capacity(offset, str, false); + // If this no longer fits, we use the level we are at. + if chunk_size.fits.is_gt() { + max_offset = Some(offset + len); + break; + } } // Otherwise break up the text with the next level semantic_level = Some(level); diff --git a/src/splitter.rs b/src/splitter.rs index 3f4cbf2..cb289f0 100644 --- a/src/splitter.rs +++ b/src/splitter.rs @@ -503,6 +503,9 @@ where // Check if the last item fits if let Some(&(offset, str)) = self.next_sections.last() { let text_end = offset + str.len(); + if text_end < target_offset { + break; + } let chunk_size = self.chunk_sizer.check_capacity( offset, self.text.get(self.cursor..text_end).expect("Invalid range"), @@ -514,13 +517,11 @@ where let final_offset = offset + str.len() - self.cursor; let size = chunk_size.size().max(1); let diff = (max - size).max(1); - let avg_size = (final_offset / size) + 1; + let avg_size = final_offset.div_ceil(size); - target_offset = final_offset.saturating_add( - diff.saturating_mul(avg_size) - .max(final_offset / 10) - .saturating_add(1), - ); + target_offset = final_offset + .saturating_add(diff.saturating_mul(avg_size)) + .saturating_add(final_offset.div_ceil(10)); } match fits {