001package com.box.sdkgen.schemas.aiextractstructured;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.schemas.aiagentextractstructured.AiAgentExtractStructured;
006import com.box.sdkgen.schemas.aiagentreference.AiAgentReference;
007import com.box.sdkgen.schemas.aiextractstructuredagent.AiExtractStructuredAgent;
008import com.box.sdkgen.schemas.aiitembase.AiItemBase;
009import com.fasterxml.jackson.annotation.JsonFilter;
010import com.fasterxml.jackson.annotation.JsonProperty;
011import java.util.List;
012import java.util.Objects;
013
014/** AI Extract Structured Request object. */
015@JsonFilter("nullablePropertyFilter")
016public class AiExtractStructured extends SerializableObject {
017
018  /** The items to be processed by the LLM. Currently you can use files only. */
019  protected final List<AiItemBase> items;
020
021  /**
022   * The metadata template containing the fields to extract. For your request to work, you must
023   * provide either `metadata_template` or `fields`, but not both.
024   */
025  @JsonProperty("metadata_template")
026  protected AiExtractStructuredMetadataTemplateField metadataTemplate;
027
028  /**
029   * The fields to be extracted from the provided items. For your request to work, you must provide
030   * either `metadata_template` or `fields`, but not both.
031   */
032  protected List<AiExtractStructuredFieldsField> fields;
033
034  @JsonProperty("ai_agent")
035  protected AiExtractStructuredAgent aiAgent;
036
037  /** A flag to indicate whether confidence scores for every extracted field should be returned. */
038  @JsonProperty("include_confidence_score")
039  protected Boolean includeConfidenceScore;
040
041  /** A flag to indicate whether references for every extracted field should be returned. */
042  @JsonProperty("include_reference")
043  protected Boolean includeReference;
044
045  public AiExtractStructured(@JsonProperty("items") List<AiItemBase> items) {
046    super();
047    this.items = items;
048  }
049
050  protected AiExtractStructured(Builder builder) {
051    super();
052    this.items = builder.items;
053    this.metadataTemplate = builder.metadataTemplate;
054    this.fields = builder.fields;
055    this.aiAgent = builder.aiAgent;
056    this.includeConfidenceScore = builder.includeConfidenceScore;
057    this.includeReference = builder.includeReference;
058    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
059  }
060
061  public List<AiItemBase> getItems() {
062    return items;
063  }
064
065  public AiExtractStructuredMetadataTemplateField getMetadataTemplate() {
066    return metadataTemplate;
067  }
068
069  public List<AiExtractStructuredFieldsField> getFields() {
070    return fields;
071  }
072
073  public AiExtractStructuredAgent getAiAgent() {
074    return aiAgent;
075  }
076
077  public Boolean getIncludeConfidenceScore() {
078    return includeConfidenceScore;
079  }
080
081  public Boolean getIncludeReference() {
082    return includeReference;
083  }
084
085  @Override
086  public boolean equals(Object o) {
087    if (this == o) {
088      return true;
089    }
090    if (o == null || getClass() != o.getClass()) {
091      return false;
092    }
093    AiExtractStructured casted = (AiExtractStructured) o;
094    return Objects.equals(items, casted.items)
095        && Objects.equals(metadataTemplate, casted.metadataTemplate)
096        && Objects.equals(fields, casted.fields)
097        && Objects.equals(aiAgent, casted.aiAgent)
098        && Objects.equals(includeConfidenceScore, casted.includeConfidenceScore)
099        && Objects.equals(includeReference, casted.includeReference);
100  }
101
102  @Override
103  public int hashCode() {
104    return Objects.hash(
105        items, metadataTemplate, fields, aiAgent, includeConfidenceScore, includeReference);
106  }
107
108  @Override
109  public String toString() {
110    return "AiExtractStructured{"
111        + "items='"
112        + items
113        + '\''
114        + ", "
115        + "metadataTemplate='"
116        + metadataTemplate
117        + '\''
118        + ", "
119        + "fields='"
120        + fields
121        + '\''
122        + ", "
123        + "aiAgent='"
124        + aiAgent
125        + '\''
126        + ", "
127        + "includeConfidenceScore='"
128        + includeConfidenceScore
129        + '\''
130        + ", "
131        + "includeReference='"
132        + includeReference
133        + '\''
134        + "}";
135  }
136
137  public static class Builder extends NullableFieldTracker {
138
139    protected final List<AiItemBase> items;
140
141    protected AiExtractStructuredMetadataTemplateField metadataTemplate;
142
143    protected List<AiExtractStructuredFieldsField> fields;
144
145    protected AiExtractStructuredAgent aiAgent;
146
147    protected Boolean includeConfidenceScore;
148
149    protected Boolean includeReference;
150
151    public Builder(List<AiItemBase> items) {
152      super();
153      this.items = items;
154    }
155
156    public Builder metadataTemplate(AiExtractStructuredMetadataTemplateField metadataTemplate) {
157      this.metadataTemplate = metadataTemplate;
158      return this;
159    }
160
161    public Builder fields(List<AiExtractStructuredFieldsField> fields) {
162      this.fields = fields;
163      return this;
164    }
165
166    public Builder aiAgent(AiAgentReference aiAgent) {
167      this.aiAgent = new AiExtractStructuredAgent(aiAgent);
168      return this;
169    }
170
171    public Builder aiAgent(AiAgentExtractStructured aiAgent) {
172      this.aiAgent = new AiExtractStructuredAgent(aiAgent);
173      return this;
174    }
175
176    public Builder aiAgent(AiExtractStructuredAgent aiAgent) {
177      this.aiAgent = aiAgent;
178      return this;
179    }
180
181    public Builder includeConfidenceScore(Boolean includeConfidenceScore) {
182      this.includeConfidenceScore = includeConfidenceScore;
183      return this;
184    }
185
186    public Builder includeReference(Boolean includeReference) {
187      this.includeReference = includeReference;
188      return this;
189    }
190
191    public AiExtractStructured build() {
192      return new AiExtractStructured(this);
193    }
194  }
195}