AiProcessingSettings
Settings for AiProcessing. 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, Advanced
from nutrient_sdk import AiProcessingSettingsConstruction
AiProcessingSettings 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.ai_processing_settings settings.some_field = new_value # mutate fields directly
# SDK-wide default (applies to all documents)SdkSettings.ai_processing_settings.some_field = new_valueSettings are configured by writing to fields on the returned object. The settings property itself cannot be reassigned — doc.settings.ai_processing_settings = other_settings is rejected.
Properties
ai_provider
@propertydef ai_provider(self) -> VlmProvider
@ai_provider.setterdef ai_provider(self, value: VlmProvider) -> NoneThe primary AI provider for extraction/classification. Uses the same VlmProvider vocabulary as the vision pipeline, so its connection (endpoint, key, model) is read from the matching per-provider settings class (OpenAIApiEndpointSettings / GoogleApiSettings / AnthropicApiSettings / CustomVlmApiSettings) — the single place a provider is configured for every AI module.
Type: VlmProvider
Default: VlmProvider.Unknown
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
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
fallback_ai_provider
@propertydef fallback_ai_provider(self) -> VlmProvider
@fallback_ai_provider.setterdef fallback_ai_provider(self, value: VlmProvider) -> NoneOptional secondary AI provider used to transparently retry a request when the primary AiProvider returns no content (content filtering) or is temporarily unavailable. Its connection is read from the matching per-provider settings class. Only consulted when AiProvider is set; a value of Unknown (the default), or one equal to AiProvider, disables fallback.
Type: VlmProvider
Default: VlmProvider.Unknown
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
Default: false
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
Default: false
include_groundedness
@propertydef include_groundedness(self) -> bool
@include_groundedness.setterdef include_groundedness(self, value: bool) -> NoneDaemon-level default for whether the NLI groundedness score is computed and surfaced as the primary confidence.groundedness (schema v2 only). It runs one ONNX forward pass per cited field, so it defaults to false to keep latency predictable; turn it on per request via includeGroundedness. Has no effect under schema v1 or when IncludeConfidence is off.
Type: bool
Default: false
include_page_images
@propertydef include_page_images(self) -> bool
@include_page_images.setterdef include_page_images(self, value: bool) -> NoneOpt-in (default false): when true, every page of the source document is rendered to an image and sent to the model alongside the IR-lite text (multimodal extraction). The text stays authoritative for source grounding; images add a visual signal. There is no page cap — large documents are fit to the model’s context window by windowing across multiple calls, not by dropping pages. A per-request includePageImages action parameter overrides it.
Type: bool
Default: false
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
Default: true
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. 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
Default: 100_000
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 MaxInputTokens); 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
Default: 4
metadata_schema_version
@propertydef metadata_schema_version(self) -> int
@metadata_schema_version.setterdef metadata_schema_version(self, value: int) -> NoneDaemon-level default for the result.json metadata schema version: 1 = the legacy flat shape (per-field match / confidenceComponents / opt-in composite confidence); 2 = the simplified citation + confidence shape (primary groundedness, ocr, boolean schemaValid). Defaults to 1 for backward compatibility; a per-request metadataSchemaVersion overrides it.
Type: int
Default: 1
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
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
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
Default: true
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]
unparseable_output_handling
@propertydef unparseable_output_handling(self) -> UnparseableOutputHandling
@unparseable_output_handling.setterdef unparseable_output_handling(self, value: UnparseableOutputHandling) -> NoneHow extraction responds when the model’s output never parses against the requested schema. Default keeps each API surface’s own behavior (the SDK’s structured-extraction API fails with a descriptive error; server pipelines return an empty result with warnings). Set Fail or ReturnEmpty to force one behavior everywhere. A per-request onFailureReturnEmptyJson action parameter overrides it.
Type: UnparseableOutputHandling
Default: UnparseableOutputHandling.Default