---
title: "PHP API Reference"
---
## PHP API Reference v5.0.0-rc.3
### Functions
#### extractBytes()
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
**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.
**Signature:**
```php
public static function extractBytes(string $content, string $mimeType, ExtractionConfig $config): ExtractionResult
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | `string` | Yes | The byte array to extract |
| `mimeType` | `string` | Yes | MIME type of the content |
| `config` | `ExtractionConfig` | Yes | Extraction configuration |
**Returns:** `ExtractionResult`
**Errors:** Throws `Error`.
---
#### extractFile()
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)
**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.
**Signature:**
```php
public static function extractFile(string $path, ?string $mimeType = null, ExtractionConfig $config): ExtractionResult
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | `string` | Yes | Path to the file to extract |
| `mimeType` | `?string` | No | Optional MIME type override. If None, will be auto-detected |
| `config` | `ExtractionConfig` | Yes | Extraction configuration |
**Returns:** `ExtractionResult`
**Errors:** Throws `Error`.
---
#### extractFileSync()
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.
**Signature:**
```php
public static function extractFileSync(string $path, ?string $mimeType = null, ExtractionConfig $config): ExtractionResult
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | `string` | Yes | Path to the file |
| `mimeType` | `?string` | No | The mime type |
| `config` | `ExtractionConfig` | Yes | The configuration options |
**Returns:** `ExtractionResult`
**Errors:** Throws `Error`.
---
#### extractBytesSync()
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.
**Signature:**
```php
public static function extractBytesSync(string $content, string $mimeType, ExtractionConfig $config): ExtractionResult
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | `string` | Yes | The content to process |
| `mimeType` | `string` | Yes | The mime type |
| `config` | `ExtractionConfig` | Yes | The configuration options |
**Returns:** `ExtractionResult`
**Errors:** Throws `Error`.
---
#### batchExtractFilesSync()
Synchronous wrapper for `batch_extract_files`.
Uses the global Tokio runtime for optimal performance.
Only available with `tokio-runtime` (WASM has no filesystem).
**Signature:**
```php
public static function batchExtractFilesSync(array $items, ExtractionConfig $config): array
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `items` | `array` | Yes | The items |
| `config` | `ExtractionConfig` | Yes | The configuration options |
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### batchExtractBytesSync()
Synchronous wrapper for `batch_extract_bytes`.
Uses the global Tokio runtime for optimal performance.
With the `tokio-runtime` feature, this blocks the current thread using the global
Tokio runtime. Without it (WASM), this calls a truly synchronous implementation
that iterates through items and calls `extract_bytes_sync()`.
**Signature:**
```php
public static function batchExtractBytesSync(array $items, ExtractionConfig $config): array
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `items` | `array` | Yes | The items |
| `config` | `ExtractionConfig` | Yes | The configuration options |
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### batchExtractFiles()
Extract content from multiple files concurrently.
This function processes multiple files in parallel, automatically managing
concurrency to prevent resource exhaustion. The concurrency limit can be
configured via `ExtractionConfig::max_concurrent_extractions` or defaults
to `(num_cpus * 1.5).ceil()`.
Each file can optionally specify a `FileExtractionConfig` that overrides specific
fields from the batch-level `config`. Pass `null` for a file to use the batch defaults.
Batch-level settings like `max_concurrent_extractions` and `use_cache` are always
taken from the batch-level `config`.
per-file configuration overrides.
- `config` - Batch-level extraction configuration (provides defaults and batch settings)
**Returns:**
A vector of `ExtractionResult` in the same order as the input items.
**Errors:**
Individual file errors are captured in the result metadata. System errors
(IO, RuntimeError equivalents) will bubble up and fail the entire batch.
Simple usage with no per-file overrides:
Per-file configuration overrides:
**Signature:**
```php
public static function batchExtractFiles(array $items, ExtractionConfig $config): array
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `items` | `array` | Yes | Vector of `BatchFileItem` structs, each containing a path and optional |
| `config` | `ExtractionConfig` | Yes | Batch-level extraction configuration (provides defaults and batch settings) |
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### batchExtractBytes()
Extract content from multiple byte arrays concurrently.
This function processes multiple byte arrays in parallel, automatically managing
concurrency to prevent resource exhaustion. The concurrency limit can be
configured via `ExtractionConfig::max_concurrent_extractions` or defaults
to `(num_cpus * 1.5).ceil()`.
Each item can optionally specify a `FileExtractionConfig` that overrides specific
fields from the batch-level `config`. Pass `null` as the config to use
the batch-level defaults for that item.
MIME type, and optional per-item configuration overrides.
- `config` - Batch-level extraction configuration
**Returns:**
A vector of `ExtractionResult` in the same order as the input items.
Simple usage with no per-item overrides:
Per-item configuration overrides:
**Signature:**
```php
public static function batchExtractBytes(array $items, ExtractionConfig $config): array
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `items` | `array` | Yes | Vector of `BatchBytesItem` structs, each containing content bytes, |
| `config` | `ExtractionConfig` | Yes | Batch-level extraction configuration |
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### detectMimeTypeFromBytes()
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.
**Returns:**
The detected MIME type string.
**Errors:**
Returns `KreuzbergError::UnsupportedFormat` if MIME type cannot be determined.
**Signature:**
```php
public static function detectMimeTypeFromBytes(string $content): string
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | `string` | Yes | Raw file bytes |
**Returns:** `string`
**Errors:** Throws `Error`.
---
#### getExtensionsForMime()
Get file extensions for a given MIME type.
Returns all known file extensions that map to the specified MIME type.
**Returns:**
A vector of file extensions (without leading dot) for the MIME type.
**Signature:**
```php
public static function getExtensionsForMime(string $mimeType): array
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `mimeType` | `string` | Yes | The MIME type to look up |
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearEmbeddingBackends()
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.
**Signature:**
```php
public static function clearEmbeddingBackends(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### listEmbeddingBackends()
List the names of all registered embedding backends.
Used by `kreuzberg-cli`, the api/mcp endpoints, and generated language
bindings.
**Signature:**
```php
public static function listEmbeddingBackends(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### listDocumentExtractors()
List names of all registered document extractors.
**Signature:**
```php
public static function listDocumentExtractors(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearDocumentExtractors()
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.
**Signature:**
```php
public static function clearDocumentExtractors(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### listOcrBackends()
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.
**Signature:**
```php
public static function listOcrBackends(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearOcrBackends()
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
**Signature:**
```php
public static function clearOcrBackends(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### listPostProcessors()
List all registered post-processor names.
Returns a vector of all post-processor names currently registered in the
global registry.
**Returns:**
- `Ok(Vec)` - Vector of post-processor names
- `Err(...)` if the registry lock is poisoned
**Signature:**
```php
public static function listPostProcessors(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearPostProcessors()
Remove all registered post-processors.
**Signature:**
```php
public static function clearPostProcessors(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### listRenderers()
List names of all registered renderers.
**Errors:**
Returns an error if the registry lock is poisoned.
**Signature:**
```php
public static function listRenderers(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearRenderers()
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.
**Signature:**
```php
public static function clearRenderers(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### listValidators()
List names of all registered validators.
**Signature:**
```php
public static function listValidators(): array
```
**Returns:** `array`
**Errors:** Throws `Error`.
---
#### clearValidators()
Remove all registered validators.
**Signature:**
```php
public static function clearValidators(): void
```
**Returns:** `void`
**Errors:** Throws `Error`.
---
#### compare()
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`.
**Signature:**
```php
public static function compare(ExtractionResult $a, ExtractionResult $b, DiffOptions $opts): ExtractionDiff
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `a` | `ExtractionResult` | Yes | The extraction result |
| `b` | `ExtractionResult` | Yes | The extraction result |
| `opts` | `DiffOptions` | Yes | The options to use |
**Returns:** `ExtractionDiff`
---
#### embedTextsAsync()
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.
**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
**Signature:**
```php
public static function embedTextsAsync(array $texts, EmbeddingConfig $config): array>
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `texts` | `array` | Yes | Vec of strings to embed (owned, sent to blocking thread) |
| `config` | `EmbeddingConfig` | Yes | Embedding configuration specifying model, batch size, and normalization |
**Returns:** `array>`
**Errors:** Throws `Error`.
---
#### renderPdfPageToPng()
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.
**Errors:**
Returns `KreuzbergError::Parsing` if the PDF cannot be opened, authenticated,
or rendered, or if `page_index` is out of range.
**Signature:**
```php
public static function renderPdfPageToPng(string $pdfBytes, int $pageIndex, ?int $dpi = null, ?string $password = null): string
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pdfBytes` | `string` | Yes | Raw PDF file bytes |
| `pageIndex` | `int` | Yes | Zero-based page index |
| `dpi` | `?int` | No | Resolution in dots per inch (default: 150) |
| `password` | `?string` | No | Optional password for encrypted PDFs |
**Returns:** `string`
**Errors:** Throws `Error`.
---
#### detectMimeType()
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.
**Signature:**
```php
public static function detectMimeType(string $path, bool $checkExists): string
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | `string` | Yes | Path to the file |
| `checkExists` | `bool` | Yes | The check exists |
**Returns:** `string`
**Errors:** Throws `Error`.
---
#### embedTexts()
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.
**Signature:**
```php
public static function embedTexts(array $texts, EmbeddingConfig $config): array>
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `texts` | `array` | Yes | The texts |
| `config` | `EmbeddingConfig` | Yes | The configuration options |
**Returns:** `array>`
**Errors:** Throws `Error`.
---
#### getEmbeddingPreset()
Get an embedding preset by name.
Returns `null` if no preset with the given name exists. Returns an owned
clone so the value is safe to pass across FFI boundaries.
**Signature:**
```php
public static function getEmbeddingPreset(string $name): ?EmbeddingPreset
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `name` | `string` | Yes | The name |
**Returns:** `?EmbeddingPreset`
---
#### listEmbeddingPresets()
List the names of all available embedding presets.
Returns owned `String`s so the values are safe to pass across FFI boundaries.
**Signature:**
```php
public static function listEmbeddingPresets(): array
```
**Returns:** `array`
---
### Types
#### AccelerationConfig
Hardware acceleration configuration for ONNX Runtime models.
Controls which execution provider (CPU, CoreML, CUDA, TensorRT) is used
for inference in layout detection and embedding generation.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `provider` | `ExecutionProviderType` | `ExecutionProviderType::Auto` | Execution provider to use for ONNX inference. |
| `deviceId` | `int` | — | GPU device ID (for CUDA/TensorRT). Ignored for CPU/CoreML/Auto. |
---
#### ArchiveEntry
A single file extracted from an archive.
When archives (ZIP, TAR, 7Z, GZIP) are extracted with recursive extraction
enabled, each processable file produces its own full `ExtractionResult`.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `path` | `string` | — | Archive-relative file path (e.g. "folder/document.pdf"). |
| `mimeType` | `string` | — | Detected MIME type of the file. |
| `result` | `ExtractionResult` | — | Full extraction result for this file. |
---
#### ArchiveMetadata
Archive (ZIP/TAR/7Z) metadata.
Extracted from compressed archive files containing file lists and size information.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `format` | `string` | — | Archive format ("ZIP", "TAR", "7Z", etc.) |
| `fileCount` | `int` | — | Total number of files in the archive |
| `fileList` | `array` | `[]` | List of file paths within the archive |
| `totalSize` | `int` | — | Total uncompressed size in bytes |
| `compressedSize` | `?int` | `null` | Compressed size in bytes (if available) |
---
#### BBox
Bounding box in original image coordinates (x1, y1) top-left, (x2, y2) bottom-right.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `x1` | `float` | — | X1 |
| `y1` | `float` | — | Y1 |
| `x2` | `float` | — | X2 |
| `y2` | `float` | — | Y2 |
---
#### BatchBytesItem
Batch item for byte array extraction.
Used with `batch_extract_bytes` and `batch_extract_bytes_sync`
to represent a single item in a batch extraction job.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `content` | `string` | — | The content bytes to extract from |
| `mimeType` | `string` | — | MIME type of the content (e.g., "application/pdf", "text/html") |
| `config` | `?FileExtractionConfig` | `null` | Per-item configuration overrides (None uses batch-level defaults) |
---
#### BatchFileItem
Batch item for file extraction.
Used with `batch_extract_files` and `batch_extract_files_sync`
to represent a single file in a batch extraction job.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `path` | `string` | — | Path to the file to extract from |
| `config` | `?FileExtractionConfig` | `null` | Per-file configuration overrides (None uses batch-level defaults) |
---
#### BibtexMetadata
BibTeX bibliography metadata.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `entryCount` | `int` | — | Number of entries in the bibliography. |
| `citationKeys` | `array` | `[]` | Citation keys |
| `authors` | `array` | `[]` | Authors |
| `yearRange` | `?YearRange` | `null` | Year range (year range) |
| `entryTypes` | `?array` | `{}` | Entry types |
---
#### BoundingBox
Bounding box coordinates for element positioning.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `x0` | `float` | — | Left x-coordinate |
| `y0` | `float` | — | Bottom y-coordinate |
| `x1` | `float` | — | Right x-coordinate |
| `y1` | `float` | — | Top y-coordinate |
---
#### CacheStats
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `totalFiles` | `int` | — | Total files |
| `totalSizeMb` | `float` | — | Total size mb |
| `availableSpaceMb` | `float` | — | Available space mb |
| `oldestFileAgeDays` | `float` | — | Oldest file age days |
| `newestFileAgeDays` | `float` | — | Newest file age days |
---
#### CellChange
A single changed cell within a table.
Defined here (rather than only in `crate::diff`) so `RevisionDelta` can
reference it unconditionally, without requiring the `diff` Cargo feature.
`crate::diff` re-exports this type verbatim.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `row` | `int` | — | Zero-based row index. |
| `col` | `int` | — | Zero-based column index. |
| `from` | `string` | — | Value before the change. |
| `to` | `string` | — | Value after the change. |
---
#### Chunk
A text chunk with optional embedding and metadata.
Chunks are created when chunking is enabled in `ExtractionConfig`. Each chunk
contains the text content, optional embedding vector (if embedding generation
is configured), and metadata about its position in the document.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `content` | `string` | — | The text content of this chunk. |
| `chunkType` | `ChunkType` | `/* serde(default) */` | Semantic structural classification of this chunk. Assigned by the heuristic classifier based on content patterns and heading context. Defaults to `ChunkType::Unknown` when no rule matches. |
| `embedding` | `?array` | `null` | Optional embedding vector for this chunk. Only populated when `EmbeddingConfig` is provided in chunking configuration. The dimensionality depends on the chosen embedding model. |
| `metadata` | `ChunkMetadata` | — | Metadata about this chunk's position and properties. |
---
#### ChunkMetadata
Metadata about a chunk's position in the original document.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `byteStart` | `int` | — | Byte offset where this chunk starts in the original text (UTF-8 valid boundary). |
| `byteEnd` | `int` | — | Byte offset where this chunk ends in the original text (UTF-8 valid boundary). |
| `tokenCount` | `?int` | `null` | Number of tokens in this chunk (if available). This is calculated by the embedding model's tokenizer if embeddings are enabled. |
| `chunkIndex` | `int` | — | Zero-based index of this chunk in the document. |
| `totalChunks` | `int` | — | Total number of chunks in the document. |
| `firstPage` | `?int` | `null` | First page number this chunk spans (1-indexed). Only populated when page tracking is enabled in extraction configuration. |
| `lastPage` | `?int` | `null` | Last page number this chunk spans (1-indexed, equal to first_page for single-page chunks). Only populated when page tracking is enabled in extraction configuration. |
| `headingContext` | `?HeadingContext` | `/* serde(default) */` | Heading context when using Markdown chunker. Contains the heading hierarchy this chunk falls under. Only populated when `ChunkerType::Markdown` is used. |
| `imageIndices` | `array` | `/* serde(default) */` | Indices into `ExtractionResult.images` for images on pages covered by this chunk. Contains zero-based indices into the top-level `images` collection for every image whose `page_number` falls within `[first_page, last_page]`. Empty when image extraction is disabled or the chunk spans no pages with images. |
---
#### ChunkingConfig
Chunking configuration.
Configures text chunking for document content, including chunk size,
overlap, trimming behavior, and optional embeddings.
Use `..the default constructor` when constructing to allow for future field additions:
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `maxCharacters` | `int` | `1000` | Maximum size per chunk (in units determined by `sizing`). When `sizing` is `Characters` (default), this is the max character count. When using token-based sizing, this is the max token count. Default: 1000 |
| `overlap` | `int` | `200` | Overlap between chunks (in units determined by `sizing`). Default: 200 |
| `trim` | `bool` | `true` | Whether to trim whitespace from chunk boundaries. Default: true |
| `chunkerType` | `ChunkerType` | `ChunkerType::Text` | Type of chunker to use (Text or Markdown). Default: Text |
| `embedding` | `?EmbeddingConfig` | `null` | Optional embedding configuration for chunk embeddings. |
| `preset` | `?string` | `null` | Use a preset configuration (overrides individual settings if provided). |
| `sizing` | `ChunkSizing` | `ChunkSizing::Characters` | How to measure chunk size. Default: `Characters` (Unicode character count). Enable `chunking-tiktoken` or `chunking-tokenizers` features for token-based sizing. |
| `prependHeadingContext` | `bool` | `false` | When `true` and `chunker_type` is `Markdown`, prepend the heading hierarchy path (e.g. `"# Title > ## Section\n\n"`) to each chunk's content string. This is useful for RAG pipelines where each chunk needs self-contained context about its position in the document structure. Default: `false` |
| `topicThreshold` | `?float` | `null` | Optional cosine similarity threshold for semantic topic boundary detection. Only used when `chunker_type` is `Semantic` and an `EmbeddingConfig` is provided. You almost never need to set this. When omitted, defaults to `0.75` which works well for most documents. Lower values detect more topic boundaries (more, smaller chunks); higher values detect fewer. Range: `0.0..=1.0`. |
### Methods
#### default()
**Signature:**
```php
public static function default(): ChunkingConfig
```
---
#### CitationMetadata
Citation file metadata (RIS, PubMed, EndNote).
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `citationCount` | `int` | — | Number of citations |
| `format` | `?string` | `null` | Format |
| `authors` | `array` | `[]` | Authors |
| `yearRange` | `?YearRange` | `null` | Year range (year range) |
| `dois` | `array` | `[]` | Dois |
| `keywords` | `array` | `[]` | Keywords |
---
#### ContentFilterConfig
Cross-extractor content filtering configuration.
Controls whether "furniture" content (headers, footers, page numbers,
watermarks, repeating text) is included in or stripped from extraction
results. Applies across all extractors (PDF, DOCX, RTF, ODT, HTML, etc.)
with format-specific implementation.
When `null` on `ExtractionConfig`, each extractor uses its current
default behavior unchanged.
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `includeHeaders` | `bool` | `false` | Include running headers in extraction output. - PDF: Disables top-margin furniture stripping and prevents the layout model from treating `PageHeader`-classified regions as furniture. - DOCX: Includes document headers in text output. - RTF/ODT: Headers already included; this is a no-op when true. - HTML/EPUB: Keeps `` element content. Default: `false` (headers are stripped or excluded). |
| `includeFooters` | `bool` | `false` | Include running footers in extraction output. - PDF: Disables bottom-margin furniture stripping and prevents the layout model from treating `PageFooter`-classified regions as furniture. - DOCX: Includes document footers in text output. - RTF/ODT: Footers already included; this is a no-op when true. - HTML/EPUB: Keeps `