From 3ec22b0daa1fa02d2d345c693d6e31a923645656 Mon Sep 17 00:00:00 2001 From: Abhishek Padariya Date: Sun, 11 Jan 2026 21:09:23 -0800 Subject: [PATCH] feat: Add ModelArmorConfig support for prompt and response sanitization via the Model Armor service PiperOrigin-RevId: 855031541 --- src/main/java/com/google/genai/Batches.java | 5 + src/main/java/com/google/genai/Models.java | 12 ++ .../genai/types/GenerateContentConfig.java | 37 ++++++ .../google/genai/types/ModelArmorConfig.java | 108 ++++++++++++++++++ 4 files changed, 162 insertions(+) create mode 100644 src/main/java/com/google/genai/types/ModelArmorConfig.java diff --git a/src/main/java/com/google/genai/Batches.java b/src/main/java/com/google/genai/Batches.java index 192faa17f65..20a897b0203 100644 --- a/src/main/java/com/google/genai/Batches.java +++ b/src/main/java/com/google/genai/Batches.java @@ -1257,6 +1257,11 @@ ObjectNode generateContentConfigToMldev( Common.getValueByPath(fromObject, new String[] {"enableEnhancedCivicAnswers"})); } + if (!Common.isZero(Common.getValueByPath(fromObject, new String[] {"modelArmorConfig"}))) { + throw new IllegalArgumentException( + "modelArmorConfig parameter is not supported in Gemini API."); + } + return toObject; } diff --git a/src/main/java/com/google/genai/Models.java b/src/main/java/com/google/genai/Models.java index 156c48e8891..2ccb6e7f1de 100644 --- a/src/main/java/com/google/genai/Models.java +++ b/src/main/java/com/google/genai/Models.java @@ -1379,6 +1379,11 @@ ObjectNode generateContentConfigToMldev( Common.getValueByPath(fromObject, new String[] {"enableEnhancedCivicAnswers"})); } + if (!Common.isZero(Common.getValueByPath(fromObject, new String[] {"modelArmorConfig"}))) { + throw new IllegalArgumentException( + "modelArmorConfig parameter is not supported in Gemini API."); + } + return toObject; } @@ -1601,6 +1606,13 @@ ObjectNode generateContentConfigToVertex( "enableEnhancedCivicAnswers parameter is not supported in Vertex AI."); } + if (Common.getValueByPath(fromObject, new String[] {"modelArmorConfig"}) != null) { + Common.setValueByPath( + parentObject, + new String[] {"modelArmorConfig"}, + Common.getValueByPath(fromObject, new String[] {"modelArmorConfig"})); + } + return toObject; } diff --git a/src/main/java/com/google/genai/types/GenerateContentConfig.java b/src/main/java/com/google/genai/types/GenerateContentConfig.java index e22cf8b4c29..013712839ef 100644 --- a/src/main/java/com/google/genai/types/GenerateContentConfig.java +++ b/src/main/java/com/google/genai/types/GenerateContentConfig.java @@ -233,6 +233,13 @@ public abstract class GenerateContentConfig extends JsonSerializable { @JsonProperty("enableEnhancedCivicAnswers") public abstract Optional enableEnhancedCivicAnswers(); + /** + * Settings for prompt and response sanitization using the Model Armor service. If supplied, + * safety_settings must not be supplied. + */ + @JsonProperty("modelArmorConfig") + public abstract Optional modelArmorConfig(); + /** Instantiates a builder for GenerateContentConfig. */ @ExcludeFromGeneratedCoverageReport public static Builder builder() { @@ -1067,6 +1074,36 @@ public Builder clearEnableEnhancedCivicAnswers() { return enableEnhancedCivicAnswers(Optional.empty()); } + /** + * Setter for modelArmorConfig. + * + *

modelArmorConfig: Settings for prompt and response sanitization using the Model Armor + * service. If supplied, safety_settings must not be supplied. + */ + @JsonProperty("modelArmorConfig") + public abstract Builder modelArmorConfig(ModelArmorConfig modelArmorConfig); + + /** + * Setter for modelArmorConfig builder. + * + *

modelArmorConfig: Settings for prompt and response sanitization using the Model Armor + * service. If supplied, safety_settings must not be supplied. + */ + @CanIgnoreReturnValue + public Builder modelArmorConfig(ModelArmorConfig.Builder modelArmorConfigBuilder) { + return modelArmorConfig(modelArmorConfigBuilder.build()); + } + + @ExcludeFromGeneratedCoverageReport + abstract Builder modelArmorConfig(Optional modelArmorConfig); + + /** Clears the value of modelArmorConfig field. */ + @ExcludeFromGeneratedCoverageReport + @CanIgnoreReturnValue + public Builder clearModelArmorConfig() { + return modelArmorConfig(Optional.empty()); + } + public abstract GenerateContentConfig build(); } diff --git a/src/main/java/com/google/genai/types/ModelArmorConfig.java b/src/main/java/com/google/genai/types/ModelArmorConfig.java new file mode 100644 index 00000000000..80875b4df03 --- /dev/null +++ b/src/main/java/com/google/genai/types/ModelArmorConfig.java @@ -0,0 +1,108 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Auto-generated code. Do not edit. + +package com.google.genai.types; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.google.auto.value.AutoValue; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import com.google.genai.JsonSerializable; +import java.util.Optional; + +/** + * Configuration for Model Armor integrations of prompt and responses. This data type is not + * supported in Gemini API. + */ +@AutoValue +@JsonDeserialize(builder = ModelArmorConfig.Builder.class) +public abstract class ModelArmorConfig extends JsonSerializable { + /** Optional. The name of the Model Armor template to use for prompt sanitization. */ + @JsonProperty("promptTemplateName") + public abstract Optional promptTemplateName(); + + /** Optional. The name of the Model Armor template to use for response sanitization. */ + @JsonProperty("responseTemplateName") + public abstract Optional responseTemplateName(); + + /** Instantiates a builder for ModelArmorConfig. */ + @ExcludeFromGeneratedCoverageReport + public static Builder builder() { + return new AutoValue_ModelArmorConfig.Builder(); + } + + /** Creates a builder with the same values as this instance. */ + public abstract Builder toBuilder(); + + /** Builder for ModelArmorConfig. */ + @AutoValue.Builder + public abstract static class Builder { + /** For internal usage. Please use `ModelArmorConfig.builder()` for instantiation. */ + @JsonCreator + private static Builder create() { + return new AutoValue_ModelArmorConfig.Builder(); + } + + /** + * Setter for promptTemplateName. + * + *

promptTemplateName: Optional. The name of the Model Armor template to use for prompt + * sanitization. + */ + @JsonProperty("promptTemplateName") + public abstract Builder promptTemplateName(String promptTemplateName); + + @ExcludeFromGeneratedCoverageReport + abstract Builder promptTemplateName(Optional promptTemplateName); + + /** Clears the value of promptTemplateName field. */ + @ExcludeFromGeneratedCoverageReport + @CanIgnoreReturnValue + public Builder clearPromptTemplateName() { + return promptTemplateName(Optional.empty()); + } + + /** + * Setter for responseTemplateName. + * + *

responseTemplateName: Optional. The name of the Model Armor template to use for response + * sanitization. + */ + @JsonProperty("responseTemplateName") + public abstract Builder responseTemplateName(String responseTemplateName); + + @ExcludeFromGeneratedCoverageReport + abstract Builder responseTemplateName(Optional responseTemplateName); + + /** Clears the value of responseTemplateName field. */ + @ExcludeFromGeneratedCoverageReport + @CanIgnoreReturnValue + public Builder clearResponseTemplateName() { + return responseTemplateName(Optional.empty()); + } + + public abstract ModelArmorConfig build(); + } + + /** Deserializes a JSON string to a ModelArmorConfig object. */ + @ExcludeFromGeneratedCoverageReport + public static ModelArmorConfig fromJson(String jsonString) { + return JsonSerializable.fromJsonString(jsonString, ModelArmorConfig.class); + } +}