Files
fil/packages/elixir/lib/kreuzberg/native.ex
Henrik Jess Nielsen b4c07d3693
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s
Nomad changes
2026-06-01 23:40:55 +02:00

1104 lines
34 KiB
Elixir
Generated

# This file is auto-generated by alef — DO NOT EDIT.
# alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
# To regenerate: alef generate
# To verify freshness: alef verify --exit-code
# Issues & docs: https://github.com/kreuzberg-dev/alef
defmodule Kreuzberg.Native do
@moduledoc false
use RustlerPrecompiled,
otp_app: :kreuzberg,
crate: "kreuzberg_nif",
base_url:
"https://github.com/kreuzberg-dev/kreuzberg/releases/download/v#{Mix.Project.config()[:version]}",
version: Mix.Project.config()[:version],
targets: ~w(aarch64-apple-darwin aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu x86_64-pc-windows-gnu),
nif_versions: ["2.16", "2.17"],
force_build: System.get_env("KREUZBERG_BUILD") in ["1", "true"] or Mix.env() in [:dev]
@doc """
Extract content from a byte array.
This is the main entry point for in-memory extraction. It performs the following steps:
1. Validate MIME type
2. Handle legacy format conversion if needed
3. Select appropriate extractor from registry
4. Extract content
5. Run post-processing pipeline
# Arguments
* `content` - The byte array to extract
* `mime_type` - MIME type of the content
* `config` - Extraction configuration
# Returns
An `ExtractionResult` containing the extracted content and metadata.
# Errors
Returns `KreuzbergError::Validation` if MIME type is invalid.
Returns `KreuzbergError::UnsupportedFormat` if MIME type is not supported.
# Example
```rust,no_run
use kreuzberg::core::extractor::extract_bytes;
use kreuzberg::core::config::ExtractionConfig;
let config = ExtractionConfig::default();
let bytes = b"Hello, world!";
let result = extract_bytes(bytes, "text/plain", &config).await?;
println!("Content: {}", result.content);
```
"""
def extract_bytes_async(_content, _mime_type, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Extract content from a file.
This is the main entry point for file-based extraction. It performs the following steps:
1. Check cache for existing result (if caching enabled)
2. Detect or validate MIME type
3. Select appropriate extractor from registry
4. Extract content
5. Run post-processing pipeline
6. Store result in cache (if caching enabled)
# Arguments
* `path` - Path to the file to extract
* `mime_type` - Optional MIME type override. If None, will be auto-detected
* `config` - Extraction configuration
# Returns
An `ExtractionResult` containing the extracted content and metadata.
# Errors
Returns `KreuzbergError::Io` if the file doesn't exist (NotFound) or for other file I/O errors.
Returns `KreuzbergError::UnsupportedFormat` if MIME type is not supported.
# Example
```rust,no_run
use kreuzberg::core::extractor::extract_file;
use kreuzberg::core::config::ExtractionConfig;
let config = ExtractionConfig::default();
let result = extract_file("document.pdf", None, &config).await?;
println!("Content: {}", result.content);
```
"""
def extract_file_async(_path, _mime_type, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Synchronous wrapper for `extract_file`.
This is a convenience function that blocks the current thread until extraction completes.
For async code, use `extract_file` directly.
Uses the global Tokio runtime for 100x+ performance improvement over creating
a new runtime per call. Always uses the global runtime to avoid nested runtime issues.
This function is only available with the `tokio-runtime` feature. For WASM targets,
use a truly synchronous extraction approach instead.
# Example
```rust,no_run
use kreuzberg::core::extractor::extract_file_sync;
use kreuzberg::core::config::ExtractionConfig;
let config = ExtractionConfig::default();
let result = extract_file_sync("document.pdf", None, &config)?;
println!("Content: {}", result.content);
```
"""
def extract_file_sync(_path, _mime_type, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Synchronous wrapper for `extract_bytes`.
Uses the global Tokio runtime for 100x+ performance improvement over creating
a new runtime per call.
With the `tokio-runtime` feature, this blocks the current thread using the global
Tokio runtime. Without it (WASM), this calls a truly synchronous implementation.
# Example
```rust,no_run
use kreuzberg::core::extractor::extract_bytes_sync;
use kreuzberg::core::config::ExtractionConfig;
let config = ExtractionConfig::default();
let bytes = b"Hello, world!";
let result = extract_bytes_sync(bytes, "text/plain", &config)?;
println!("Content: {}", result.content);
```
"""
def extract_bytes_sync(_content, _mime_type, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Detect MIME type from raw file bytes.
Uses magic byte signatures to detect file type from content.
Falls back to `infer` crate for comprehensive detection.
For ZIP-based files, inspects contents to distinguish Office Open XML
formats (DOCX, XLSX, PPTX) from plain ZIP archives.
# Arguments
* `content` - Raw file bytes
# Returns
The detected MIME type string.
# Errors
Returns `KreuzbergError::UnsupportedFormat` if MIME type cannot be determined.
"""
def detect_mime_type_from_bytes(_content), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Get file extensions for a given MIME type.
Returns all known file extensions that map to the specified MIME type.
# Arguments
* `mime_type` - The MIME type to look up
# Returns
A vector of file extensions (without leading dot) for the MIME type.
# Example
```
use kreuzberg::core::mime::get_extensions_for_mime;
let extensions = get_extensions_for_mime("application/pdf").unwrap();
assert_eq!(extensions, vec!["pdf"]);
let doc_extensions = get_extensions_for_mime("application/vnd.openxmlformats-officedocument.wordprocessingml.document").unwrap();
assert!(doc_extensions.contains(&"docx".to_string()));
```
"""
def get_extensions_for_mime(_mime_type), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Clear all embedding backends from the global registry.
Calls `shutdown()` on every registered backend, then empties the registry.
# Errors
- Any error returned by a backend's `shutdown()` method. The first error
encountered stops processing of remaining backends.
"""
def clear_embedding_backends, do: :erlang.nif_error(:nif_not_loaded)
@doc """
List the names of all registered embedding backends.
Used by `kreuzberg-cli`, the api/mcp endpoints, and generated language
bindings.
"""
def list_embedding_backends, do: :erlang.nif_error(:nif_not_loaded)
@doc "List names of all registered document extractors."
def list_document_extractors, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Clear all document extractors from the global registry.
Calls `shutdown()` on every registered extractor, then empties the registry.
# Errors
- Any error returned by an extractor's `shutdown()` method. The first error
encountered stops processing of remaining extractors.
"""
def clear_document_extractors, do: :erlang.nif_error(:nif_not_loaded)
@doc """
List all registered OCR backends.
Returns the names of all OCR backends currently registered in the global registry.
# Returns
A vector of OCR backend names.
# Example
```rust
use kreuzberg::plugins::list_ocr_backends;
let backends = list_ocr_backends()?;
for name in backends {
println!("Registered OCR backend: {}", name);
}
```
"""
def list_ocr_backends, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Clear all OCR backends from the global registry.
Removes all OCR backends and calls their `shutdown()` methods.
# Returns
- `Ok(())` if all backends were cleared successfully
- `Err(...)` if any shutdown method failed
# Example
```rust
use kreuzberg::plugins::clear_ocr_backends;
clear_ocr_backends()?;
```
"""
def clear_ocr_backends, do: :erlang.nif_error(:nif_not_loaded)
@doc """
List all registered post-processor names.
Returns a vector of all post-processor names currently registered in the
global registry.
# Returns
- `Ok(Vec<String>)` - Vector of post-processor names
- `Err(...)` if the registry lock is poisoned
# Example
```rust
use kreuzberg::plugins::list_post_processors;
let processors = list_post_processors()?;
for name in processors {
println!("Registered post-processor: {}", name);
}
```
"""
def list_post_processors, do: :erlang.nif_error(:nif_not_loaded)
@doc "Remove all registered post-processors."
def clear_post_processors, do: :erlang.nif_error(:nif_not_loaded)
@doc """
List names of all registered renderers.
# Errors
Returns an error if the registry lock is poisoned.
"""
def list_renderers, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Clear all renderers from the global registry.
Removes every renderer, including the built-in defaults (markdown, html,
djot, plain). After calling this no renderers are registered; re-register
as needed.
# Errors
Returns an error if the registry lock is poisoned.
"""
def clear_renderers, do: :erlang.nif_error(:nif_not_loaded)
@doc "List names of all registered validators."
def list_validators, do: :erlang.nif_error(:nif_not_loaded)
@doc "Remove all registered validators."
def clear_validators, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Compare two extraction results and return a structured diff.
The comparison is purely structural — no I/O, no side effects. All fields
of [`ExtractionDiff`] are populated according to the provided [`DiffOptions`].
# Arguments
* `a` — the "before" extraction result
* `b` — the "after" extraction result
* `opts` — controls which sections are compared and optional truncation
# Example
```rust,no_run
use kreuzberg::{ExtractionResult, diff::{compare, DiffOptions}};
let mut a = ExtractionResult::default();
let mut b = ExtractionResult::default();
a.content = "Hello world".to_string();
b.content = "Hello Rust".to_string();
let diff = compare(&a, &b, &DiffOptions::default());
assert_eq!(diff.content_diff.len(), 1);
```
"""
def compare(_a, _b, _opts), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Generate embeddings asynchronously for a list of text strings.
This is the async counterpart to [`embed_texts`]. It offloads the blocking
ONNX inference work to a dedicated blocking thread pool via Tokio's
`spawn_blocking`, keeping the async executor free.
Returns one embedding vector per input text in the same order.
# Arguments
* `texts` - Vec of strings to embed (owned, sent to blocking thread)
* `config` - Embedding configuration specifying model, batch size, and normalization
# Errors
- `KreuzbergError::MissingDependency` if ONNX Runtime is not installed
- `KreuzbergError::Embedding` if the preset name is unknown, model download fails,
or the blocking inference task panics
# Example
```rust,ignore
use kreuzberg::{embed_texts_async, EmbeddingConfig};
let embeddings = embed_texts_async(
vec!["Hello!".to_string()],
&EmbeddingConfig::default(),
).await?;
```
"""
def embed_texts_async(_texts, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Render a single PDF page to PNG bytes.
Returns raw PNG-encoded bytes for the specified page at the given DPI.
Uses pdf_oxide with tiny-skia for pure-Rust rendering.
# Arguments
* `pdf_bytes` - Raw PDF file bytes
* `page_index` - Zero-based page index
* `dpi` - Resolution in dots per inch (default: 150)
* `password` - Optional password for encrypted PDFs
# Errors
Returns `KreuzbergError::Parsing` if the PDF cannot be opened, authenticated,
or rendered, or if `page_index` is out of range.
"""
def render_pdf_page_to_png(_pdf_bytes, _page_index, _dpi, _password), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Detect the MIME type of a file at the given path.
Uses the file extension and optionally the file content to determine the MIME type.
Set `check_exists` to `true` to verify the file exists before detection.
"""
def detect_mime_type(_path, _check_exists), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Embed a list of texts using the configured embedding model.
Returns a 2D vector where each inner vector is the embedding for the corresponding text.
"""
def embed_texts(_texts, _config), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Get an embedding preset by name.
Returns `None` if no preset with the given name exists. Returns an owned
clone so the value is safe to pass across FFI boundaries.
"""
def get_embedding_preset(_name), do: :erlang.nif_error(:nif_not_loaded)
@doc """
List the names of all available embedding presets.
Returns owned `String`s so the values are safe to pass across FFI boundaries.
"""
def list_embedding_presets, do: :erlang.nif_error(:nif_not_loaded)
def visitor_reply(_ref_id, _result), do: :erlang.nif_error(:nif_not_loaded)
def complete_trait_call(_reply_id, _result_json), do: :erlang.nif_error(:nif_not_loaded)
def fail_trait_call(_reply_id, _error_message), do: :erlang.nif_error(:nif_not_loaded)
def register_ocr_backend(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_ocr_backend(_name), do: :erlang.nif_error(:nif_not_loaded)
def register_post_processor(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_post_processor(_name), do: :erlang.nif_error(:nif_not_loaded)
def register_validator(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_validator(_name), do: :erlang.nif_error(:nif_not_loaded)
def register_embedding_backend(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_embedding_backend(_name), do: :erlang.nif_error(:nif_not_loaded)
def register_document_extractor(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_document_extractor(_name), do: :erlang.nif_error(:nif_not_loaded)
def register_renderer(_pid, _name), do: :erlang.nif_error(:nif_not_loaded)
def unregister_renderer(_name), do: :erlang.nif_error(:nif_not_loaded)
def contentfilterconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def extractionconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Check if image processing is needed by examining OCR and image extraction settings.
Returns `true` if either OCR is enabled or image extraction is configured,
indicating that image decompression and processing should occur.
Returns `false` if both are disabled, allowing optimization to skip unnecessary
image decompression for text-only extraction workflows.
# Optimization Impact
For text-only extractions (no OCR, no image extraction), skipping image
decompression can improve CPU utilization by 5-10% by avoiding wasteful
image I/O and processing when results won't be used.
"""
def extractionconfig_needs_image_processing(_obj), do: :erlang.nif_error(:nif_not_loaded)
def imageextractionconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def tokenreductionoptions_default, do: :erlang.nif_error(:nif_not_loaded)
def languagedetectionconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def htmloutputconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def layoutdetectionconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def ocrqualitythresholds_default, do: :erlang.nif_error(:nif_not_loaded)
def ocrconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def pageconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def pdfconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def hierarchyconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def postprocessorconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def chunkingconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def embeddingconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def treesitterconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def treesitterprocessconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def serverconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Get the server listen address (host:port).
# Example
```rust
use kreuzberg::core::ServerConfig;
let config = ServerConfig::default();
assert_eq!(config.listen_addr(), "127.0.0.1:8000");
```
"""
def serverconfig_listen_addr(_obj), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Check if CORS allows all origins.
Returns `true` if the `cors_origins` vector is empty, meaning all origins
are allowed. Returns `false` if specific origins are configured.
# Example
```rust
use kreuzberg::core::ServerConfig;
let mut config = ServerConfig::default();
assert!(config.cors_allows_all());
config.cors_origins.push("https://example.com".to_string());
assert!(!config.cors_allows_all());
```
"""
def serverconfig_cors_allows_all(_obj), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Check if a given origin is allowed by CORS configuration.
Returns `true` if:
- CORS allows all origins (empty origins list), or
- The given origin is in the allowed origins list
# Arguments
* `origin` - The origin to check (e.g., "https://example.com")
# Example
```rust
use kreuzberg::core::ServerConfig;
let mut config = ServerConfig::default();
assert!(config.is_origin_allowed("https://example.com"));
config.cors_origins.push("https://allowed.com".to_string());
assert!(config.is_origin_allowed("https://allowed.com"));
assert!(!config.is_origin_allowed("https://denied.com"));
```
"""
def serverconfig_is_origin_allowed(_obj, _origin), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Get maximum request body size in megabytes (rounded up).
# Example
```rust
use kreuzberg::core::ServerConfig;
let mut config = ServerConfig::default();
assert_eq!(config.max_request_body_mb(), 100);
```
"""
def serverconfig_max_request_body_mb(_obj), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Get maximum multipart field size in megabytes (rounded up).
# Example
```rust
use kreuzberg::core::ServerConfig;
let mut config = ServerConfig::default();
assert_eq!(config.max_multipart_field_mb(), 100);
```
"""
def serverconfig_max_multipart_field_mb(_obj), do: :erlang.nif_error(:nif_not_loaded)
def securitylimits_default, do: :erlang.nif_error(:nif_not_loaded)
def tokenreductionconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Compute and populate the `node_types` field from the current `nodes`.
Call this after all nodes have been added to the structure. Internal
construction paths (builder, derivation) call this automatically.
# Examples
```rust
use kreuzberg::types::document_structure::{DocumentStructure, DocumentNode, NodeContent, NodeId};
let mut structure = DocumentStructure {
nodes: vec![DocumentNode {
id: NodeId::from("n1"),
content: NodeContent::Paragraph { text: "Hello".into() },
parent: None,
children: vec![],
content_layer: Default::default(),
page: None,
page_end: None,
bbox: None,
annotations: vec![],
attributes: None,
}],
source_format: None,
relationships: vec![],
node_types: vec![],
};
structure.finalize_node_types();
assert!(structure.node_types.contains(&"paragraph".to_string()));
```
"""
def documentstructure_finalize_node_types(_obj), do: :erlang.nif_error(:nif_not_loaded)
@doc "Check if the document structure is empty."
def documentstructure_is_empty(_obj), do: :erlang.nif_error(:nif_not_loaded)
def documentstructure_default, do: :erlang.nif_error(:nif_not_loaded)
@doc "Convert from an OCR result."
def extractionresult_from_ocr(_ocr), do: :erlang.nif_error(:nif_not_loaded)
def imagepreprocessingconfig_default, do: :erlang.nif_error(:nif_not_loaded)
def tesseractconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Returns `true` when no metadata fields, format-specific metadata, or
additional postprocessor fields are populated.
"""
def metadata_is_empty(_obj), do: :erlang.nif_error(:nif_not_loaded)
def diffoptions_default, do: :erlang.nif_error(:nif_not_loaded)
def yakeparams_default, do: :erlang.nif_error(:nif_not_loaded)
def rakeparams_default, do: :erlang.nif_error(:nif_not_loaded)
def keywordconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets a custom cache directory for model files.
# Arguments
* `path` - Path to cache directory
# Examples
```no_run
use kreuzberg::PaddleOcrConfig;
use std::path::PathBuf;
let config = PaddleOcrConfig::new("en")
.with_cache_dir(PathBuf::from("/tmp/paddle-cache"));
```
"""
def paddleocrconfig_with_cache_dir(_obj, _path), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Enables or disables table structure detection.
# Arguments
* `enable` - Whether to enable table detection
# Examples
```no_run
use kreuzberg::PaddleOcrConfig;
let config = PaddleOcrConfig::new("en")
.with_table_detection(true);
```
"""
def paddleocrconfig_with_table_detection(_obj, _enable), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Enables or disables angle classification for rotated text.
# Arguments
* `enable` - Whether to enable angle classification
"""
def paddleocrconfig_with_angle_cls(_obj, _enable), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the database threshold for text detection.
# Arguments
* `threshold` - Detection threshold (0.0-1.0)
"""
def paddleocrconfig_with_det_db_thresh(_obj, _threshold), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the box threshold for text bounding box refinement.
# Arguments
* `threshold` - Box threshold (0.0-1.0)
"""
def paddleocrconfig_with_det_db_box_thresh(_obj, _threshold), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the unclip ratio for expanding text bounding boxes.
# Arguments
* `ratio` - Unclip ratio (typically 1.5-2.0)
"""
def paddleocrconfig_with_det_db_unclip_ratio(_obj, _ratio), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the maximum side length for detection images.
# Arguments
* `length` - Maximum side length in pixels
"""
def paddleocrconfig_with_det_limit_side_len(_obj, _length), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the batch size for recognition inference.
# Arguments
* `batch_size` - Number of text regions to process simultaneously
"""
def paddleocrconfig_with_rec_batch_num(_obj, _batch_size), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the minimum recognition confidence threshold.
# Arguments
* `score` - Minimum confidence (0.0-1.0), text below this is dropped
"""
def paddleocrconfig_with_drop_score(_obj, _score), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets padding in pixels added around images before detection.
# Arguments
* `padding` - Padding in pixels (0-100)
"""
def paddleocrconfig_with_padding(_obj, _padding), do: :erlang.nif_error(:nif_not_loaded)
@doc """
Sets the model tier controlling detection/recognition model size.
# Arguments
* `tier` - `"mobile"` (default, lightweight, faster) or `"server"` (high accuracy, GPU/complex documents)
"""
def paddleocrconfig_with_model_tier(_obj, _tier), do: :erlang.nif_error(:nif_not_loaded)
@doc "Creates a default configuration with English language support."
def paddleocrconfig_default, do: :erlang.nif_error(:nif_not_loaded)
@doc false
def acceleration_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def content_filter_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def email_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def extraction_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def file_extraction_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def batch_bytes_item_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def batch_file_item_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def image_extraction_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def token_reduction_options_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def language_detection_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def html_output_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def layout_detection_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def llm_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def structured_extraction_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_quality_thresholds_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_pipeline_stage_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_pipeline_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pdf_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def hierarchy_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def post_processor_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def chunking_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def embedding_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def tree_sitter_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def tree_sitter_process_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def server_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def docx_app_properties_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def core_properties_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def security_limits_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def token_reduction_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pdf_annotation_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def djot_content_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def formatted_block_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def inline_element_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def djot_image_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def djot_link_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def footnote_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def document_structure_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def document_relationship_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def document_node_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def table_grid_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def grid_cell_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def text_annotation_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def extraction_result_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def archive_entry_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def processing_warning_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def llm_usage_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def chunk_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def heading_context_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def heading_level_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def chunk_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def extracted_image_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def bounding_box_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def element_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def element_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_extraction_result_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_table_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_table_bounding_box_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def image_preprocessing_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def tesseract_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def image_preprocessing_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def excel_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def email_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def archive_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def image_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def xml_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def text_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def header_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def link_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def image_metadata_type_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def structured_data_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def html_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def error_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pptx_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def docx_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def csv_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def bibtex_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def citation_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def year_range_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def fiction_book_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def dbf_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def dbf_field_info_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def jats_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def contributor_role_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def epub_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pst_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_confidence_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_rotation_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_element_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def ocr_element_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_structure_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_boundary_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_info_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_content_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def layout_region_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def page_hierarchy_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def hierarchical_block_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def cell_change_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def document_revision_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def revision_delta_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def table_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def extracted_uri_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def diff_options_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def extraction_diff_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def diff_hunk_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def table_diff_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def embedded_changes_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def embedded_diff_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def embedding_preset_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def yake_params_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def rake_params_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def keyword_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def keyword_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def paddle_ocr_config_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pdf_metadata_from_json(_json), do: :erlang.nif_error(:nif_not_loaded)
end