kreuzberg 4.0.0.rc2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -14
  3. data/.rspec +3 -3
  4. data/.rubocop.yaml +1 -1
  5. data/.rubocop.yml +543 -538
  6. data/Gemfile +8 -8
  7. data/Gemfile.lock +194 -6
  8. data/README.md +396 -426
  9. data/Rakefile +34 -25
  10. data/Steepfile +51 -47
  11. data/examples/async_patterns.rb +283 -341
  12. data/ext/kreuzberg_rb/extconf.rb +65 -45
  13. data/ext/kreuzberg_rb/native/.cargo/config.toml +23 -0
  14. data/ext/kreuzberg_rb/native/Cargo.lock +7619 -6535
  15. data/ext/kreuzberg_rb/native/Cargo.toml +75 -44
  16. data/ext/kreuzberg_rb/native/README.md +425 -425
  17. data/ext/kreuzberg_rb/native/build.rs +15 -15
  18. data/ext/kreuzberg_rb/native/include/ieeefp.h +11 -11
  19. data/ext/kreuzberg_rb/native/include/msvc_compat/strings.h +14 -14
  20. data/ext/kreuzberg_rb/native/include/strings.h +20 -20
  21. data/ext/kreuzberg_rb/native/include/unistd.h +47 -47
  22. data/ext/kreuzberg_rb/native/src/lib.rs +3802 -2998
  23. data/extconf.rb +60 -28
  24. data/kreuzberg.gemspec +199 -148
  25. data/lib/kreuzberg/api_proxy.rb +126 -142
  26. data/lib/kreuzberg/cache_api.rb +67 -46
  27. data/lib/kreuzberg/cli.rb +47 -55
  28. data/lib/kreuzberg/cli_proxy.rb +117 -127
  29. data/lib/kreuzberg/config.rb +936 -691
  30. data/lib/kreuzberg/error_context.rb +136 -32
  31. data/lib/kreuzberg/errors.rb +116 -118
  32. data/lib/kreuzberg/extraction_api.rb +313 -85
  33. data/lib/kreuzberg/mcp_proxy.rb +177 -186
  34. data/lib/kreuzberg/ocr_backend_protocol.rb +40 -113
  35. data/lib/kreuzberg/post_processor_protocol.rb +15 -86
  36. data/lib/kreuzberg/result.rb +334 -216
  37. data/lib/kreuzberg/setup_lib_path.rb +99 -80
  38. data/lib/kreuzberg/types.rb +170 -0
  39. data/lib/kreuzberg/validator_protocol.rb +16 -89
  40. data/lib/kreuzberg/version.rb +5 -5
  41. data/lib/kreuzberg.rb +96 -103
  42. data/lib/libpdfium.so +0 -0
  43. data/sig/kreuzberg/internal.rbs +184 -184
  44. data/sig/kreuzberg.rbs +561 -520
  45. data/spec/binding/async_operations_spec.rb +473 -0
  46. data/spec/binding/batch_operations_spec.rb +595 -0
  47. data/spec/binding/batch_spec.rb +359 -0
  48. data/spec/binding/cache_spec.rb +227 -227
  49. data/spec/binding/cli_proxy_spec.rb +85 -85
  50. data/spec/binding/cli_spec.rb +55 -55
  51. data/spec/binding/config_result_spec.rb +377 -0
  52. data/spec/binding/config_spec.rb +419 -345
  53. data/spec/binding/config_validation_spec.rb +377 -283
  54. data/spec/binding/embeddings_spec.rb +816 -0
  55. data/spec/binding/error_handling_spec.rb +399 -213
  56. data/spec/binding/error_recovery_spec.rb +488 -0
  57. data/spec/binding/errors_spec.rb +66 -66
  58. data/spec/binding/font_config_spec.rb +220 -0
  59. data/spec/binding/images_spec.rb +738 -0
  60. data/spec/binding/keywords_extraction_spec.rb +600 -0
  61. data/spec/binding/metadata_types_spec.rb +1228 -0
  62. data/spec/binding/pages_extraction_spec.rb +471 -0
  63. data/spec/binding/plugins/ocr_backend_spec.rb +307 -307
  64. data/spec/binding/plugins/postprocessor_spec.rb +269 -269
  65. data/spec/binding/plugins/validator_spec.rb +273 -274
  66. data/spec/binding/tables_spec.rb +641 -0
  67. data/spec/fixtures/config.toml +38 -39
  68. data/spec/fixtures/config.yaml +41 -41
  69. data/spec/fixtures/invalid_config.toml +3 -4
  70. data/spec/smoke/package_spec.rb +177 -178
  71. data/spec/spec_helper.rb +40 -42
  72. data/spec/unit/config/chunking_config_spec.rb +213 -0
  73. data/spec/unit/config/embedding_config_spec.rb +343 -0
  74. data/spec/unit/config/extraction_config_spec.rb +438 -0
  75. data/spec/unit/config/font_config_spec.rb +285 -0
  76. data/spec/unit/config/hierarchy_config_spec.rb +314 -0
  77. data/spec/unit/config/image_extraction_config_spec.rb +209 -0
  78. data/spec/unit/config/image_preprocessing_config_spec.rb +249 -0
  79. data/spec/unit/config/keyword_config_spec.rb +229 -0
  80. data/spec/unit/config/language_detection_config_spec.rb +258 -0
  81. data/spec/unit/config/ocr_config_spec.rb +171 -0
  82. data/spec/unit/config/page_config_spec.rb +221 -0
  83. data/spec/unit/config/pdf_config_spec.rb +267 -0
  84. data/spec/unit/config/postprocessor_config_spec.rb +290 -0
  85. data/spec/unit/config/tesseract_config_spec.rb +181 -0
  86. data/spec/unit/config/token_reduction_config_spec.rb +251 -0
  87. data/test/metadata_types_test.rb +959 -0
  88. data/vendor/Cargo.toml +61 -0
  89. data/vendor/kreuzberg/Cargo.toml +259 -204
  90. data/vendor/kreuzberg/README.md +263 -175
  91. data/vendor/kreuzberg/build.rs +782 -474
  92. data/vendor/kreuzberg/examples/bench_fixes.rs +71 -0
  93. data/vendor/kreuzberg/examples/test_pdfium_fork.rs +62 -0
  94. data/vendor/kreuzberg/src/api/error.rs +81 -81
  95. data/vendor/kreuzberg/src/api/handlers.rs +320 -199
  96. data/vendor/kreuzberg/src/api/mod.rs +94 -79
  97. data/vendor/kreuzberg/src/api/server.rs +518 -353
  98. data/vendor/kreuzberg/src/api/types.rs +206 -170
  99. data/vendor/kreuzberg/src/cache/mod.rs +1167 -1167
  100. data/vendor/kreuzberg/src/chunking/mod.rs +2303 -677
  101. data/vendor/kreuzberg/src/chunking/processor.rs +219 -0
  102. data/vendor/kreuzberg/src/core/batch_mode.rs +95 -95
  103. data/vendor/kreuzberg/src/core/batch_optimizations.rs +385 -0
  104. data/vendor/kreuzberg/src/core/config.rs +1914 -1032
  105. data/vendor/kreuzberg/src/core/config_validation.rs +949 -0
  106. data/vendor/kreuzberg/src/core/extractor.rs +1200 -1024
  107. data/vendor/kreuzberg/src/core/formats.rs +235 -0
  108. data/vendor/kreuzberg/src/core/io.rs +329 -329
  109. data/vendor/kreuzberg/src/core/mime.rs +605 -605
  110. data/vendor/kreuzberg/src/core/mod.rs +61 -45
  111. data/vendor/kreuzberg/src/core/pipeline.rs +1223 -984
  112. data/vendor/kreuzberg/src/core/server_config.rs +1220 -0
  113. data/vendor/kreuzberg/src/embeddings.rs +471 -432
  114. data/vendor/kreuzberg/src/error.rs +431 -431
  115. data/vendor/kreuzberg/src/extraction/archive.rs +959 -954
  116. data/vendor/kreuzberg/src/extraction/capacity.rs +263 -0
  117. data/vendor/kreuzberg/src/extraction/docx.rs +404 -40
  118. data/vendor/kreuzberg/src/extraction/email.rs +855 -854
  119. data/vendor/kreuzberg/src/extraction/excel.rs +697 -688
  120. data/vendor/kreuzberg/src/extraction/html.rs +1830 -553
  121. data/vendor/kreuzberg/src/extraction/image.rs +492 -368
  122. data/vendor/kreuzberg/src/extraction/libreoffice.rs +574 -563
  123. data/vendor/kreuzberg/src/extraction/markdown.rs +216 -213
  124. data/vendor/kreuzberg/src/extraction/mod.rs +93 -81
  125. data/vendor/kreuzberg/src/extraction/office_metadata/app_properties.rs +398 -398
  126. data/vendor/kreuzberg/src/extraction/office_metadata/core_properties.rs +247 -247
  127. data/vendor/kreuzberg/src/extraction/office_metadata/custom_properties.rs +240 -240
  128. data/vendor/kreuzberg/src/extraction/office_metadata/mod.rs +130 -130
  129. data/vendor/kreuzberg/src/extraction/office_metadata/odt_properties.rs +284 -287
  130. data/vendor/kreuzberg/src/extraction/pptx.rs +3102 -3000
  131. data/vendor/kreuzberg/src/extraction/structured.rs +491 -490
  132. data/vendor/kreuzberg/src/extraction/table.rs +329 -328
  133. data/vendor/kreuzberg/src/extraction/text.rs +277 -269
  134. data/vendor/kreuzberg/src/extraction/xml.rs +333 -333
  135. data/vendor/kreuzberg/src/extractors/archive.rs +447 -446
  136. data/vendor/kreuzberg/src/extractors/bibtex.rs +470 -469
  137. data/vendor/kreuzberg/src/extractors/docbook.rs +504 -502
  138. data/vendor/kreuzberg/src/extractors/docx.rs +400 -367
  139. data/vendor/kreuzberg/src/extractors/email.rs +157 -143
  140. data/vendor/kreuzberg/src/extractors/epub.rs +696 -707
  141. data/vendor/kreuzberg/src/extractors/excel.rs +385 -343
  142. data/vendor/kreuzberg/src/extractors/fictionbook.rs +492 -491
  143. data/vendor/kreuzberg/src/extractors/html.rs +419 -393
  144. data/vendor/kreuzberg/src/extractors/image.rs +219 -198
  145. data/vendor/kreuzberg/src/extractors/jats.rs +1054 -1051
  146. data/vendor/kreuzberg/src/extractors/jupyter.rs +368 -367
  147. data/vendor/kreuzberg/src/extractors/latex.rs +653 -652
  148. data/vendor/kreuzberg/src/extractors/markdown.rs +701 -700
  149. data/vendor/kreuzberg/src/extractors/mod.rs +429 -365
  150. data/vendor/kreuzberg/src/extractors/odt.rs +628 -628
  151. data/vendor/kreuzberg/src/extractors/opml.rs +635 -634
  152. data/vendor/kreuzberg/src/extractors/orgmode.rs +529 -528
  153. data/vendor/kreuzberg/src/extractors/pdf.rs +761 -493
  154. data/vendor/kreuzberg/src/extractors/pptx.rs +279 -248
  155. data/vendor/kreuzberg/src/extractors/rst.rs +577 -576
  156. data/vendor/kreuzberg/src/extractors/rtf.rs +809 -810
  157. data/vendor/kreuzberg/src/extractors/security.rs +484 -484
  158. data/vendor/kreuzberg/src/extractors/security_tests.rs +367 -367
  159. data/vendor/kreuzberg/src/extractors/structured.rs +142 -140
  160. data/vendor/kreuzberg/src/extractors/text.rs +265 -260
  161. data/vendor/kreuzberg/src/extractors/typst.rs +651 -650
  162. data/vendor/kreuzberg/src/extractors/xml.rs +147 -135
  163. data/vendor/kreuzberg/src/image/dpi.rs +164 -164
  164. data/vendor/kreuzberg/src/image/mod.rs +6 -6
  165. data/vendor/kreuzberg/src/image/preprocessing.rs +417 -417
  166. data/vendor/kreuzberg/src/image/resize.rs +89 -89
  167. data/vendor/kreuzberg/src/keywords/config.rs +154 -154
  168. data/vendor/kreuzberg/src/keywords/mod.rs +237 -237
  169. data/vendor/kreuzberg/src/keywords/processor.rs +275 -267
  170. data/vendor/kreuzberg/src/keywords/rake.rs +293 -293
  171. data/vendor/kreuzberg/src/keywords/types.rs +68 -68
  172. data/vendor/kreuzberg/src/keywords/yake.rs +163 -163
  173. data/vendor/kreuzberg/src/language_detection/mod.rs +985 -942
  174. data/vendor/kreuzberg/src/language_detection/processor.rs +218 -0
  175. data/vendor/kreuzberg/src/lib.rs +114 -105
  176. data/vendor/kreuzberg/src/mcp/mod.rs +35 -32
  177. data/vendor/kreuzberg/src/mcp/server.rs +2090 -1968
  178. data/vendor/kreuzberg/src/ocr/cache.rs +469 -469
  179. data/vendor/kreuzberg/src/ocr/error.rs +37 -37
  180. data/vendor/kreuzberg/src/ocr/hocr.rs +216 -216
  181. data/vendor/kreuzberg/src/ocr/language_registry.rs +520 -0
  182. data/vendor/kreuzberg/src/ocr/mod.rs +60 -58
  183. data/vendor/kreuzberg/src/ocr/processor.rs +858 -863
  184. data/vendor/kreuzberg/src/ocr/table/mod.rs +4 -4
  185. data/vendor/kreuzberg/src/ocr/table/tsv_parser.rs +144 -144
  186. data/vendor/kreuzberg/src/ocr/tesseract_backend.rs +456 -450
  187. data/vendor/kreuzberg/src/ocr/types.rs +393 -393
  188. data/vendor/kreuzberg/src/ocr/utils.rs +47 -47
  189. data/vendor/kreuzberg/src/ocr/validation.rs +206 -206
  190. data/vendor/kreuzberg/src/panic_context.rs +154 -154
  191. data/vendor/kreuzberg/src/pdf/bindings.rs +306 -0
  192. data/vendor/kreuzberg/src/pdf/bundled.rs +408 -0
  193. data/vendor/kreuzberg/src/pdf/error.rs +214 -122
  194. data/vendor/kreuzberg/src/pdf/fonts.rs +358 -0
  195. data/vendor/kreuzberg/src/pdf/hierarchy.rs +903 -0
  196. data/vendor/kreuzberg/src/pdf/images.rs +139 -139
  197. data/vendor/kreuzberg/src/pdf/metadata.rs +509 -346
  198. data/vendor/kreuzberg/src/pdf/mod.rs +81 -50
  199. data/vendor/kreuzberg/src/pdf/rendering.rs +369 -369
  200. data/vendor/kreuzberg/src/pdf/table.rs +417 -393
  201. data/vendor/kreuzberg/src/pdf/text.rs +553 -158
  202. data/vendor/kreuzberg/src/plugins/extractor.rs +1042 -1013
  203. data/vendor/kreuzberg/src/plugins/mod.rs +212 -209
  204. data/vendor/kreuzberg/src/plugins/ocr.rs +637 -620
  205. data/vendor/kreuzberg/src/plugins/processor.rs +650 -642
  206. data/vendor/kreuzberg/src/plugins/registry.rs +1339 -1337
  207. data/vendor/kreuzberg/src/plugins/traits.rs +258 -258
  208. data/vendor/kreuzberg/src/plugins/validator.rs +967 -956
  209. data/vendor/kreuzberg/src/stopwords/mod.rs +1470 -1470
  210. data/vendor/kreuzberg/src/text/mod.rs +27 -19
  211. data/vendor/kreuzberg/src/text/quality.rs +710 -697
  212. data/vendor/kreuzberg/src/text/quality_processor.rs +231 -0
  213. data/vendor/kreuzberg/src/text/string_utils.rs +229 -217
  214. data/vendor/kreuzberg/src/text/token_reduction/cjk_utils.rs +164 -164
  215. data/vendor/kreuzberg/src/text/token_reduction/config.rs +100 -100
  216. data/vendor/kreuzberg/src/text/token_reduction/core.rs +832 -796
  217. data/vendor/kreuzberg/src/text/token_reduction/filters.rs +923 -902
  218. data/vendor/kreuzberg/src/text/token_reduction/mod.rs +160 -160
  219. data/vendor/kreuzberg/src/text/token_reduction/semantic.rs +619 -619
  220. data/vendor/kreuzberg/src/text/token_reduction/simd_text.rs +148 -147
  221. data/vendor/kreuzberg/src/text/utf8_validation.rs +193 -0
  222. data/vendor/kreuzberg/src/types.rs +1713 -903
  223. data/vendor/kreuzberg/src/utils/mod.rs +31 -17
  224. data/vendor/kreuzberg/src/utils/pool.rs +503 -0
  225. data/vendor/kreuzberg/src/utils/pool_sizing.rs +364 -0
  226. data/vendor/kreuzberg/src/utils/quality.rs +968 -959
  227. data/vendor/kreuzberg/src/utils/string_pool.rs +761 -0
  228. data/vendor/kreuzberg/src/utils/string_utils.rs +381 -381
  229. data/vendor/kreuzberg/stopwords/af_stopwords.json +53 -53
  230. data/vendor/kreuzberg/stopwords/ar_stopwords.json +482 -482
  231. data/vendor/kreuzberg/stopwords/bg_stopwords.json +261 -261
  232. data/vendor/kreuzberg/stopwords/bn_stopwords.json +400 -400
  233. data/vendor/kreuzberg/stopwords/br_stopwords.json +1205 -1205
  234. data/vendor/kreuzberg/stopwords/ca_stopwords.json +280 -280
  235. data/vendor/kreuzberg/stopwords/cs_stopwords.json +425 -425
  236. data/vendor/kreuzberg/stopwords/da_stopwords.json +172 -172
  237. data/vendor/kreuzberg/stopwords/de_stopwords.json +622 -622
  238. data/vendor/kreuzberg/stopwords/el_stopwords.json +849 -849
  239. data/vendor/kreuzberg/stopwords/en_stopwords.json +1300 -1300
  240. data/vendor/kreuzberg/stopwords/eo_stopwords.json +175 -175
  241. data/vendor/kreuzberg/stopwords/es_stopwords.json +734 -734
  242. data/vendor/kreuzberg/stopwords/et_stopwords.json +37 -37
  243. data/vendor/kreuzberg/stopwords/eu_stopwords.json +100 -100
  244. data/vendor/kreuzberg/stopwords/fa_stopwords.json +801 -801
  245. data/vendor/kreuzberg/stopwords/fi_stopwords.json +849 -849
  246. data/vendor/kreuzberg/stopwords/fr_stopwords.json +693 -693
  247. data/vendor/kreuzberg/stopwords/ga_stopwords.json +111 -111
  248. data/vendor/kreuzberg/stopwords/gl_stopwords.json +162 -162
  249. data/vendor/kreuzberg/stopwords/gu_stopwords.json +226 -226
  250. data/vendor/kreuzberg/stopwords/ha_stopwords.json +41 -41
  251. data/vendor/kreuzberg/stopwords/he_stopwords.json +196 -196
  252. data/vendor/kreuzberg/stopwords/hi_stopwords.json +227 -227
  253. data/vendor/kreuzberg/stopwords/hr_stopwords.json +181 -181
  254. data/vendor/kreuzberg/stopwords/hu_stopwords.json +791 -791
  255. data/vendor/kreuzberg/stopwords/hy_stopwords.json +47 -47
  256. data/vendor/kreuzberg/stopwords/id_stopwords.json +760 -760
  257. data/vendor/kreuzberg/stopwords/it_stopwords.json +634 -634
  258. data/vendor/kreuzberg/stopwords/ja_stopwords.json +136 -136
  259. data/vendor/kreuzberg/stopwords/kn_stopwords.json +84 -84
  260. data/vendor/kreuzberg/stopwords/ko_stopwords.json +681 -681
  261. data/vendor/kreuzberg/stopwords/ku_stopwords.json +64 -64
  262. data/vendor/kreuzberg/stopwords/la_stopwords.json +51 -51
  263. data/vendor/kreuzberg/stopwords/lt_stopwords.json +476 -476
  264. data/vendor/kreuzberg/stopwords/lv_stopwords.json +163 -163
  265. data/vendor/kreuzberg/stopwords/ml_stopwords.json +1 -1
  266. data/vendor/kreuzberg/stopwords/mr_stopwords.json +101 -101
  267. data/vendor/kreuzberg/stopwords/ms_stopwords.json +477 -477
  268. data/vendor/kreuzberg/stopwords/ne_stopwords.json +490 -490
  269. data/vendor/kreuzberg/stopwords/nl_stopwords.json +415 -415
  270. data/vendor/kreuzberg/stopwords/no_stopwords.json +223 -223
  271. data/vendor/kreuzberg/stopwords/pl_stopwords.json +331 -331
  272. data/vendor/kreuzberg/stopwords/pt_stopwords.json +562 -562
  273. data/vendor/kreuzberg/stopwords/ro_stopwords.json +436 -436
  274. data/vendor/kreuzberg/stopwords/ru_stopwords.json +561 -561
  275. data/vendor/kreuzberg/stopwords/si_stopwords.json +193 -193
  276. data/vendor/kreuzberg/stopwords/sk_stopwords.json +420 -420
  277. data/vendor/kreuzberg/stopwords/sl_stopwords.json +448 -448
  278. data/vendor/kreuzberg/stopwords/so_stopwords.json +32 -32
  279. data/vendor/kreuzberg/stopwords/st_stopwords.json +33 -33
  280. data/vendor/kreuzberg/stopwords/sv_stopwords.json +420 -420
  281. data/vendor/kreuzberg/stopwords/sw_stopwords.json +76 -76
  282. data/vendor/kreuzberg/stopwords/ta_stopwords.json +129 -129
  283. data/vendor/kreuzberg/stopwords/te_stopwords.json +54 -54
  284. data/vendor/kreuzberg/stopwords/th_stopwords.json +118 -118
  285. data/vendor/kreuzberg/stopwords/tl_stopwords.json +149 -149
  286. data/vendor/kreuzberg/stopwords/tr_stopwords.json +506 -506
  287. data/vendor/kreuzberg/stopwords/uk_stopwords.json +75 -75
  288. data/vendor/kreuzberg/stopwords/ur_stopwords.json +519 -519
  289. data/vendor/kreuzberg/stopwords/vi_stopwords.json +647 -647
  290. data/vendor/kreuzberg/stopwords/yo_stopwords.json +62 -62
  291. data/vendor/kreuzberg/stopwords/zh_stopwords.json +796 -796
  292. data/vendor/kreuzberg/stopwords/zu_stopwords.json +31 -31
  293. data/vendor/kreuzberg/tests/api_embed.rs +360 -0
  294. data/vendor/kreuzberg/tests/api_extract_multipart.rs +52 -52
  295. data/vendor/kreuzberg/tests/api_large_pdf_extraction.rs +471 -0
  296. data/vendor/kreuzberg/tests/api_large_pdf_extraction_diagnostics.rs +289 -0
  297. data/vendor/kreuzberg/tests/api_tests.rs +1472 -966
  298. data/vendor/kreuzberg/tests/archive_integration.rs +545 -543
  299. data/vendor/kreuzberg/tests/batch_orchestration.rs +587 -556
  300. data/vendor/kreuzberg/tests/batch_pooling_benchmark.rs +154 -0
  301. data/vendor/kreuzberg/tests/batch_processing.rs +328 -316
  302. data/vendor/kreuzberg/tests/bibtex_parity_test.rs +421 -421
  303. data/vendor/kreuzberg/tests/concurrency_stress.rs +541 -525
  304. data/vendor/kreuzberg/tests/config_features.rs +612 -598
  305. data/vendor/kreuzberg/tests/config_integration_test.rs +753 -0
  306. data/vendor/kreuzberg/tests/config_loading_tests.rs +416 -415
  307. data/vendor/kreuzberg/tests/core_integration.rs +519 -510
  308. data/vendor/kreuzberg/tests/csv_integration.rs +414 -414
  309. data/vendor/kreuzberg/tests/data/hierarchy_ground_truth.json +294 -0
  310. data/vendor/kreuzberg/tests/docbook_extractor_tests.rs +500 -498
  311. data/vendor/kreuzberg/tests/docx_metadata_extraction_test.rs +122 -122
  312. data/vendor/kreuzberg/tests/docx_vs_pandoc_comparison.rs +370 -370
  313. data/vendor/kreuzberg/tests/email_integration.rs +327 -325
  314. data/vendor/kreuzberg/tests/epub_native_extractor_tests.rs +275 -275
  315. data/vendor/kreuzberg/tests/error_handling.rs +402 -393
  316. data/vendor/kreuzberg/tests/fictionbook_extractor_tests.rs +228 -228
  317. data/vendor/kreuzberg/tests/format_integration.rs +165 -159
  318. data/vendor/kreuzberg/tests/helpers/mod.rs +202 -142
  319. data/vendor/kreuzberg/tests/html_table_test.rs +551 -551
  320. data/vendor/kreuzberg/tests/image_integration.rs +255 -253
  321. data/vendor/kreuzberg/tests/instrumentation_test.rs +139 -139
  322. data/vendor/kreuzberg/tests/jats_extractor_tests.rs +639 -639
  323. data/vendor/kreuzberg/tests/jupyter_extractor_tests.rs +704 -704
  324. data/vendor/kreuzberg/tests/keywords_integration.rs +479 -479
  325. data/vendor/kreuzberg/tests/keywords_quality.rs +509 -509
  326. data/vendor/kreuzberg/tests/latex_extractor_tests.rs +496 -496
  327. data/vendor/kreuzberg/tests/markdown_extractor_tests.rs +490 -490
  328. data/vendor/kreuzberg/tests/mime_detection.rs +429 -428
  329. data/vendor/kreuzberg/tests/ocr_configuration.rs +514 -510
  330. data/vendor/kreuzberg/tests/ocr_errors.rs +698 -676
  331. data/vendor/kreuzberg/tests/ocr_language_registry.rs +191 -0
  332. data/vendor/kreuzberg/tests/ocr_quality.rs +629 -627
  333. data/vendor/kreuzberg/tests/ocr_stress.rs +469 -469
  334. data/vendor/kreuzberg/tests/odt_extractor_tests.rs +674 -695
  335. data/vendor/kreuzberg/tests/opml_extractor_tests.rs +616 -616
  336. data/vendor/kreuzberg/tests/orgmode_extractor_tests.rs +822 -822
  337. data/vendor/kreuzberg/tests/page_markers.rs +297 -0
  338. data/vendor/kreuzberg/tests/pdf_hierarchy_detection.rs +301 -0
  339. data/vendor/kreuzberg/tests/pdf_hierarchy_quality.rs +589 -0
  340. data/vendor/kreuzberg/tests/pdf_integration.rs +45 -43
  341. data/vendor/kreuzberg/tests/pdf_ocr_triggering.rs +301 -0
  342. data/vendor/kreuzberg/tests/pdf_text_merging.rs +475 -0
  343. data/vendor/kreuzberg/tests/pdfium_linking.rs +340 -0
  344. data/vendor/kreuzberg/tests/pipeline_integration.rs +1446 -1411
  345. data/vendor/kreuzberg/tests/plugin_ocr_backend_test.rs +776 -771
  346. data/vendor/kreuzberg/tests/plugin_postprocessor_test.rs +577 -560
  347. data/vendor/kreuzberg/tests/plugin_system.rs +927 -921
  348. data/vendor/kreuzberg/tests/plugin_validator_test.rs +783 -783
  349. data/vendor/kreuzberg/tests/registry_integration_tests.rs +587 -586
  350. data/vendor/kreuzberg/tests/rst_extractor_tests.rs +694 -692
  351. data/vendor/kreuzberg/tests/rtf_extractor_tests.rs +775 -776
  352. data/vendor/kreuzberg/tests/security_validation.rs +416 -415
  353. data/vendor/kreuzberg/tests/stopwords_integration_test.rs +888 -888
  354. data/vendor/kreuzberg/tests/test_fastembed.rs +631 -609
  355. data/vendor/kreuzberg/tests/typst_behavioral_tests.rs +1260 -1259
  356. data/vendor/kreuzberg/tests/typst_extractor_tests.rs +648 -647
  357. data/vendor/kreuzberg/tests/xlsx_metadata_extraction_test.rs +87 -87
  358. data/vendor/kreuzberg-ffi/Cargo.toml +67 -0
  359. data/vendor/kreuzberg-ffi/README.md +851 -0
  360. data/vendor/kreuzberg-ffi/benches/result_view_benchmark.rs +227 -0
  361. data/vendor/kreuzberg-ffi/build.rs +168 -0
  362. data/vendor/kreuzberg-ffi/cbindgen.toml +37 -0
  363. data/vendor/kreuzberg-ffi/kreuzberg-ffi.pc.in +12 -0
  364. data/vendor/kreuzberg-ffi/kreuzberg.h +3012 -0
  365. data/vendor/kreuzberg-ffi/src/batch_streaming.rs +588 -0
  366. data/vendor/kreuzberg-ffi/src/config.rs +1341 -0
  367. data/vendor/kreuzberg-ffi/src/error.rs +901 -0
  368. data/vendor/kreuzberg-ffi/src/extraction.rs +555 -0
  369. data/vendor/kreuzberg-ffi/src/helpers.rs +879 -0
  370. data/vendor/kreuzberg-ffi/src/lib.rs +977 -0
  371. data/vendor/kreuzberg-ffi/src/memory.rs +493 -0
  372. data/vendor/kreuzberg-ffi/src/mime.rs +329 -0
  373. data/vendor/kreuzberg-ffi/src/panic_shield.rs +265 -0
  374. data/vendor/kreuzberg-ffi/src/plugins/document_extractor.rs +442 -0
  375. data/vendor/kreuzberg-ffi/src/plugins/mod.rs +14 -0
  376. data/vendor/kreuzberg-ffi/src/plugins/ocr_backend.rs +628 -0
  377. data/vendor/kreuzberg-ffi/src/plugins/post_processor.rs +438 -0
  378. data/vendor/kreuzberg-ffi/src/plugins/validator.rs +329 -0
  379. data/vendor/kreuzberg-ffi/src/result.rs +510 -0
  380. data/vendor/kreuzberg-ffi/src/result_pool.rs +639 -0
  381. data/vendor/kreuzberg-ffi/src/result_view.rs +773 -0
  382. data/vendor/kreuzberg-ffi/src/string_intern.rs +568 -0
  383. data/vendor/kreuzberg-ffi/src/types.rs +363 -0
  384. data/vendor/kreuzberg-ffi/src/util.rs +210 -0
  385. data/vendor/kreuzberg-ffi/src/validation.rs +848 -0
  386. data/vendor/kreuzberg-ffi/tests.disabled/README.md +48 -0
  387. data/vendor/kreuzberg-ffi/tests.disabled/config_loading_tests.rs +299 -0
  388. data/vendor/kreuzberg-ffi/tests.disabled/config_tests.rs +346 -0
  389. data/vendor/kreuzberg-ffi/tests.disabled/extractor_tests.rs +232 -0
  390. data/vendor/kreuzberg-ffi/tests.disabled/plugin_registration_tests.rs +470 -0
  391. data/vendor/kreuzberg-tesseract/.commitlintrc.json +13 -0
  392. data/vendor/kreuzberg-tesseract/.crate-ignore +2 -0
  393. data/vendor/kreuzberg-tesseract/Cargo.lock +2933 -0
  394. data/vendor/kreuzberg-tesseract/Cargo.toml +57 -0
  395. data/vendor/{rb-sys/LICENSE-MIT → kreuzberg-tesseract/LICENSE} +22 -21
  396. data/vendor/kreuzberg-tesseract/README.md +399 -0
  397. data/vendor/kreuzberg-tesseract/build.rs +1127 -0
  398. data/vendor/kreuzberg-tesseract/patches/README.md +71 -0
  399. data/vendor/kreuzberg-tesseract/patches/tesseract.diff +199 -0
  400. data/vendor/kreuzberg-tesseract/src/api.rs +1371 -0
  401. data/vendor/kreuzberg-tesseract/src/choice_iterator.rs +77 -0
  402. data/vendor/kreuzberg-tesseract/src/enums.rs +297 -0
  403. data/vendor/kreuzberg-tesseract/src/error.rs +81 -0
  404. data/vendor/kreuzberg-tesseract/src/lib.rs +145 -0
  405. data/vendor/kreuzberg-tesseract/src/monitor.rs +57 -0
  406. data/vendor/kreuzberg-tesseract/src/mutable_iterator.rs +197 -0
  407. data/vendor/kreuzberg-tesseract/src/page_iterator.rs +253 -0
  408. data/vendor/kreuzberg-tesseract/src/result_iterator.rs +286 -0
  409. data/vendor/kreuzberg-tesseract/src/result_renderer.rs +183 -0
  410. data/vendor/kreuzberg-tesseract/tests/integration_test.rs +211 -0
  411. metadata +196 -45
  412. data/vendor/kreuzberg/benches/otel_overhead.rs +0 -48
  413. data/vendor/kreuzberg/src/extractors/fictionbook.rs.backup2 +0 -738
  414. data/vendor/rb-sys/.cargo-ok +0 -1
  415. data/vendor/rb-sys/.cargo_vcs_info.json +0 -6
  416. data/vendor/rb-sys/Cargo.lock +0 -393
  417. data/vendor/rb-sys/Cargo.toml +0 -70
  418. data/vendor/rb-sys/Cargo.toml.orig +0 -57
  419. data/vendor/rb-sys/LICENSE-APACHE +0 -190
  420. data/vendor/rb-sys/bin/release.sh +0 -21
  421. data/vendor/rb-sys/build/features.rs +0 -108
  422. data/vendor/rb-sys/build/main.rs +0 -246
  423. data/vendor/rb-sys/build/stable_api_config.rs +0 -153
  424. data/vendor/rb-sys/build/version.rs +0 -48
  425. data/vendor/rb-sys/readme.md +0 -36
  426. data/vendor/rb-sys/src/bindings.rs +0 -21
  427. data/vendor/rb-sys/src/hidden.rs +0 -11
  428. data/vendor/rb-sys/src/lib.rs +0 -34
  429. data/vendor/rb-sys/src/macros.rs +0 -371
  430. data/vendor/rb-sys/src/memory.rs +0 -53
  431. data/vendor/rb-sys/src/ruby_abi_version.rs +0 -38
  432. data/vendor/rb-sys/src/special_consts.rs +0 -31
  433. data/vendor/rb-sys/src/stable_api/compiled.c +0 -179
  434. data/vendor/rb-sys/src/stable_api/compiled.rs +0 -257
  435. data/vendor/rb-sys/src/stable_api/ruby_2_6.rs +0 -316
  436. data/vendor/rb-sys/src/stable_api/ruby_2_7.rs +0 -316
  437. data/vendor/rb-sys/src/stable_api/ruby_3_0.rs +0 -324
  438. data/vendor/rb-sys/src/stable_api/ruby_3_1.rs +0 -317
  439. data/vendor/rb-sys/src/stable_api/ruby_3_2.rs +0 -315
  440. data/vendor/rb-sys/src/stable_api/ruby_3_3.rs +0 -326
  441. data/vendor/rb-sys/src/stable_api/ruby_3_4.rs +0 -327
  442. data/vendor/rb-sys/src/stable_api.rs +0 -261
  443. data/vendor/rb-sys/src/symbol.rs +0 -31
  444. data/vendor/rb-sys/src/tracking_allocator.rs +0 -332
  445. data/vendor/rb-sys/src/utils.rs +0 -89
  446. data/vendor/rb-sys/src/value_type.rs +0 -7
data/vendor/Cargo.toml ADDED
@@ -0,0 +1,61 @@
1
+ [workspace]
2
+ members = ["kreuzberg", "kreuzberg-tesseract", "kreuzberg-ffi"]
3
+ resolver = "2"
4
+
5
+ [workspace.package]
6
+ version = "4.0.0"
7
+ edition = "2024"
8
+ rust-version = "1.91"
9
+ authors = ["Na'aman Hirschfeld <nhirschfeld@gmail.com>"]
10
+ license = "MIT"
11
+ repository = "https://github.com/kreuzberg-dev/kreuzberg"
12
+ homepage = "https://kreuzberg.dev"
13
+
14
+ [workspace.dependencies]
15
+ # Core async runtime
16
+ tokio = { version = "1.49.0", features = [
17
+ "rt",
18
+ "rt-multi-thread",
19
+ "macros",
20
+ "sync",
21
+ "process",
22
+ "fs",
23
+ "time",
24
+ "io-util",
25
+ ] }
26
+
27
+ # Serialization
28
+ serde = { version = "1.0.228", features = ["derive"] }
29
+ serde_json = "1.0.149"
30
+
31
+ # Error handling
32
+ thiserror = "2.0.17"
33
+ anyhow = "1.0"
34
+
35
+ # Async utilities
36
+ async-trait = "0.1.89"
37
+ libc = "0.2.180"
38
+ parking_lot = "0.12.5"
39
+
40
+ # Tracing/observability
41
+ tracing = "0.1"
42
+
43
+ # Utilities
44
+ ahash = "0.8.12"
45
+ base64 = "0.22.1"
46
+ hex = "0.4.3"
47
+ toml = "0.9.11"
48
+ num_cpus = "1.17.0"
49
+ once_cell = "1.21.3"
50
+ html-to-markdown-rs = { version = "2.20.0", default-features = false }
51
+ reqwest = { version = "0.13.1", default-features = false, features = ["json", "rustls"] }
52
+ image = { version = "0.25.9", default-features = false }
53
+ lzma-rust2 = { version = "0.15.6" }
54
+
55
+ # Fix for WASM builds: ensure getrandom has wasm_js feature enabled
56
+ # This is needed because ring/rustls depend on getrandom without the wasm_js feature
57
+ getrandom = { version = "0.3.4", features = ["wasm_js"] }
58
+
59
+ # Testing (dev)
60
+ tempfile = "3.24.0"
61
+ criterion = { version = "0.8", features = ["html_reports"] }
@@ -1,204 +1,259 @@
1
- [package]
2
- name = "kreuzberg"
3
- version.workspace = true
4
- edition.workspace = true
5
- rust-version.workspace = true
6
- authors.workspace = true
7
- description = "High-performance document intelligence library for Rust. Extract text, metadata, and structured data from PDFs, Office documents, images, and 50+ formats with async/sync APIs."
8
- license.workspace = true
9
- repository = "https://github.com/kreuzberg-dev/kreuzberg"
10
- homepage = "https://kreuzberg.dev"
11
- documentation = "https://docs.rs/kreuzberg"
12
- keywords = ["document", "extraction", "pdf", "ocr", "parser"]
13
- categories = ["parser-implementations", "text-processing"]
14
- readme = "README.md"
15
-
16
- [lib]
17
- crate-type = ["rlib"]
18
-
19
- [features]
20
- default = ["tokio-runtime"]
21
-
22
- tokio-runtime = []
23
- profiling = ["dep:pprof"]
24
-
25
- # Format extractors
26
- pdf = ["dep:pdfium-render", "dep:lopdf", "dep:image"]
27
- excel = ["dep:calamine", "dep:polars"]
28
- office = [
29
- "dep:roxmltree",
30
- "dep:zip",
31
- "dep:docx-lite",
32
- "dep:quick-xml",
33
- "dep:pulldown-cmark",
34
- "dep:biblatex",
35
- "dep:org",
36
- "dep:rtf-parser",
37
- "dep:rst_parser",
38
- "dep:fb2",
39
- "dep:typst-syntax",
40
- "html", # EPUB needs HTML parsing (zip + roxmltree + html-to-markdown-rs)
41
- ]
42
- email = ["dep:mail-parser", "dep:msg_parser"]
43
- html = ["dep:html-to-markdown-rs"]
44
- xml = ["dep:quick-xml", "dep:roxmltree"]
45
- archives = ["dep:zip", "dep:tar", "dep:sevenz-rust"]
46
-
47
- # Processing features
48
- ocr = [
49
- "dep:kreuzberg-tesseract",
50
- "dep:image",
51
- "dep:fast_image_resize",
52
- "dep:ndarray",
53
- "dep:kamadak-exif",
54
- "html",
55
- ]
56
- language-detection = ["dep:whatlang"]
57
- chunking = ["dep:text-splitter"]
58
- embeddings = ["dep:fastembed", "chunking"]
59
- stopwords = [] # Stopwords for keyword extraction and token reduction
60
- quality = ["dep:unicode-normalization", "dep:chardetng", "dep:encoding_rs", "stopwords"]
61
-
62
- # Keyword extraction (requires stopwords)
63
- keywords-yake = ["dep:yake-rust", "stopwords"]
64
- keywords-rake = ["dep:rake", "stopwords"]
65
- keywords = ["keywords-yake", "keywords-rake"]
66
-
67
- # Server features
68
- api = ["dep:axum", "dep:tower", "dep:tower-http"]
69
- mcp = ["dep:rmcp"]
70
-
71
- # Observability features
72
- otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:tracing-opentelemetry"]
73
-
74
- # Convenience bundles
75
- full = [
76
- "pdf",
77
- "excel",
78
- "office",
79
- "email",
80
- "html",
81
- "xml",
82
- "archives",
83
- "ocr",
84
- "language-detection",
85
- "chunking",
86
- "quality",
87
- "keywords",
88
- ]
89
- server = ["pdf", "excel", "html", "ocr", "api", "mcp"]
90
- cli = ["pdf", "excel", "office", "html", "ocr", "language-detection", "chunking", "quality"]
91
-
92
- [build-dependencies]
93
- tracing = { workspace = true }
94
-
95
- [dependencies]
96
- # Core dependencies (always included)
97
- ahash = { workspace = true }
98
- async-trait = { workspace = true }
99
- base64 = { workspace = true }
100
- base64-simd = "0.8"
101
- hex = { workspace = true }
102
- lazy_static = "1.5.0"
103
- libc = { workspace = true }
104
- memchr = "2.7.6"
105
- num_cpus = { workspace = true }
106
- once_cell = "1.21.3"
107
- paste = "1.0"
108
- rayon = "1.11.0"
109
- regex = "1.12.2"
110
- serde = { workspace = true }
111
- serde_json = { workspace = true }
112
- serde_yaml_ng = "0.10.0"
113
- toml = "0.9.8"
114
- mime_guess = "2.0"
115
- rmp-serde = "1.3"
116
- thiserror = { workspace = true }
117
- tokio = { workspace = true }
118
- uuid = { version = "1.19.0", features = ["v4"] }
119
- indexmap = "2.12.1"
120
- tracing = { workspace = true }
121
- reqwest = { workspace = true, default-features = false, features = ["json", "rustls-tls"] }
122
- # Format extractors (optional)
123
- pdfium-render = { version = "0.8.37", features = ["thread_safe", "image"], optional = true }
124
- lopdf = { version = "0.38.0", optional = true }
125
- calamine = { version = "0.32.0", features = ["dates"], optional = true }
126
- polars = { version = "0.52.0", default-features = false, features = ["ipc"], optional = true }
127
- roxmltree = { version = "0.21.1", optional = true }
128
- zip = { version = "6.0.0", optional = true }
129
- mail-parser = { version = "0.11.1", optional = true }
130
- msg_parser = { version = "0.1.1", optional = true }
131
- html-to-markdown-rs = { version = "2.12.0", features = ["inline-images"], optional = true }
132
- quick-xml = { version = "0.38.4", features = ["serialize"], optional = true }
133
- tar = { version = "0.4.44", optional = true }
134
- sevenz-rust = { version = "0.6.1", optional = true }
135
- docx-lite = { version = "0.2.0", optional = true }
136
-
137
- pulldown-cmark = { version = "0.13", optional = true }
138
- biblatex = { version = "0.11", optional = true }
139
- org = { version = "0.3", optional = true }
140
- rtf-parser = { version = "0.4", optional = true }
141
- rst_parser = { version = "0.4", optional = true }
142
- fb2 = { version = "0.4", optional = true }
143
- typst-syntax = { version = "0.14", optional = true }
144
-
145
- # Processing features (optional)
146
- kreuzberg-tesseract = { version = "4.0.0-rc.6", optional = true }
147
- image = { workspace = true, default-features = false, features = [
148
- "png",
149
- "jpeg",
150
- "webp",
151
- "bmp",
152
- "tiff",
153
- "gif",
154
- "rayon",
155
- ], optional = true }
156
- fast_image_resize = { version = "5.4.0", optional = true }
157
- ndarray = { version = "0.17.1", optional = true }
158
- kamadak-exif = { version = "0.6.1", optional = true }
159
- whatlang = { version = "0.18.0", optional = true }
160
- text-splitter = { version = "0.28.0", features = ["markdown"], optional = true }
161
- fastembed = { version = "5.4", default-features = false, features = [
162
- "hf-hub-rustls-tls",
163
- "ort-download-binaries",
164
- ], optional = true }
165
- unicode-normalization = { version = "0.1.25", optional = true }
166
- chardetng = { version = "0.1.17", optional = true }
167
- encoding_rs = { version = "0.8.35", optional = true }
168
- yake-rust = { version = "1.0.3", optional = true }
169
- rake = { version = "0.3.6", optional = true }
170
- # Server features (optional)
171
- axum = { version = "0.8", features = ["macros", "json", "multipart"], optional = true }
172
- tower = { version = "0.5", optional = true }
173
- tower-http = { version = "0.6", features = ["cors", "trace", "limit"], optional = true }
174
- rmcp = { version = "0.11.0", features = [
175
- "server",
176
- "macros",
177
- "base64",
178
- "transport-io",
179
- ], optional = true }
180
- # Observability features (optional)
181
- opentelemetry = { version = "0.31", features = ["trace"], optional = true }
182
- opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"], optional = true }
183
- tracing-opentelemetry = { version = "0.32", optional = true }
184
- infer = "0.19.0"
185
-
186
- [dev-dependencies]
187
- tempfile = { workspace = true }
188
- filetime = "0.2"
189
- tar = "0.4.44"
190
- zip = "6.0.0"
191
- serial_test = "3.2.0"
192
- anyhow = { workspace = true }
193
- tokio-test = "0.4"
194
- tracing-subscriber = { version = "0.3", features = ["env-filter"] }
195
- criterion = { workspace = true }
196
- image = { workspace = true, default-features = false, features = ["png"] }
197
-
198
- [[bench]]
199
- name = "otel_overhead"
200
- harness = false
201
-
202
- # Only build profiling tooling on non-Windows targets (pprof depends on Unix APIs)
203
- [target.'cfg(not(target_os = "windows"))'.dependencies]
204
- pprof = { version = "0.15.0", features = ["flamegraph"], optional = true }
1
+ [package]
2
+ name = "kreuzberg"
3
+ version = "4.0.0"
4
+ edition = "2024"
5
+ rust-version = "1.91"
6
+ authors = ["Na'aman Hirschfeld <nhirschfeld@gmail.com>"]
7
+ description = "High-performance document intelligence library for Rust. Extract text, metadata, and structured data from PDFs, Office documents, images, and 50+ formats with async/sync APIs."
8
+ license = "MIT"
9
+ repository = "https://github.com/kreuzberg-dev/kreuzberg"
10
+ homepage = "https://kreuzberg.dev"
11
+ documentation = "https://docs.rs/kreuzberg"
12
+ keywords = ["document", "extraction", "pdf", "ocr", "parser"]
13
+ categories = ["parser-implementations", "text-processing"]
14
+ readme = "README.md"
15
+
16
+ [lib]
17
+ crate-type = ["rlib"]
18
+
19
+ [features]
20
+ default = ["tokio-runtime", "simd-utf8"]
21
+
22
+ profiling = ["dep:pprof"]
23
+
24
+ pool-metrics = []
25
+
26
+ simd-utf8 = ["dep:simdutf8"]
27
+
28
+ tokio-runtime = ["dep:tokio"]
29
+
30
+ pdf = ["dep:pdfium-render", "dep:lopdf", "dep:image"]
31
+ static-pdfium = ["pdf"]
32
+ bundled-pdfium = ["pdf"]
33
+ system-pdfium = ["pdf"]
34
+ excel = ["dep:calamine", "dep:polars", "tokio-runtime"]
35
+ office = [
36
+ "dep:roxmltree",
37
+ "dep:zip",
38
+ "dep:docx-lite",
39
+ "dep:quick-xml",
40
+ "dep:pulldown-cmark",
41
+ "dep:biblatex",
42
+ "dep:org",
43
+ "dep:rtf-parser",
44
+ "dep:rst_parser",
45
+ "dep:fb2",
46
+ "dep:typst-syntax",
47
+ "html",
48
+ "tokio-runtime",
49
+ ]
50
+ email = ["dep:mail-parser", "dep:msg_parser"]
51
+ html = ["dep:html-to-markdown-rs"]
52
+ xml = ["dep:quick-xml", "dep:roxmltree"]
53
+ archives = ["dep:zip", "dep:tar", "dep:sevenz-rust2", "dep:lzma-rust2"]
54
+
55
+ ocr = [
56
+ "dep:kreuzberg-tesseract",
57
+ "dep:image",
58
+ "dep:tiff",
59
+ "dep:fast_image_resize",
60
+ "dep:ndarray",
61
+ "dep:kamadak-exif",
62
+ "html",
63
+ ]
64
+ language-detection = ["dep:whatlang"]
65
+ chunking = ["dep:text-splitter"]
66
+ embeddings = ["dep:fastembed", "dep:reqwest", "chunking", "tokio-runtime"]
67
+ stopwords = []
68
+ quality = ["dep:unicode-normalization", "dep:chardetng", "dep:encoding_rs", "stopwords"]
69
+
70
+ keywords-yake = ["dep:yake-rust", "stopwords"]
71
+ keywords-rake = ["dep:rake", "stopwords"]
72
+ keywords = ["keywords-yake", "keywords-rake"]
73
+
74
+ api = ["dep:axum", "dep:tower", "dep:tower-http", "tokio-runtime"]
75
+ mcp = ["dep:rmcp", "tokio-runtime"]
76
+ mcp-http = ["mcp", "api"]
77
+
78
+ otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:tracing-opentelemetry"]
79
+
80
+ wasm-target = ["pdf", "html", "xml", "email", "language-detection", "chunking", "quality"]
81
+ wasm-threads = ["dep:wasm-bindgen-rayon"]
82
+
83
+ full = [
84
+ "pdf",
85
+ "excel",
86
+ "office",
87
+ "email",
88
+ "html",
89
+ "xml",
90
+ "archives",
91
+ "ocr",
92
+ "language-detection",
93
+ "chunking",
94
+ "embeddings",
95
+ "quality",
96
+ "keywords",
97
+ "api",
98
+ "mcp",
99
+ "otel",
100
+ ]
101
+ server = ["static-pdfium", "excel", "html", "ocr", "api", "mcp"]
102
+ cli = [
103
+ "static-pdfium",
104
+ "excel",
105
+ "office",
106
+ "html",
107
+ "ocr",
108
+ "language-detection",
109
+ "chunking",
110
+ "quality",
111
+ ]
112
+
113
+ [build-dependencies]
114
+ tracing = { workspace = true }
115
+ pkg-config = "0.3"
116
+
117
+ [dependencies]
118
+ ahash = { workspace = true }
119
+ async-trait = { workspace = true }
120
+ base64 = { workspace = true }
121
+ base64-simd = "0.8"
122
+ bitvec = "1.0"
123
+ dashmap = "6.1"
124
+ dirs = "6.0"
125
+ simdutf8 = { version = "0.1", optional = true }
126
+ hex = { workspace = true }
127
+ lazy_static = "1.5.0"
128
+ libc = { workspace = true }
129
+ memchr = "2.7.6"
130
+ num_cpus = { workspace = true }
131
+ once_cell = { workspace = true }
132
+ parking_lot = { workspace = true }
133
+ pastey = "0.2"
134
+ rayon = "1.11.0"
135
+ regex = "1.12.2"
136
+ serde = { workspace = true }
137
+ serde_json = { workspace = true }
138
+ serde_yaml_ng = "0.10.0"
139
+ toml = { workspace = true }
140
+ mime_guess = "2.0"
141
+ rmp-serde = "1.3"
142
+ thiserror = { workspace = true }
143
+ tokio = { workspace = true, optional = true }
144
+ uuid = { version = "1.19.0", features = ["v4", "js"] }
145
+ indexmap = "2.13.0"
146
+ tracing = { workspace = true }
147
+ pdfium-render = { package = "kreuzberg-pdfium-render", version = "0.9.0", features = [
148
+ "thread_safe",
149
+ "image_latest",
150
+ ], optional = true }
151
+ lopdf = { version = "0.38.0", optional = true }
152
+ calamine = { version = "0.32.0", features = ["dates"], optional = true }
153
+ polars = { version = "0.52.0", default-features = false, features = ["ipc"], optional = true }
154
+ roxmltree = { version = "0.21.1", optional = true }
155
+ zip = { version = "7.0.0", optional = true }
156
+ mail-parser = { version = "0.11.1", optional = true }
157
+ msg_parser = { version = "0.1.1", optional = true }
158
+ html-to-markdown-rs = { workspace = true, features = [
159
+ "inline-images",
160
+ "metadata",
161
+ ], optional = true }
162
+ quick-xml = { version = "0.38.4", features = ["serialize"], optional = true }
163
+ tar = { version = "0.4.44", optional = true }
164
+ sevenz-rust2 = { version = "0.20.1", optional = true }
165
+ lzma-rust2 = { workspace = true, optional = true }
166
+ docx-lite = { version = "0.2.0", optional = true }
167
+
168
+ pulldown-cmark = { version = "0.13", optional = true }
169
+ biblatex = { version = "0.11", optional = true }
170
+ org = { version = "0.3", optional = true }
171
+ rtf-parser = { version = "0.4", optional = true }
172
+ rst_parser = { version = "0.4", optional = true }
173
+ fb2 = { version = "0.4", optional = true }
174
+ typst-syntax = { version = "0.14", optional = true }
175
+
176
+ kreuzberg-tesseract = { path = "../kreuzberg-tesseract", optional = true }
177
+ image = { workspace = true, default-features = false, features = [
178
+ "png",
179
+ "jpeg",
180
+ "webp",
181
+ "bmp",
182
+ "tiff",
183
+ "gif",
184
+ "rayon",
185
+ ], optional = true }
186
+ tiff = { version = "0.11", optional = true }
187
+ fast_image_resize = { version = "5.6.0", optional = true }
188
+ ndarray = { version = "0.17.1", optional = true }
189
+ kamadak-exif = { version = "0.6.1", optional = true }
190
+ whatlang = { version = "0.18.0", optional = true }
191
+ text-splitter = { version = "0.29.3", features = ["markdown"], optional = true }
192
+ unicode-normalization = { version = "0.1.25", optional = true }
193
+ chardetng = { version = "0.1.17", optional = true }
194
+ encoding_rs = { version = "0.8.35", optional = true }
195
+ yake-rust = { version = "1.0.3", optional = true }
196
+ rake = { version = "0.3.6", optional = true }
197
+ axum = { version = "0.8", features = ["macros", "json", "multipart"], optional = true }
198
+ tower = { version = "0.5", optional = true }
199
+ tower-http = { version = "0.6", features = ["cors", "trace", "limit"], optional = true }
200
+ rmcp = { version = "0.12.0", features = [
201
+ "server",
202
+ "macros",
203
+ "base64",
204
+ "transport-io",
205
+ "transport-streamable-http-server",
206
+ "axum",
207
+ ], optional = true }
208
+ opentelemetry = { version = "0.31", features = ["trace"], optional = true }
209
+ opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"], optional = true }
210
+ tracing-opentelemetry = { version = "0.32", optional = true }
211
+ infer = "0.19.0"
212
+ smartcore = { version = "0.4", default-features = false, features = ["serde"] }
213
+
214
+ [dev-dependencies]
215
+ tempfile = { workspace = true }
216
+ filetime = "0.2"
217
+ tar = "0.4.44"
218
+ zip = "7.0.0"
219
+ serial_test = "3.3.1"
220
+ anyhow = { workspace = true }
221
+ tokio-test = "0.4"
222
+ tracing-subscriber = { version = "0.3", features = ["env-filter"] }
223
+ criterion = { workspace = true }
224
+ image = { workspace = true, default-features = false, features = ["png"] }
225
+
226
+ [target.'cfg(all(not(target_os = "windows"), not(target_arch = "wasm32")))'.dependencies]
227
+ pprof = { version = "0.15.0", features = ["flamegraph"], optional = true }
228
+ # Use rustls on non-Windows platforms (Linux, macOS)
229
+ reqwest = { workspace = true, default-features = false, features = [
230
+ "json",
231
+ "rustls",
232
+ ], optional = true }
233
+ # Use rustls-tls for fastembed on non-Windows platforms
234
+ fastembed = { version = "5.7", default-features = false, features = [
235
+ "hf-hub-rustls-tls",
236
+ "ort-load-dynamic",
237
+ ], optional = true }
238
+ # Force ureq (transitive dep via hf-hub) to use rustls on non-Windows
239
+ ureq = { version = "3.1", default-features = false, features = ["rustls", "json"] }
240
+
241
+ # Use native-tls on Windows to avoid aws-lc-sys CMake build issues with MinGW
242
+ [target.'cfg(all(target_os = "windows", not(target_arch = "wasm32")))'.dependencies]
243
+ reqwest = { workspace = true, default-features = false, features = [
244
+ "json",
245
+ "native-tls",
246
+ ], optional = true }
247
+ # Use native-tls for fastembed on Windows
248
+ fastembed = { version = "5.7", default-features = false, features = [
249
+ "hf-hub-native-tls",
250
+ "ort-load-dynamic",
251
+ ], optional = true }
252
+ # Force ureq (transitive dep via hf-hub) to use native-tls on Windows
253
+ ureq = { version = "3.1", default-features = false, features = ["native-tls", "json"] }
254
+
255
+ [target.'cfg(target_arch = "wasm32")'.dependencies]
256
+ wasm-bindgen-rayon = { version = "1.3", optional = true }
257
+ # Override getrandom to enable js feature for WASM targets
258
+ # This is needed because ring/rustls (via ureq) depend on getrandom without js feature
259
+ getrandom = { workspace = true }