xberg 1.3.7 → 1.3.9

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.
@@ -1,12 +1,13 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:a35074a20ca717ee54f07b153b49a9c727f639435558b33d857255e60e309542
2
+ # alef:hash:cefb6a172a39f89f9f6c20af423e60c6ab3016057576cb6b9c1f72589894431c
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
 
6
6
  [package]
7
7
  name = "xberg-rb"
8
- version = "1.3.7"
8
+ version = "1.3.9"
9
9
  edition = "2024"
10
+ authors = ["Na'aman Hirschfeld <naaman@xberg.io>", "Tobias Perlstein <tobias@xberg.io>"]
10
11
  license = "MIT"
11
12
  description = "High-performance document intelligence library"
12
13
  readme = false
@@ -82,20 +83,18 @@ tokio = { version = "1", features = ["rt-multi-thread"] }
82
83
  tracing = "0.1"
83
84
 
84
85
  [target.'cfg(all(target_os = "macos", target_arch = "x86_64"))'.dependencies]
85
- xberg = { version = "1.3.7", default-features = false, features = ["macos-intel-target", "simd-utf8"] }
86
+ xberg = { version = "1.3.9", default-features = false, features = ["macos-intel-target", "simd-utf8"] }
86
87
 
87
88
  [target.'cfg(not(any(target_os = "windows", all(target_os = "macos", target_arch = "x86_64"))))'.dependencies]
88
- xberg = { version = "1.3.7", features = ["full", "pdf", "pdf-pdfium", "ocr", "paddle-ocr", "paddle-ocr-types", "layout-detection", "layout-types", "embeddings", "embedding-presets", "reranker", "reranker-presets", "sparse-embeddings", "sparse-embedding-presets", "late-interaction", "late-interaction-presets", "chunking", "keywords-yake", "keywords-rake", "language-detection", "html", "tree-sitter", "office", "email", "archives", "stopwords", "auto-rotate", "auto-rotate-types", "tokio-runtime", "api", "api-types", "mcp", "liter-llm", "quality", "svg", "transcription", "transcription-types", "classification", "captioning", "formula-recognition", "ner-onnx", "ner-llm", "diff", "markdown-footnotes", "redaction", "enrichment", "heuristics", "presets", "structured", "url-ingestion"] }
89
+ xberg = { version = "1.3.9", features = ["full", "pdf", "pdf-pdfium", "ocr", "paddle-ocr", "paddle-ocr-types", "layout-detection", "layout-types", "embeddings", "embedding-presets", "reranker", "reranker-presets", "sparse-embeddings", "sparse-embedding-presets", "late-interaction", "late-interaction-presets", "chunking", "keywords-yake", "keywords-rake", "language-detection", "html", "tree-sitter", "office", "email", "archives", "stopwords", "auto-rotate", "auto-rotate-types", "tokio-runtime", "api", "api-types", "mcp", "liter-llm", "quality", "svg", "transcription", "transcription-types", "classification", "captioning", "formula-recognition", "ner-onnx", "ner-llm", "diff", "markdown-footnotes", "redaction", "enrichment", "heuristics", "presets", "structured", "url-ingestion"] }
89
90
 
90
91
  [target.'cfg(target_os = "windows")'.dependencies]
91
- xberg = { version = "1.3.7", default-features = false, features = ["windows-gnu-target", "simd-utf8"] }
92
+ xberg = { version = "1.3.9", default-features = false, features = ["windows-gnu-target", "simd-utf8"] }
92
93
 
93
94
  # This crate deliberately does not use `[lints]` / `workspace = true`: its C-ABI /
94
- # PyO3 / napi / ext-php-rs / NIF boundary requires `unsafe` code, and the workspace's
95
- # `[workspace.lints.rust]` sets `unsafe_code = "deny"` -- an all-or-nothing table that
96
- # would turn every such boundary into a compile error. The `[lints.clippy]` block below
97
- # instead carries the subset of the workspace's deny-by-default lint policy this crate
98
- # can actually satisfy. ~keep
95
+ # PyO3 / napi / ext-php-rs / NIF boundary requires `unsafe` code. Local lint tables
96
+ # avoid inheriting workspace policies that could reject these boundaries, and select
97
+ # the lints this binding can actually satisfy. ~keep
99
98
  [lints.clippy]
100
99
  dbg_macro = "deny"
101
100
  print_stderr = "deny"
@@ -1,5 +1,5 @@
1
1
  // This file is auto-generated by alef. DO NOT EDIT.
2
- // alef:hash:d77ecc12b6f0752c5cec96b6f0b205562ea146737a08606f1b824d4cca7eff52
2
+ // alef:hash:8a7f952b1ec204f9582e176aedbd1b79f4f674addb02087b2d868b77db7e5b11
3
3
  // Re-generate with: alef generate
4
4
  #![allow(dead_code, unused_imports, unused_variables)]
5
5
  #![allow(
@@ -12250,6 +12250,7 @@ pub struct ExtractionConfig {
12250
12250
  transcription: Option<TranscriptionConfig>,
12251
12251
  use_layout_for_markdown: bool,
12252
12252
  include_document_structure: bool,
12253
+ strict_parse: bool,
12253
12254
  acceleration: Option<AccelerationConfig>,
12254
12255
  cache_namespace: Option<String>,
12255
12256
  cache_ttl_secs: Option<u64>,
@@ -12661,6 +12662,15 @@ impl ExtractionConfig {
12661
12662
  })?,
12662
12663
  None => false,
12663
12664
  },
12665
+ strict_parse: match kwargs.get(ruby.to_symbol("strict_parse")) {
12666
+ Some(v) => bool::try_convert(v).map_err(|e| {
12667
+ magnus::Error::new(
12668
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
12669
+ format!("invalid value for `strict_parse`: {}", e),
12670
+ )
12671
+ })?,
12672
+ None => false,
12673
+ },
12664
12674
  acceleration: match kwargs.get(ruby.to_symbol("acceleration")).filter(|v| !v.is_nil()) {
12665
12675
  Some(v) => Some(AccelerationConfig::try_convert(v).map_err(|e| {
12666
12676
  magnus::Error::new(
@@ -12995,6 +13005,10 @@ impl ExtractionConfig {
12995
13005
  self.include_document_structure
12996
13006
  }
12997
13007
 
13008
+ fn strict_parse(&self) -> bool {
13009
+ self.strict_parse
13010
+ }
13011
+
12998
13012
  fn acceleration(&self) -> Option<AccelerationConfig> {
12999
13013
  self.acceleration.clone()
13000
13014
  }
@@ -13135,6 +13149,8 @@ impl ExtractionConfig {
13135
13149
 
13136
13150
  include_document_structure: self.include_document_structure,
13137
13151
 
13152
+ strict_parse: self.strict_parse,
13153
+
13138
13154
  acceleration: self.acceleration.clone().map(Into::into),
13139
13155
 
13140
13156
  cache_namespace: self.cache_namespace.clone(),
@@ -13245,6 +13261,8 @@ impl ExtractionConfig {
13245
13261
 
13246
13262
  include_document_structure: self.include_document_structure,
13247
13263
 
13264
+ strict_parse: self.strict_parse,
13265
+
13248
13266
  acceleration: self.acceleration.clone().map(Into::into),
13249
13267
 
13250
13268
  cache_namespace: self.cache_namespace.clone(),
@@ -13349,6 +13367,8 @@ impl ExtractionConfig {
13349
13367
 
13350
13368
  include_document_structure: self.include_document_structure,
13351
13369
 
13370
+ strict_parse: self.strict_parse,
13371
+
13352
13372
  acceleration: self.acceleration.clone().map(Into::into),
13353
13373
 
13354
13374
  cache_namespace: self.cache_namespace.clone(),
@@ -13453,6 +13473,8 @@ impl ExtractionConfig {
13453
13473
 
13454
13474
  include_document_structure: self.include_document_structure,
13455
13475
 
13476
+ strict_parse: self.strict_parse,
13477
+
13456
13478
  acceleration: self.acceleration.clone().map(Into::into),
13457
13479
 
13458
13480
  cache_namespace: self.cache_namespace.clone(),
@@ -13557,6 +13579,8 @@ impl ExtractionConfig {
13557
13579
 
13558
13580
  include_document_structure: self.include_document_structure,
13559
13581
 
13582
+ strict_parse: self.strict_parse,
13583
+
13560
13584
  acceleration: self.acceleration.clone().map(Into::into),
13561
13585
 
13562
13586
  cache_namespace: self.cache_namespace.clone(),
@@ -14271,6 +14295,7 @@ pub struct FileExtractionConfig {
14271
14295
  result_format: Option<ResultFormat>,
14272
14296
  output_format: Option<OutputFormat>,
14273
14297
  include_document_structure: Option<bool>,
14298
+ strict_parse: Option<bool>,
14274
14299
  #[cfg(feature = "layout-types")]
14275
14300
  layout: Option<LayoutDetectionConfig>,
14276
14301
  #[cfg(feature = "transcription-types")]
@@ -14533,6 +14558,15 @@ impl FileExtractionConfig {
14533
14558
  })?),
14534
14559
  None => None,
14535
14560
  },
14561
+ strict_parse: match kwargs.get(ruby.to_symbol("strict_parse")).filter(|v| !v.is_nil()) {
14562
+ Some(v) => Some(bool::try_convert(v).map_err(|e| {
14563
+ magnus::Error::new(
14564
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
14565
+ format!("invalid value for `strict_parse`: {}", e),
14566
+ )
14567
+ })?),
14568
+ None => None,
14569
+ },
14536
14570
  #[cfg(feature = "layout-types")]
14537
14571
  layout: match kwargs.get(ruby.to_symbol("layout")).filter(|v| !v.is_nil()) {
14538
14572
  Some(v) => Some(LayoutDetectionConfig::try_convert(v).map_err(|e| {
@@ -14762,6 +14796,10 @@ impl FileExtractionConfig {
14762
14796
  self.include_document_structure
14763
14797
  }
14764
14798
 
14799
+ fn strict_parse(&self) -> Option<bool> {
14800
+ self.strict_parse
14801
+ }
14802
+
14765
14803
  #[cfg(feature = "layout-types")]
14766
14804
  fn layout(&self) -> Option<LayoutDetectionConfig> {
14767
14805
  self.layout.clone()
@@ -17378,7 +17416,7 @@ impl ImageExtractionConfig {
17378
17416
  format!("invalid value for `append_ocr_text`: {}", e),
17379
17417
  )
17380
17418
  })?,
17381
- None => false,
17419
+ None => true,
17382
17420
  },
17383
17421
  output_format: match kwargs.get(ruby.to_symbol("output_format")) {
17384
17422
  Some(v) => ImageOutputFormat::try_convert(v).map_err(|e| {
@@ -25647,6 +25685,7 @@ pub struct PageConfig {
25647
25685
  extract_pages: bool,
25648
25686
  insert_page_markers: bool,
25649
25687
  marker_format: String,
25688
+ keep_native_content: bool,
25650
25689
  }
25651
25690
 
25652
25691
  unsafe impl IntoValueFromNative for PageConfig {}
@@ -25730,6 +25769,15 @@ impl PageConfig {
25730
25769
  "
25731
25770
  .to_string(),
25732
25771
  },
25772
+ keep_native_content: match kwargs.get(ruby.to_symbol("keep_native_content")) {
25773
+ Some(v) => bool::try_convert(v).map_err(|e| {
25774
+ magnus::Error::new(
25775
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
25776
+ format!("invalid value for `keep_native_content`: {}", e),
25777
+ )
25778
+ })?,
25779
+ None => false,
25780
+ },
25733
25781
  })
25734
25782
  }
25735
25783
 
@@ -25744,6 +25792,10 @@ impl PageConfig {
25744
25792
  fn marker_format(&self) -> String {
25745
25793
  self.marker_format.clone()
25746
25794
  }
25795
+
25796
+ fn keep_native_content(&self) -> bool {
25797
+ self.keep_native_content
25798
+ }
25747
25799
  }
25748
25800
 
25749
25801
  #[derive(Clone, Debug, serde::Serialize)]
@@ -25761,6 +25813,7 @@ pub struct PageContent {
25761
25813
  section_name: Option<String>,
25762
25814
  sheet_name: Option<String>,
25763
25815
  ocr_confidence: Option<PageOcrConfidence>,
25816
+ native_content: Option<String>,
25764
25817
  }
25765
25818
 
25766
25819
  unsafe impl IntoValueFromNative for PageContent {}
@@ -25814,6 +25867,7 @@ impl Default for PageContent {
25814
25867
  section_name: None,
25815
25868
  sheet_name: None,
25816
25869
  ocr_confidence: None,
25870
+ native_content: None,
25817
25871
  }
25818
25872
  }
25819
25873
  }
@@ -25936,6 +25990,15 @@ impl PageContent {
25936
25990
  })?),
25937
25991
  None => None,
25938
25992
  },
25993
+ native_content: match kwargs.get(ruby.to_symbol("native_content")).filter(|v| !v.is_nil()) {
25994
+ Some(v) => Some(String::try_convert(v).map_err(|e| {
25995
+ magnus::Error::new(
25996
+ unsafe { magnus::Ruby::get_unchecked() }.exception_type_error(),
25997
+ format!("invalid value for `native_content`: {}", e),
25998
+ )
25999
+ })?),
26000
+ None => None,
26001
+ },
25939
26002
  })
25940
26003
  }
25941
26004
 
@@ -25987,6 +26050,10 @@ impl PageContent {
25987
26050
  self.ocr_confidence.clone()
25988
26051
  }
25989
26052
 
26053
+ fn native_content(&self) -> Option<String> {
26054
+ self.native_content.clone()
26055
+ }
26056
+
25990
26057
  #[allow(clippy::should_implement_trait)]
25991
26058
  fn to_s(&self) -> String {
25992
26059
  self.content.clone()
@@ -50683,6 +50750,7 @@ impl From<ExtractionConfig> for xberg::ExtractionConfig {
50683
50750
  transcription: val.transcription.map(Into::into),
50684
50751
  use_layout_for_markdown: val.use_layout_for_markdown,
50685
50752
  include_document_structure: val.include_document_structure,
50753
+ strict_parse: val.strict_parse,
50686
50754
  acceleration: val.acceleration.map(Into::into),
50687
50755
  cache_namespace: val.cache_namespace,
50688
50756
  cache_ttl_secs: val.cache_ttl_secs,
@@ -50754,6 +50822,7 @@ impl From<xberg::ExtractionConfig> for ExtractionConfig {
50754
50822
  transcription: val.transcription.map(Into::into),
50755
50823
  use_layout_for_markdown: val.use_layout_for_markdown,
50756
50824
  include_document_structure: val.include_document_structure,
50825
+ strict_parse: val.strict_parse,
50757
50826
  acceleration: val.acceleration.map(Into::into),
50758
50827
  cache_namespace: val.cache_namespace.map(|v| v.to_string()),
50759
50828
  cache_ttl_secs: val.cache_ttl_secs,
@@ -50931,6 +51000,7 @@ impl From<FileExtractionConfig> for xberg::FileExtractionConfig {
50931
51000
  result_format: val.result_format.map(Into::into),
50932
51001
  output_format: val.output_format.map(Into::into),
50933
51002
  include_document_structure: val.include_document_structure,
51003
+ strict_parse: val.strict_parse,
50934
51004
  #[cfg(feature = "layout-types")]
50935
51005
  layout: val.layout.map(Into::into),
50936
51006
  #[cfg(feature = "transcription-types")]
@@ -50982,6 +51052,7 @@ impl From<xberg::FileExtractionConfig> for FileExtractionConfig {
50982
51052
  result_format: val.result_format.map(Into::into),
50983
51053
  output_format: val.output_format.map(Into::into),
50984
51054
  include_document_structure: val.include_document_structure,
51055
+ strict_parse: val.strict_parse,
50985
51056
  #[cfg(feature = "layout-types")]
50986
51057
  layout: val.layout.map(Into::into),
50987
51058
  #[cfg(feature = "transcription-types")]
@@ -53044,6 +53115,7 @@ impl From<PageConfig> for xberg::PageConfig {
53044
53115
  extract_pages: val.extract_pages,
53045
53116
  insert_page_markers: val.insert_page_markers,
53046
53117
  marker_format: val.marker_format,
53118
+ keep_native_content: val.keep_native_content,
53047
53119
  ..Default::default()
53048
53120
  }
53049
53121
  }
@@ -53055,6 +53127,7 @@ impl From<xberg::PageConfig> for PageConfig {
53055
53127
  extract_pages: val.extract_pages,
53056
53128
  insert_page_markers: val.insert_page_markers,
53057
53129
  marker_format: val.marker_format.to_string(),
53130
+ keep_native_content: val.keep_native_content,
53058
53131
  }
53059
53132
  }
53060
53133
  }
@@ -53075,6 +53148,7 @@ impl From<PageContent> for xberg::PageContent {
53075
53148
  section_name: val.section_name,
53076
53149
  sheet_name: val.sheet_name,
53077
53150
  ocr_confidence: val.ocr_confidence.map(Into::into),
53151
+ native_content: val.native_content,
53078
53152
  }
53079
53153
  }
53080
53154
  }
@@ -53095,6 +53169,7 @@ impl From<xberg::PageContent> for PageContent {
53095
53169
  section_name: val.section_name.map(|v| v.to_string()),
53096
53170
  sheet_name: val.sheet_name.map(|v| v.to_string()),
53097
53171
  ocr_confidence: val.ocr_confidence.map(Into::into),
53172
+ native_content: val.native_content.map(|v| v.to_string()),
53098
53173
  }
53099
53174
  }
53100
53175
  }
@@ -59466,6 +59541,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
59466
59541
  method!(ExtractionConfig::include_document_structure, 0),
59467
59542
  )?;
59468
59543
 
59544
+ class.define_method("strict_parse", method!(ExtractionConfig::strict_parse, 0))?;
59545
+
59469
59546
  class.define_method("acceleration", method!(ExtractionConfig::acceleration, 0))?;
59470
59547
 
59471
59548
  class.define_method("cache_namespace", method!(ExtractionConfig::cache_namespace, 0))?;
@@ -59680,6 +59757,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
59680
59757
  method!(FileExtractionConfig::include_document_structure, 0),
59681
59758
  )?;
59682
59759
 
59760
+ class.define_method("strict_parse", method!(FileExtractionConfig::strict_parse, 0))?;
59761
+
59683
59762
  #[cfg(feature = "layout-types")]
59684
59763
  class.define_method("layout", method!(FileExtractionConfig::layout, 0))?;
59685
59764
 
@@ -61209,6 +61288,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
61209
61288
 
61210
61289
  class.define_method("marker_format", method!(PageConfig::marker_format, 0))?;
61211
61290
 
61291
+ class.define_method("keep_native_content", method!(PageConfig::keep_native_content, 0))?;
61292
+
61212
61293
  let class = module.define_class("PageContent", ruby.class_object())?;
61213
61294
 
61214
61295
  class.define_singleton_method("new", function!(PageContent::new, -1))?;
@@ -61237,6 +61318,8 @@ fn ruby_init(ruby: &Ruby) -> Result<(), Error> {
61237
61318
 
61238
61319
  class.define_method("ocr_confidence", method!(PageContent::ocr_confidence, 0))?;
61239
61320
 
61321
+ class.define_method("native_content", method!(PageContent::native_content, 0))?;
61322
+
61240
61323
  class.define_method("to_s", method!(PageContent::to_s, 0))?;
61241
61324
 
61242
61325
  let class = module.define_class("PageDimensions", ruby.class_object())?;
data/lib/xberg/version.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:0687e037476da4ba7e18fe1957eb56d2d154c61c20f178f4c8ee9e1cc7d090c2
2
+ # alef:hash:54266c8ed71cfc0b41f227d99a4c062e533226b81f15e7dc5499221930624881
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
  # frozen_string_literal: true
6
6
 
7
7
  module Xberg
8
8
  ## The version string for this package.
9
- VERSION = "1.3.7"
9
+ VERSION = "1.3.9"
10
10
  end
data/sig/types.rbs CHANGED
@@ -1,5 +1,5 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:ebe306889747c0ee64b78fefcf465898aca7871336bda3ba3caa4406a424946d
2
+ # alef:hash:18c7c7ea2cdd0194d2647e8ae2cc52ce3389914a3c1a9b585c79939242ccbef1
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify
5
5
 
@@ -990,6 +990,7 @@ def initialize: (?data: String, ?format: String, ?image_index: Integer, ?page_nu
990
990
  attr_reader transcription: TranscriptionConfig?
991
991
  attr_reader use_layout_for_markdown: bool
992
992
  attr_reader include_document_structure: bool
993
+ attr_reader strict_parse: bool
993
994
  attr_reader acceleration: AccelerationConfig?
994
995
  attr_reader cache_namespace: String?
995
996
  attr_reader cache_ttl_secs: Integer?
@@ -1010,7 +1011,7 @@ def initialize: (?data: String, ?format: String, ?image_index: Integer, ?page_nu
1010
1011
  attr_reader captioning: CaptioningConfig?
1011
1012
  attr_reader qr_codes: bool?
1012
1013
 
1013
- def initialize: (?mime_detection_policy: enum_MimeDetectionPolicy, ?use_cache: bool, ?enable_quality_processing: bool, ?ocr: OcrConfig, ?force_ocr: bool, ?ocr_strategy: OcrStrategy, ?force_ocr_pages: Array[Integer], ?disable_ocr: bool, ?ocr_near_empty_fallback: bool, ?ocr_scanned_page_quality_gate: bool, ?ocr_embedded_images: bool, ?chunking: ChunkingConfig, ?content_filter: ContentFilterConfig, ?images: ImageExtractionConfig, ?pdf_options: PdfConfig, ?token_reduction: TokenReductionOptions, ?language_detection: LanguageDetectionConfig, ?pages: PageConfig, ?keywords: KeywordConfig, ?postprocessor: PostProcessorConfig, ?html_options: ConversionOptions, ?html_output: HtmlOutputConfig, ?extraction_timeout_secs: Integer, ?max_concurrent_extractions: Integer, ?result_format: enum_ResultFormat, ?security_limits: SecurityLimits, ?max_embedded_file_bytes: Integer, ?output_format: OutputFormat, ?escape_markdown: bool, ?table_anchors: bool, ?jupyter_cell_rendering: enum_JupyterCellRendering, ?apply_notebook_cell_tags: bool, ?layout: LayoutDetectionConfig, ?transcription: TranscriptionConfig, ?use_layout_for_markdown: bool, ?include_document_structure: bool, ?acceleration: AccelerationConfig, ?cache_namespace: String, ?cache_ttl_secs: Integer, ?email: EmailConfig, ?csv: CsvConfig, ?geojson: GeoJsonExtractionConfig, ?concurrency: ConcurrencyConfig, ?url: UrlExtractionConfig, ?max_archive_depth: Integer, ?tree_sitter: TreeSitterConfig, ?structured_extraction: StructuredExtractionConfig, ?ner: NerConfig, ?redaction: RedactionConfig, ?summarization: SummarizationConfig, ?translation: TranslationConfig, ?page_classification: PageClassificationConfig, ?chunk_classification: ChunkClassificationConfig, ?captioning: CaptioningConfig, ?qr_codes: bool) -> void
1014
+ def initialize: (?mime_detection_policy: enum_MimeDetectionPolicy, ?use_cache: bool, ?enable_quality_processing: bool, ?ocr: OcrConfig, ?force_ocr: bool, ?ocr_strategy: OcrStrategy, ?force_ocr_pages: Array[Integer], ?disable_ocr: bool, ?ocr_near_empty_fallback: bool, ?ocr_scanned_page_quality_gate: bool, ?ocr_embedded_images: bool, ?chunking: ChunkingConfig, ?content_filter: ContentFilterConfig, ?images: ImageExtractionConfig, ?pdf_options: PdfConfig, ?token_reduction: TokenReductionOptions, ?language_detection: LanguageDetectionConfig, ?pages: PageConfig, ?keywords: KeywordConfig, ?postprocessor: PostProcessorConfig, ?html_options: ConversionOptions, ?html_output: HtmlOutputConfig, ?extraction_timeout_secs: Integer, ?max_concurrent_extractions: Integer, ?result_format: enum_ResultFormat, ?security_limits: SecurityLimits, ?max_embedded_file_bytes: Integer, ?output_format: OutputFormat, ?escape_markdown: bool, ?table_anchors: bool, ?jupyter_cell_rendering: enum_JupyterCellRendering, ?apply_notebook_cell_tags: bool, ?layout: LayoutDetectionConfig, ?transcription: TranscriptionConfig, ?use_layout_for_markdown: bool, ?include_document_structure: bool, ?strict_parse: bool, ?acceleration: AccelerationConfig, ?cache_namespace: String, ?cache_ttl_secs: Integer, ?email: EmailConfig, ?csv: CsvConfig, ?geojson: GeoJsonExtractionConfig, ?concurrency: ConcurrencyConfig, ?url: UrlExtractionConfig, ?max_archive_depth: Integer, ?tree_sitter: TreeSitterConfig, ?structured_extraction: StructuredExtractionConfig, ?ner: NerConfig, ?redaction: RedactionConfig, ?summarization: SummarizationConfig, ?translation: TranslationConfig, ?page_classification: PageClassificationConfig, ?chunk_classification: ChunkClassificationConfig, ?captioning: CaptioningConfig, ?qr_codes: bool) -> void
1014
1015
  def validate: () -> void
1015
1016
  def needs_image_data: () -> bool
1016
1017
  def runs_ocr_on_embedded_images: () -> bool
@@ -1091,6 +1092,7 @@ def initialize: (?genres: Array[String], ?sequences: Array[String], ?annotation:
1091
1092
  attr_reader result_format: enum_ResultFormat?
1092
1093
  attr_reader output_format: OutputFormat?
1093
1094
  attr_reader include_document_structure: bool?
1095
+ attr_reader strict_parse: bool?
1094
1096
  attr_reader layout: LayoutDetectionConfig?
1095
1097
  attr_reader transcription: TranscriptionConfig?
1096
1098
  attr_reader timeout_secs: Integer?
@@ -1106,7 +1108,7 @@ def initialize: (?genres: Array[String], ?sequences: Array[String], ?annotation:
1106
1108
  attr_reader captioning: CaptioningConfig?
1107
1109
  attr_reader qr_codes: bool?
1108
1110
 
1109
- def initialize: (?mime_detection_policy: enum_MimeDetectionPolicy, ?enable_quality_processing: bool, ?ocr: OcrConfig, ?force_ocr: bool, ?ocr_strategy: OcrStrategy, ?force_ocr_pages: Array[Integer], ?disable_ocr: bool, ?chunking: ChunkingConfig, ?content_filter: ContentFilterConfig, ?images: ImageExtractionConfig, ?pdf_options: PdfConfig, ?token_reduction: TokenReductionOptions, ?language_detection: LanguageDetectionConfig, ?pages: PageConfig, ?keywords: KeywordConfig, ?postprocessor: PostProcessorConfig, ?html_options: ConversionOptions, ?html_output: HtmlOutputConfig, ?result_format: enum_ResultFormat, ?output_format: OutputFormat, ?include_document_structure: bool, ?layout: LayoutDetectionConfig, ?transcription: TranscriptionConfig, ?timeout_secs: Integer, ?tree_sitter: TreeSitterConfig, ?structured_extraction: StructuredExtractionConfig, ?url: UrlExtractionConfig, ?ner: NerConfig, ?redaction: RedactionConfig, ?summarization: SummarizationConfig, ?translation: TranslationConfig, ?page_classification: PageClassificationConfig, ?chunk_classification: ChunkClassificationConfig, ?captioning: CaptioningConfig, ?qr_codes: bool) -> void
1111
+ def initialize: (?mime_detection_policy: enum_MimeDetectionPolicy, ?enable_quality_processing: bool, ?ocr: OcrConfig, ?force_ocr: bool, ?ocr_strategy: OcrStrategy, ?force_ocr_pages: Array[Integer], ?disable_ocr: bool, ?chunking: ChunkingConfig, ?content_filter: ContentFilterConfig, ?images: ImageExtractionConfig, ?pdf_options: PdfConfig, ?token_reduction: TokenReductionOptions, ?language_detection: LanguageDetectionConfig, ?pages: PageConfig, ?keywords: KeywordConfig, ?postprocessor: PostProcessorConfig, ?html_options: ConversionOptions, ?html_output: HtmlOutputConfig, ?result_format: enum_ResultFormat, ?output_format: OutputFormat, ?include_document_structure: bool, ?strict_parse: bool, ?layout: LayoutDetectionConfig, ?transcription: TranscriptionConfig, ?timeout_secs: Integer, ?tree_sitter: TreeSitterConfig, ?structured_extraction: StructuredExtractionConfig, ?url: UrlExtractionConfig, ?ner: NerConfig, ?redaction: RedactionConfig, ?summarization: SummarizationConfig, ?translation: TranslationConfig, ?page_classification: PageClassificationConfig, ?chunk_classification: ChunkClassificationConfig, ?captioning: CaptioningConfig, ?qr_codes: bool) -> void
1110
1112
  end
1111
1113
 
1112
1114
  class Footnote
@@ -1938,8 +1940,9 @@ def initialize: (?prompt_template: String, labels: Array[String], multi_label: b
1938
1940
  attr_reader extract_pages: bool
1939
1941
  attr_reader insert_page_markers: bool
1940
1942
  attr_reader marker_format: String
1943
+ attr_reader keep_native_content: bool
1941
1944
 
1942
- def initialize: (?extract_pages: bool, ?insert_page_markers: bool, ?marker_format: String) -> void
1945
+ def initialize: (?extract_pages: bool, ?insert_page_markers: bool, ?marker_format: String, ?keep_native_content: bool) -> void
1943
1946
  end
1944
1947
 
1945
1948
  class PageContent
@@ -1955,8 +1958,9 @@ def initialize: (?prompt_template: String, labels: Array[String], multi_label: b
1955
1958
  attr_reader section_name: String?
1956
1959
  attr_reader sheet_name: String?
1957
1960
  attr_reader ocr_confidence: PageOcrConfidence?
1961
+ attr_reader native_content: String?
1958
1962
 
1959
- def initialize: (page_number: Integer, content: String, tables: Array[Table], image_indices: Array[Integer], ?image_preprocessing: ImagePreprocessingMetadata, ?hierarchy: PageHierarchy, ?is_blank: bool, ?layout_regions: Array[LayoutRegion], ?speaker_notes: String, ?section_name: String, ?sheet_name: String, ?ocr_confidence: PageOcrConfidence) -> void
1963
+ def initialize: (page_number: Integer, content: String, tables: Array[Table], image_indices: Array[Integer], ?image_preprocessing: ImagePreprocessingMetadata, ?hierarchy: PageHierarchy, ?is_blank: bool, ?layout_regions: Array[LayoutRegion], ?speaker_notes: String, ?section_name: String, ?sheet_name: String, ?ocr_confidence: PageOcrConfidence, ?native_content: String) -> void
1960
1964
  end
1961
1965
 
1962
1966
  class PageDimensions
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xberg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.7
4
+ version: 1.3.9
5
5
  platform: ruby
6
6
  authors:
7
- - Na'aman Hirschfeld <naaman@xberg.io>
7
+ - Na'aman Hirschfeld
8
+ - Tobias Perlstein
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2026-10-09 00:00:00.000000000 Z
12
+ date: 2026-10-13 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rb_sys
@@ -36,16 +37,18 @@ dependencies:
36
37
  requirements:
37
38
  - - "~>"
38
39
  - !ruby/object:Gem::Version
39
- version: '0.5'
40
+ version: '0.6'
40
41
  type: :runtime
41
42
  prerelease: false
42
43
  version_requirements: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - "~>"
45
46
  - !ruby/object:Gem::Version
46
- version: '0.5'
47
+ version: '0.6'
47
48
  description: High-performance document intelligence library
48
49
  email:
50
+ - naaman@xberg.io
51
+ - tobias@xberg.io
49
52
  executables: []
50
53
  extensions:
51
54
  - ext/xberg_rb/native/extconf.rb