modelarmor/quickstart/quickstart.go (87 lines of code) (raw):
// 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.
// [START modelarmor_quickstart]
package main
import (
"context"
"fmt"
modelarmor "cloud.google.com/go/modelarmor/apiv1"
modelarmorpb "cloud.google.com/go/modelarmor/apiv1/modelarmorpb"
"google.golang.org/api/option"
)
// Modelarmor quickstart demonstrates how to create a Model Armor template and use it to
// sanitize a user prompt and a model response.
func main() {
// Google Project ID
projectID := "your-project-id"
// Google Cloud Location
locationID := "us-central1"
// ID For The Model Armor Template To Create
templateID := "go-template"
ctx := context.Background()
// Initialize Client
opts := option.WithEndpoint(fmt.Sprintf("modelarmor.%s.rep.googleapis.com:443", locationID))
client, err := modelarmor.NewClient(ctx, opts)
if err != nil {
wrappedErr := fmt.Errorf("failed to create client: %w", err)
fmt.Println(wrappedErr)
}
defer client.Close()
// Setup Template
parent := fmt.Sprintf("projects/%s/locations/%s", projectID, locationID)
// Template for Model Armor API requests.
// This template defines a filter configuration that detects and filters out
// sensitive content, including hate speech, harassment, sexually explicit content,
// and dangerous content.
template := &modelarmorpb.Template{
FilterConfig: &modelarmorpb.FilterConfig{
RaiSettings: &modelarmorpb.RaiFilterSettings{
// Define individual filters for sensitive content detection
RaiFilters: []*modelarmorpb.RaiFilterSettings_RaiFilter{
// Filter for detecting dangerous content with high confidence level
{
FilterType: modelarmorpb.RaiFilterType_DANGEROUS,
ConfidenceLevel: modelarmorpb.DetectionConfidenceLevel_HIGH,
},
// Filter for detecting harassment with medium and above confidence level
{
FilterType: modelarmorpb.RaiFilterType_HARASSMENT,
ConfidenceLevel: modelarmorpb.DetectionConfidenceLevel_MEDIUM_AND_ABOVE,
},
// Filter for detecting hate speech with high confidence level
{
FilterType: modelarmorpb.RaiFilterType_HATE_SPEECH,
ConfidenceLevel: modelarmorpb.DetectionConfidenceLevel_MEDIUM_AND_ABOVE,
},
// Filter for detecting sexually explicit content with high confidence level
{
FilterType: modelarmorpb.RaiFilterType_SEXUALLY_EXPLICIT,
ConfidenceLevel: modelarmorpb.DetectionConfidenceLevel_MEDIUM_AND_ABOVE,
},
},
},
},
}
req := &modelarmorpb.CreateTemplateRequest{
Parent: parent,
TemplateId: templateID,
Template: template,
}
createdTemplate, err := client.CreateTemplate(ctx, req)
if err != nil {
wrappedErr := fmt.Errorf("Failed to create template: %w", err)
fmt.Println(wrappedErr)
}
fmt.Printf("Created template: %s\n", createdTemplate.Name)
// Sanitize a user prompt using the created template
userPrompt := "Unsafe user prompt"
userPromptSanitizeReq := &modelarmorpb.SanitizeUserPromptRequest{
Name: fmt.Sprintf("projects/%s/locations/%s/templates/%s", projectID, locationID, templateID),
UserPromptData: &modelarmorpb.DataItem{
DataItem: &modelarmorpb.DataItem_Text{
Text: userPrompt,
},
},
}
userPromptSanitizeResp, err := client.SanitizeUserPrompt(ctx, userPromptSanitizeReq)
if err != nil {
wrappedErr := fmt.Errorf("failed to sanitize user prompt: %w", err)
fmt.Println(wrappedErr)
}
fmt.Printf("Result for User Prompt Sanitization: %v\n", userPromptSanitizeResp.SanitizationResult)
// Sanitize a model response using the created template
modelResponse := "Unsanitized model output"
sanitizeModelRespReq := &modelarmorpb.SanitizeModelResponseRequest{
Name: fmt.Sprintf("projects/%s/locations/%s/templates/%s", projectID, locationID, templateID),
ModelResponseData: &modelarmorpb.DataItem{
DataItem: &modelarmorpb.DataItem_Text{
Text: modelResponse,
},
},
}
// Sanitize Model Response
sanitizeModelRespResp, err := client.SanitizeModelResponse(ctx, sanitizeModelRespReq)
if err != nil {
wrappedErr := fmt.Errorf("failed to sanitize model response: %w", err)
fmt.Println(wrappedErr)
}
fmt.Printf("Result for Model Response Sanitization: %v\n", sanitizeModelRespResp.SanitizationResult)
}
// [END modelarmor_quickstart]