in go/controlled_generation.go [239:305]
func XEnum() (*genai.GenerateContentResponse, error) {
// [START x_enum]
ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GEMINI_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
if err != nil {
log.Fatal(err)
}
// Choice is a custom type representing a musical instrument category.
type Choice string
const (
Percussion Choice = "Percussion"
String Choice = "String"
Woodwind Choice = "Woodwind"
Brass Choice = "Brass"
Keyboard Choice = "Keyboard"
)
// Define a schema restricting the response to the allowed Choice enum values.
schema := &genai.Schema{
Type: genai.TypeString,
Enum: []string{
string(Percussion),
string(String),
string(Woodwind),
string(Brass),
string(Keyboard),
},
}
config := &genai.GenerateContentConfig{
ResponseMIMEType: "text/x.enum",
ResponseSchema: schema,
}
file, err := client.Files.UploadFromPath(
ctx,
filepath.Join(getMedia(), "organ.jpg"),
&genai.UploadFileConfig{
MIMEType : "image/jpeg",
},
)
if err != nil {
log.Fatal(err)
}
parts := []*genai.Part{
genai.NewPartFromText("What kind of instrument is this:"),
genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
response, err := client.Models.GenerateContent(ctx, "gemini-2.0-flash",
contents,
config,
)
if err != nil {
log.Fatal(err)
}
printResponse(response)
// [END x_enum]
return response, err
}