Settings for Extract. Values fall back through three levels: document → SDK → built-in default. Writes target the document only when set on a document’s settings, otherwise the SDK globally when set on SdkSettings.
Tags: Vision
from nutrient_sdk import ExtractSettingsConstruction
ExtractSettings is accessed through a Document instance for per-document overrides, or via SdkSettings for SDK-wide defaults.
# Per-document overridewith Document.open("input.pdf") as doc: settings = doc.settings.extract_settings settings.some_field = new_value # mutate fields directly
# SDK-wide default (applies to all documents)SdkSettings.extract_settings.some_field = new_valueSettings are configured by writing to fields on the returned object. The settings property itself cannot be reassigned — doc.settings.extract_settings = other_settings is rejected.
Properties
api_key
@propertydef api_key(self) -> str
@api_key.setterdef api_key(self, value: str) -> NoneAPI key for the configured provider. Legacy flat connection (see provider).
Type: str
enable_complex_field_grounding
@propertydef enable_complex_field_grounding(self) -> Optional[bool]
@enable_complex_field_grounding.setterdef enable_complex_field_grounding(self, value: Optional[bool]) -> NoneWhen true, score leaves whose value sits inside a repeated array/object element through the nutrient-document-decision GGUF model instead of the heuristic hypothesis path, giving it the leaf’s real JSON row context. Requires includeGroundedness and metadataSchemaVersion=2. Resolved from the CDN; falls back to the heuristic path on any failure. Defaults to false.
Type: Optional[bool]
endpoint
@propertydef endpoint(self) -> str
@endpoint.setterdef endpoint(self, value: str) -> NoneEndpoint URL. Required for the local provider. Optional for openai — supply it to route through an OpenAI-compatible proxy/gateway; the public OpenAI endpoint is used when unset. Optional for anthropic (defaults to the public Anthropic base when unset). When set, must be a valid absolute URL. Legacy flat connection (see provider).
Type: str
extraction_schema
@propertydef extraction_schema(self) -> str
@extraction_schema.setterdef extraction_schema(self, value: str) -> NoneCaller-supplied JSON Schema (inline content) describing the extraction output shape. Mutually exclusive with extractionSchemaFile.
Type: str
extraction_schema_file
@propertydef extraction_schema_file(self) -> str
@extraction_schema_file.setterdef extraction_schema_file(self, value: str) -> NonePath to a file containing the JSON Schema for extraction output. Mutually exclusive with extractionSchema.
Type: str
include_composite_confidence
@propertydef include_composite_confidence(self) -> bool
@include_composite_confidence.setterdef include_composite_confidence(self, value: bool) -> None(Schema v1 only.) Daemon-level default for whether the legacy rolled-up composite number is attached to result.json metadata leaves as confidence. No effect under schema v2 (the composite is internal-only there). Defaults to false; a per-request includeCompositeConfidence action parameter overrides it.
Type: bool
include_confidence
@propertydef include_confidence(self) -> bool
@include_confidence.setterdef include_confidence(self, value: bool) -> NoneDaemon-level default for whether AI processing capacities emit confidence output - the confidence.json sidecar and the per-field confidence signals on result.json metadata. Defaults to false (off); a per-request includeConfidence action parameter overrides it.
Type: bool
include_diagnostics
@propertydef include_diagnostics(self) -> Optional[bool]
@include_diagnostics.setterdef include_diagnostics(self, value: Optional[bool]) -> NoneWhen true, emit diagnostics.json as an additional artifact alongside result.json, including silentDrops: parsed table blocks that nothing in the result cites.
Type: Optional[bool]
include_page_images
@propertydef include_page_images(self) -> bool
@include_page_images.setterdef include_page_images(self, value: bool) -> NoneWhen true, every page of the source document is rendered to an image and sent to the model alongside the IR-lite text (multimodal extraction); there is no page cap, as large documents are fit to the model’s context window by windowing across multiple calls, not by dropping pages. When false (the default), only the pages whose text holds a chart or a picture (other than a logo, an icon or a bar or QR code) are rendered and sent, because what those pages draw is not in their text. That default applies to OpenAI’s own API only: at most 40 pages are imaged, their images are compacted when needed to fit 16 MiB per document, and a request the provider rejects with them is retried text-only. Either way, for a gpt-6 model on OpenAI’s own API a strip page (its rendered long side over 4,096 pixels and at least three times its short side), such as a well log or a time-location chart, is sent as overlapping tiles of about 1,024 pixels near its rendered resolution instead of one image the provider would scale down; by default up to 10 such pages are imaged even without a chart or a picture (not in a spreadsheet), besides the 40 pages, and their tiles count against the 16 MiB. The text stays authoritative for source grounding; images add a visual signal. A per-request includePageImages action parameter overrides it.
Type: bool
include_source_locations
@propertydef include_source_locations(self) -> bool
@include_source_locations.setterdef include_source_locations(self, value: bool) -> NoneWhether extraction grounds each extracted field back to its source location in the document — the metadata node of result.json with per-field match labels and source bounding boxes. Defaults to true. Turn off to cut model token usage when only the extracted values matter: grounding mirrors the schema in the structured-output request so the model also returns per-field source ids. A per-request includeSourceLocations action parameter overrides it.
Type: bool
instructions
@propertydef instructions(self) -> str
@instructions.setterdef instructions(self, value: str) -> NoneOptional caller hint appended to the extraction prompt.
Type: str
max_attempts
@propertydef max_attempts(self) -> Optional[int]
@max_attempts.setterdef max_attempts(self, value: Optional[int]) -> NoneMaximum retry attempts on structured-output failure. null uses the capacity default of 1. Provider-independent — applies regardless of how the connection is configured.
Type: Optional[int]
max_input_tokens
@propertydef max_input_tokens(self) -> int
@max_input_tokens.setterdef max_input_tokens(self, value: int) -> NoneInput-token budget per model call. When the estimated input (schema + IR-lite text + page images) exceeds this, the document is split into page-level windows that each fit, extracted independently, and merged — so a large document never hard-fails on the provider’s context limit. For gpt-6 on OpenAI’s own API, a call that carries image tiles carries at most 16 MiB of images, past which the document is windowed too, and a strip page sent as tiles (see include_page_images) whose cost alone exceeds the budget while its text fits still goes in one call, of up to 450,000 tokens, rather than lose its tiles. Defaults to 100000, a conservative value that fits common model context windows while leaving room for output; raise it for large-context models. A per-request maxInputTokens action parameter overrides it.
Type: int
max_parallel_calls
@propertydef max_parallel_calls(self) -> int
@max_parallel_calls.setterdef max_parallel_calls(self, value: int) -> NoneMaximum number of windowed extraction calls to run concurrently. Only applies when a large document is split into page-level windows (see max_input_tokens); each window is an independent VLM call, so running several at once is a large wall-clock win. Defaults to 4 — a balance between throughput and provider rate limits; raise it for large-context keys, lower it (or set 1 for fully sequential) if you hit rate limits. A per-request maxParallelCalls action parameter overrides it.
Type: int
model
@propertydef model(self) -> str
@model.setterdef model(self, value: str) -> NoneModel identifier (e.g. "gpt-4o" or a local model id). Legacy flat connection (see provider).
Type: str
output_directory
@propertydef output_directory(self) -> str
@output_directory.setterdef output_directory(self, value: str) -> NoneDirectory to write all emitted artifacts to (optional). Each artifact is written under its artifact name, for example result.json.
Type: str
output_file_path
@propertydef output_file_path(self) -> str
@output_file_path.setterdef output_file_path(self, value: str) -> NonePath to write the single emitted artifact to a file (optional). Fails if the run emits multiple artifacts.
Type: str
provider
@propertydef provider(self) -> str
@provider.setterdef provider(self, value: str) -> NoneProvider discriminator. One of "openai", "local" (custom OpenAI-compatible endpoint), or "anthropic" (alias "claude", native Anthropic Messages API).
Type: str
reasoning_effort
@propertydef reasoning_effort(self) -> str
@reasoning_effort.setterdef reasoning_effort(self, value: str) -> NoneReasoning budget for reasoning models: ‘default’ (leave the provider’s own budget in force), ‘none’, ‘minimal’, ‘low’, ‘medium’, ‘high’, or ‘xhigh’. Which values a model accepts is decided by the provider. Unset, an OpenAI reasoning model on OpenAI’s own API (the o-series, gpt-5 and gpt-6) gets ‘high’, which lets it work out totals and other computed values; pass ‘default’ to keep the provider’s own budget.
Type: str
strict_structured_output
@propertydef strict_structured_output(self) -> bool
@strict_structured_output.setterdef strict_structured_output(self, value: bool) -> NoneDefault true: structured output runs in the provider’s strict mode — the response is grammar-constrained to the schema, which is normalized automatically (additionalProperties: false, all properties required, unsupported keywords moved into descriptions). On by default because the schema is otherwise only advisory: without strict, the provider compiles no decoding grammar and nothing stops the model returning a payload that doesn’t match, which is what produced “AI processing failed to produce valid JSON” failures in production. Note that under strict mode the model must emit every schema property — absence stays expressible because optional properties are made nullable before the schema reaches the provider. Set to false, or pass the per-request strictStructuredOutput action parameter, to opt back out.
Type: bool
temperature
@propertydef temperature(self) -> Optional[float]
@temperature.setterdef temperature(self, value: Optional[float]) -> NoneSampling temperature passed to the model. null uses the provider default. Legacy flat connection (see provider).
Type: Optional[float]