Package genai is a client for the generative VertexAI model.
Constants
BlockedReasonSafety, BlockedReasonOther
const (
BlockedReasonSafety = BlockedReason(pb.GenerateContentResponse_PromptFeedback_SAFETY)
BlockedReasonOther = BlockedReason(pb.GenerateContentResponse_PromptFeedback_OTHER)
)
Constants for BlockedReason.
HarmCategoryHateSpeech, HarmCategoryDangerousContent, HarmCategoryHarassment, HarmCategorySexuallyExplicit
const (
HarmCategoryHateSpeech = HarmCategory(pb.HarmCategory_HARM_CATEGORY_HATE_SPEECH)
HarmCategoryDangerousContent = HarmCategory(pb.HarmCategory_HARM_CATEGORY_DANGEROUS_CONTENT)
HarmCategoryHarassment = HarmCategory(pb.HarmCategory_HARM_CATEGORY_HARASSMENT)
HarmCategorySexuallyExplicit = HarmCategory(pb.HarmCategory_HARM_CATEGORY_SEXUALLY_EXPLICIT)
)
Constants for HarmCategory.
HarmBlockLowAndAbove, HarmBlockMediumAndAbove, HarmBlockOnlyHigh, HarmBlockNone
const (
HarmBlockLowAndAbove = HarmBlockThreshold(pb.SafetySetting_BLOCK_LOW_AND_ABOVE)
HarmBlockMediumAndAbove = HarmBlockThreshold(pb.SafetySetting_BLOCK_MEDIUM_AND_ABOVE)
HarmBlockOnlyHigh = HarmBlockThreshold(pb.SafetySetting_BLOCK_ONLY_HIGH)
HarmBlockNone = HarmBlockThreshold(pb.SafetySetting_BLOCK_NONE)
)
Constants for HarmBlock.
HarmProbabilityNegligible, HarmProbabilityLow, HarmProbabilityMedium, HarmProbabilityHigh
const (
HarmProbabilityNegligible = HarmProbability(pb.SafetyRating_NEGLIGIBLE)
HarmProbabilityLow = HarmProbability(pb.SafetyRating_LOW)
HarmProbabilityMedium = HarmProbability(pb.SafetyRating_MEDIUM)
HarmProbabilityHigh = HarmProbability(pb.SafetyRating_HIGH)
)
Constants for HarmProbability.
FinishReasonUnspecified, FinishReasonStop, FinishReasonMaxTokens, FinishReasonSafety, FinishReasonRecitation, FinishReasonOther
const (
FinishReasonUnspecified = FinishReason(pb.Candidate_FINISH_REASON_UNSPECIFIED)
FinishReasonStop = FinishReason(pb.Candidate_STOP)
FinishReasonMaxTokens = FinishReason(pb.Candidate_MAX_TOKENS)
FinishReasonSafety = FinishReason(pb.Candidate_SAFETY)
FinishReasonRecitation = FinishReason(pb.Candidate_RECITATION)
FinishReasonOther = FinishReason(pb.Candidate_OTHER)
)
Constants for FinishReason.
Blob
Blob doc TBD.
func ImageData
ImageData is a convenience function for creating an image Blob for input to a model. The format should be the second part of the MIME type, after "image/". For example, for a PNG image, pass "png".
BlockedError
type BlockedError struct {
// If non-nil, the model's response was blocked.
// Consult the Candidate and SafetyRatings fields for details.
Candidate *Candidate
// If non-nil, there was a problem with the prompt.
PromptFeedback *PromptFeedback
}
A BlockedError indicates that the model's response was blocked. There can be two underlying causes: the prompt or a candidate response.
func (*BlockedError) Error
func (e *BlockedError) Error() string
BlockedReason
type BlockedReason int32
BlockedReason doc TBD.
Candidate
type Candidate struct {
Index int32
Content *Content
FinishReason FinishReason
//FinishMessage string
SafetyRatings []*SafetyRating
CitationMetadata *CitationMetadata
}
Candidate doc TBD.
ChatSession
type ChatSession struct {
History []*Content
// contains filtered or unexported fields
}
A ChatSession provides interactive chat.
Example
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/vertexai/genai"
"google.golang.org/api/iterator"
)
const projectID = "your-project"
const model = "some-model"
const location = "some-location"
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, projectID, location)
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel(model)
cs := model.StartChat()
send := func(msg string) *genai.GenerateContentResponse {
fmt.Printf("== Me: %s\n== Model:\n", msg)
res, err := cs.SendMessage(ctx, genai.Text(msg))
if err != nil {
log.Fatal(err)
}
return res
}
res := send("Can you name some brands of air fryer?")
printResponse(res)
iter := cs.SendMessageStream(ctx, genai.Text("Which one of those do you recommend?"))
for {
res, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
printResponse(res)
}
for i, c := range cs.History {
log.Printf(" %d: %+v", i, c)
}
res = send("Why do you like the Philips?")
if err != nil {
log.Fatal(err)
}
printResponse(res)
}
func printResponse(resp *genai.GenerateContentResponse) {
for _, cand := range resp.Candidates {
for _, part := range cand.Content.Parts {
fmt.Println(part)
}
}
fmt.Println("---")
}
func (*ChatSession) SendMessage
func (cs *ChatSession) SendMessage(ctx context.Context, parts ...Part) (*GenerateContentResponse, error)
SendMessage sends a request to the model as part of a chat session.
func (*ChatSession) SendMessageStream
func (cs *ChatSession) SendMessageStream(ctx context.Context, parts ...Part) *GenerateContentResponseIterator
SendMessageStream is like SendMessage, but with a streaming request.
Citation
type Citation struct {
StartIndex, EndIndex int32
URI string
Title string
License string
PublicationDate civil.Date
}
Citation doc TBD.
CitationMetadata
type CitationMetadata struct {
Citations []*Citation
}
CitationMetadata doc TBD.
Client
type Client struct {
// contains filtered or unexported fields
}
A Client is a Google Vertex AI client.
func NewClient
func NewClient(ctx context.Context, projectID, location string, opts ...option.ClientOption) (*Client, error)
NewClient creates a new Google Vertex AI client.
Clients should be reused instead of created as needed. The methods of Client are safe for concurrent use by multiple goroutines.
You may configure the client by passing in options from the [google.golang.org/api/option] package.
func (*Client) Close
Close closes the client.
func (*Client) GenerativeModel
func (c *Client) GenerativeModel(name string) *GenerativeModel
GenerativeModel creates a new instance of the named model.
Content
Content doc TBD.
FileData
FileData doc TBD.
FinishReason
type FinishReason int32
FinishReason doc TBD.
func (FinishReason) MarshalJSON
func (f FinishReason) MarshalJSON() ([]byte, error)
MarshalJSON implements [encoding/json.Marshaler].
func (FinishReason) String
func (f FinishReason) String() string
GenerateContentResponse
type GenerateContentResponse struct {
Candidates []*Candidate
PromptFeedback *PromptFeedback
}
GenerateContentResponse is the response from a GenerateContent or GenerateContentStream call.
GenerateContentResponseIterator
type GenerateContentResponseIterator struct {
// contains filtered or unexported fields
}
GenerateContentResponseIterator is an iterator over GnerateContentResponse.
func (*GenerateContentResponseIterator) Next
func (iter *GenerateContentResponseIterator) Next() (*GenerateContentResponse, error)
Next returns the next response.
GenerationConfig
type GenerationConfig struct {
Temperature float32
TopP float32 // if non-zero, use nucleus sampling
TopK float32 // if non-zero, use top-K sampling
CandidateCount int32
MaxOutputTokens int32
StopSequences []string
Logprobs int32
PresencePenalty float32
FrequencyPenalty float32
LogitBias map[string]float32
Echo bool
}
GenerationConfig doc TBD.
GenerativeModel
type GenerativeModel struct {
GenerationConfig
SafetySettings []*SafetySetting
// contains filtered or unexported fields
}
GenerativeModel is a model that can generate text. Create one with [Client.GenerativeModel], then configure it by setting the exported fields.
The model holds all the config for a GenerateContentRequest, so the GenerateContent method can use a vararg for the content.
func (*GenerativeModel) GenerateContent
func (m *GenerativeModel) GenerateContent(ctx context.Context, parts ...Part) (*GenerateContentResponse, error)
GenerateContent produces a single request and response.
Example
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/vertexai/genai"
)
const projectID = "your-project"
const model = "some-model"
const location = "some-location"
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, projectID, location)
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel(model)
model.Temperature = 0.9
resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
if err != nil {
log.Fatal(err)
}
printResponse(resp)
}
func printResponse(resp *genai.GenerateContentResponse) {
for _, cand := range resp.Candidates {
for _, part := range cand.Content.Parts {
fmt.Println(part)
}
}
fmt.Println("---")
}
func (*GenerativeModel) GenerateContentStream
func (m *GenerativeModel) GenerateContentStream(ctx context.Context, parts ...Part) *GenerateContentResponseIterator
GenerateContentStream returns an iterator that enumerates responses.
Example
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/vertexai/genai"
"google.golang.org/api/iterator"
)
const projectID = "your-project"
const model = "some-model"
const location = "some-location"
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, projectID, location)
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel(model)
iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
for {
resp, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
printResponse(resp)
}
}
func printResponse(resp *genai.GenerateContentResponse) {
for _, cand := range resp.Candidates {
for _, part := range cand.Content.Parts {
fmt.Println(part)
}
}
fmt.Println("---")
}
func (*GenerativeModel) Name
func (m *GenerativeModel) Name() string
Name returns the name of the model.
func (*GenerativeModel) StartChat
func (m *GenerativeModel) StartChat() *ChatSession
StartChat starts a chat session.
HarmBlockThreshold
type HarmBlockThreshold int32
HarmBlockThreshold doc TBD.
HarmCategory
type HarmCategory int32
HarmCategory doc TBD.
HarmProbability
type HarmProbability int32
HarmProbability doc TBD.
Part
type Part interface {
// contains filtered or unexported methods
}
A Part is either a Text, a Blob, or a FileData.
PromptFeedback
type PromptFeedback struct {
BlockReason BlockedReason
BlockReasonMessage string
SafetyRatings []*SafetyRating
}
PromptFeedback is feedback about a prompt.
SafetyRating
type SafetyRating struct {
Category HarmCategory
Probability HarmProbability
Blocked bool
}
SafetyRating doc TBD.
SafetySetting
type SafetySetting struct {
Category HarmCategory
Threshold HarmBlockThreshold
}
SafetySetting doc TBD.
Text
type Text string
Text doc TBD.