// 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 package dev.kreuzberg; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import org.jspecify.annotations.Nullable; /** * Configuration for LLM-based structured data extraction. * * Sends extracted document content to a VLM with a JSON schema, * returning structured data that conforms to the schema. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = StructuredExtractionConfig.Builder.class) public record StructuredExtractionConfig( /** * JSON Schema defining the desired output structure. */ @JsonProperty("schema") JsonNode schema, /** * Schema name passed to the LLM's structured output mode. */ @Nullable @JsonProperty("schema_name") String schemaName, /** * Optional schema description for the LLM. */ @Nullable @JsonProperty("schema_description") String schemaDescription, /** * Enable strict mode — output must exactly match the schema. */ @Nullable @JsonProperty("strict") Boolean strict, /** * Custom Jinja2 extraction prompt template. When {@code None}, a default template is used. * * Available template variables: * - {@code {{ content }}} — The extracted document text. * - {@code {{ schema }}} — The JSON schema as a formatted string. * - {@code {{ schema_name }}} — The schema name. * - {@code {{ schema_description }}} — The schema description (may be empty). */ @Nullable @JsonProperty("prompt") String prompt, /** * LLM configuration for the extraction. */ @JsonProperty("llm") LlmConfig llm ) { public static Builder builder() { return new Builder(); } // CPD-OFF @JsonPOJOBuilder(withPrefix = "with", buildMethodName = "build") public static final class Builder { private JsonNode schema = null; @JsonProperty("schema_name") private String schemaName = null; @JsonProperty("schema_description") private String schemaDescription = null; private Boolean strict = null; private String prompt = null; private LlmConfig llm = null; /** Sets the schema field. */ @JsonProperty("schema") public Builder withSchema(final JsonNode value) { this.schema = value; return this; } /** Sets the schemaName field. */ @JsonProperty("schema_name") public Builder withSchemaName(final @Nullable String value) { this.schemaName = value; return this; } /** Sets the schemaDescription field. */ @JsonProperty("schema_description") public Builder withSchemaDescription(final @Nullable String value) { this.schemaDescription = value; return this; } /** Sets the strict field. */ @JsonProperty("strict") public Builder withStrict(final @Nullable Boolean value) { this.strict = value; return this; } /** Sets the prompt field. */ @JsonProperty("prompt") public Builder withPrompt(final @Nullable String value) { this.prompt = value; return this; } /** Sets the llm field. */ @JsonProperty("llm") public Builder withLlm(final LlmConfig value) { this.llm = value; return this; } /** Builds the StructuredExtractionConfig instance. */ public StructuredExtractionConfig build() { return new StructuredExtractionConfig( schema, schemaName, schemaDescription, strict, prompt, llm ); } } // CPD-ON }