Skip to content

feat(modelarmor): Added floor settings snippets #10066

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions modelarmor/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Google Model Armor

<a href="https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/java-docs-samples&page=editor&open_in_editor=modelarmor/README.md">
<img alt="Open in Cloud Shell" src ="http://gstatic.com/cloudssh/images/open-btn.png"></a>

Google Model Armor is a fully managed Google Cloud service that enhances the security and safety of AI applications by screening LLM prompts and responses for various security and safety risks. [More Details](https://cloud.google.com/security-command-center/docs/model-armor-overview)

These sample Java code snippets demonstrate how to access the Model Armor API using the Google Java API Client Libraries.

## Prerequisites

### Enable the API

The following page details the permissions required for Model Armor and provides instructions for enabling and disabling Model Armor:
[Enable Model Armor API](https://cloud.google.com/security-command-center/docs/get-started-model-armor#enable-model-armor)

### Grant Permissions
You must ensure that the [user account or service account](https://cloud.google.com/iam/docs/service-accounts#differences_between_a_service_account_and_a_user_account) you used to authorize your gcloud session has the proper permissions to edit Secret Manager resources for your project. In the Cloud Console under IAM, add the following roles to the project whose service account you're using to test:
* Model Armor Admin (roles/modelarmor.admin)
* Floor Settings Admin (modelarmor.floorSettingsAdmin)

More information can be found in the [Model Armor Docs](https://cloud.google.com/security-command-center/docs/get-started-model-armor#required_permissions)

### Set Environment Variables

You must set your project ID to run the tests:
```shell
export GOOGLE_CLOUD_PROJECT=<your-project-id-here>
```
112 changes: 112 additions & 0 deletions modelarmor/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<!--
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

http://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.
-->

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.modelarmor</groupId>
<artifactId>modelarmor-samples</artifactId>
<packaging>jar</packaging>

<!--
The parent pom defines common style checks and testing strategies for our samples.
Removing or replacing it should not affect the execution of the samples in anyway.
-->
<parent>
<groupId>com.google.cloud.samples</groupId>
<artifactId>shared-configuration</artifactId>
<version>1.2.0</version>
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.59.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-modelarmor</artifactId>
</dependency>

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dlp</artifactId>
</dependency>

<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>

<!-- test dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.truth</groupId>
<artifactId>truth</artifactId>
<version>1.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>11</source> <!-- depending on your project -->
<target>11</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

</project>
45 changes: 45 additions & 0 deletions modelarmor/src/main/java/modelarmor/GetFolderFloorSettings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* 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
*
* http://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.
*/

package modelarmor;

import com.google.cloud.modelarmor.v1.FloorSetting;
import com.google.cloud.modelarmor.v1.FloorSettingName;
import com.google.cloud.modelarmor.v1.GetFloorSettingRequest;
import com.google.cloud.modelarmor.v1.ModelArmorClient;
import com.google.protobuf.util.JsonFormat;

public class GetFolderFloorSettings {

public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String folderId = "your-folder-id";

getFolderFloorSettings(folderId);
}

public static void getFolderFloorSettings(String folderId) throws Exception {

try (ModelArmorClient client = ModelArmorClient.create()) {
String name = FloorSettingName.of(folderId, "global").toString();
GetFloorSettingRequest request = GetFloorSettingRequest.newBuilder()
.setName(name)
.build();
FloorSetting response = client.getFloorSetting(request);
System.out.println("Folder Floor Settings: " + JsonFormat.printer().print(response));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* 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
*
* http://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.
*/

package modelarmor;

import com.google.cloud.modelarmor.v1.FloorSetting;
import com.google.cloud.modelarmor.v1.FloorSettingName;
import com.google.cloud.modelarmor.v1.GetFloorSettingRequest;
import com.google.cloud.modelarmor.v1.ModelArmorClient;
import com.google.protobuf.util.JsonFormat;

public class GetOrganizationFloorSettings {

public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String organizationId = "your-organization-id";

getOrganizationFloorSettings(organizationId);
}

public static void getOrganizationFloorSettings(String organizationId) throws Exception {

try (ModelArmorClient client = ModelArmorClient.create()) {
String name =
FloorSettingName.ofOrganizationLocationName(organizationId, "global").toString();
GetFloorSettingRequest request = GetFloorSettingRequest.newBuilder().setName(name).build();
FloorSetting response = client.getFloorSetting(request);
System.out.println("Organization Floor Settings: " + JsonFormat.printer().print(response));
}
}
}
45 changes: 45 additions & 0 deletions modelarmor/src/main/java/modelarmor/GetProjectFloorSettings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* 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
*
* http://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.
*/

package modelarmor;

import com.google.cloud.modelarmor.v1.FloorSetting;
import com.google.cloud.modelarmor.v1.FloorSettingName;
import com.google.cloud.modelarmor.v1.GetFloorSettingRequest;
import com.google.cloud.modelarmor.v1.ModelArmorClient;
import com.google.protobuf.util.JsonFormat;

public class GetProjectFloorSettings {

public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-project-id";

getProjectFloorSettings(projectId);
}

public static void getProjectFloorSettings(String projectId) throws Exception {

try (ModelArmorClient client = ModelArmorClient.create()) {
String name = FloorSettingName.of(projectId, "global").toString();
GetFloorSettingRequest request = GetFloorSettingRequest.newBuilder()
.setName(name)
.build();
FloorSetting response = client.getFloorSetting(request);
System.out.println("Project Floor Settings: " + JsonFormat.printer().print(response));
}
}
}
77 changes: 77 additions & 0 deletions modelarmor/src/main/java/modelarmor/UpdateFolderFloorSettings.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* 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
*
* http://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.
*/

package modelarmor;

import com.google.cloud.modelarmor.v1.DetectionConfidenceLevel;
import com.google.cloud.modelarmor.v1.FilterConfig;
import com.google.cloud.modelarmor.v1.FloorSetting;
import com.google.cloud.modelarmor.v1.FloorSettingName;
import com.google.cloud.modelarmor.v1.ModelArmorClient;
import com.google.cloud.modelarmor.v1.RaiFilterSettings;
import com.google.cloud.modelarmor.v1.RaiFilterSettings.RaiFilter;
import com.google.cloud.modelarmor.v1.RaiFilterType;
import com.google.cloud.modelarmor.v1.UpdateFloorSettingRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.JsonFormat;
import java.util.Arrays;

public class UpdateFolderFloorSettings {

public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String folderId = "your-folder-id";

updateFolderFloorSettings(folderId);
}

public static void updateFolderFloorSettings(String folderId) throws Exception {

try (ModelArmorClient client = ModelArmorClient.create()) {
String name = FloorSettingName.ofFolderLocationName(folderId, "global").toString();

FloorSetting folderFloorSettings = FloorSetting.newBuilder()
.setName(name)
.setFilterConfig(
FilterConfig.newBuilder()
.setRaiSettings(
RaiFilterSettings.newBuilder()
.addAllRaiFilters(
Arrays.asList(
RaiFilter.newBuilder()
.setFilterType(RaiFilterType.DANGEROUS)
.setConfidenceLevel(
DetectionConfidenceLevel.HIGH)
.build(),
RaiFilter.newBuilder()
.setFilterType(RaiFilterType.HARASSMENT)
.setConfidenceLevel(
DetectionConfidenceLevel.MEDIUM_AND_ABOVE)
.build()))
.build())
.build())
.build();

UpdateFloorSettingRequest request = UpdateFloorSettingRequest.newBuilder()
.setFloorSetting(folderFloorSettings)
.setUpdateMask(FieldMask.newBuilder().addPaths("filter_config").build())
.build();

FloorSetting response = client.updateFloorSetting(request);
System.out.println("Updated Folder Floor Settings: " + JsonFormat.printer().print(response));
}
}
}
Loading