1786 lines
55 KiB
Go
1786 lines
55 KiB
Go
// Copyright 2024 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.
|
|
|
|
// This file was generated by protoveneer. DO NOT EDIT.
|
|
|
|
package genai
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
pb "cloud.google.com/go/ai/generativelanguage/apiv1beta/generativelanguagepb"
|
|
"github.com/googleapis/gax-go/v2/apierror"
|
|
spb "google.golang.org/genproto/googleapis/rpc/status"
|
|
gstatus "google.golang.org/grpc/status"
|
|
"google.golang.org/protobuf/types/known/durationpb"
|
|
"google.golang.org/protobuf/types/known/structpb"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
// BatchEmbedContentsResponse is the response to a `BatchEmbedContentsRequest`.
|
|
type BatchEmbedContentsResponse struct {
|
|
// Output only. The embeddings for each request, in the same order as provided
|
|
// in the batch request.
|
|
Embeddings []*ContentEmbedding
|
|
}
|
|
|
|
func (v *BatchEmbedContentsResponse) toProto() *pb.BatchEmbedContentsResponse {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.BatchEmbedContentsResponse{
|
|
Embeddings: pvTransformSlice(v.Embeddings, (*ContentEmbedding).toProto),
|
|
}
|
|
}
|
|
|
|
func (BatchEmbedContentsResponse) fromProto(p *pb.BatchEmbedContentsResponse) *BatchEmbedContentsResponse {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &BatchEmbedContentsResponse{
|
|
Embeddings: pvTransformSlice(p.Embeddings, (ContentEmbedding{}).fromProto),
|
|
}
|
|
}
|
|
|
|
// Blob contains raw media bytes.
|
|
//
|
|
// Text should not be sent as raw bytes, use the 'text' field.
|
|
type Blob struct {
|
|
// The IANA standard MIME type of the source data.
|
|
// Examples:
|
|
// - image/png
|
|
// - image/jpeg
|
|
//
|
|
// If an unsupported MIME type is provided, an error will be returned. For a
|
|
// complete list of supported types, see [Supported file
|
|
// formats](https://ai.google.dev/gemini-api/docs/prompting_with_media#supported_file_formats).
|
|
MIMEType string
|
|
// Raw bytes for media formats.
|
|
Data []byte
|
|
}
|
|
|
|
func (v *Blob) toProto() *pb.Blob {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Blob{
|
|
MimeType: v.MIMEType,
|
|
Data: v.Data,
|
|
}
|
|
}
|
|
|
|
func (Blob) fromProto(p *pb.Blob) *Blob {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &Blob{
|
|
MIMEType: p.MimeType,
|
|
Data: p.Data,
|
|
}
|
|
}
|
|
|
|
// BlockReason is specifies what was the reason why prompt was blocked.
|
|
type BlockReason int32
|
|
|
|
const (
|
|
// BlockReasonUnspecified means default value. This value is unused.
|
|
BlockReasonUnspecified BlockReason = 0
|
|
// BlockReasonSafety means prompt was blocked due to safety reasons. You can inspect
|
|
// `safety_ratings` to understand which safety category blocked it.
|
|
BlockReasonSafety BlockReason = 1
|
|
// BlockReasonOther means prompt was blocked due to unknown reasons.
|
|
BlockReasonOther BlockReason = 2
|
|
)
|
|
|
|
var namesForBlockReason = map[BlockReason]string{
|
|
BlockReasonUnspecified: "BlockReasonUnspecified",
|
|
BlockReasonSafety: "BlockReasonSafety",
|
|
BlockReasonOther: "BlockReasonOther",
|
|
}
|
|
|
|
func (v BlockReason) String() string {
|
|
if n, ok := namesForBlockReason[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("BlockReason(%d)", v)
|
|
}
|
|
|
|
// CachedContent is content that has been preprocessed and can be used in subsequent request
|
|
// to GenerativeService.
|
|
//
|
|
// Cached content can be only used with model it was created for.
|
|
type CachedContent struct {
|
|
// Specifies when this resource will expire.
|
|
//
|
|
// Types that are assignable to Expiration:
|
|
//
|
|
// *CachedContent_ExpireTime
|
|
// *CachedContent_Ttl
|
|
Expiration ExpireTimeOrTTL
|
|
// Optional. Identifier. The resource name referring to the cached content.
|
|
// Format: `cachedContents/{id}`
|
|
Name string
|
|
// Optional. Immutable. The user-generated meaningful display name of the
|
|
// cached content. Maximum 128 Unicode characters.
|
|
DisplayName string
|
|
// Required. Immutable. The name of the `Model` to use for cached content
|
|
// Format: `models/{model}`
|
|
Model string
|
|
// Optional. Input only. Immutable. Developer set system instruction.
|
|
// Currently text only.
|
|
SystemInstruction *Content
|
|
// Optional. Input only. Immutable. The content to cache.
|
|
Contents []*Content
|
|
// Optional. Input only. Immutable. A list of `Tools` the model may use to
|
|
// generate the next response
|
|
Tools []*Tool
|
|
// Optional. Input only. Immutable. Tool config. This config is shared for all
|
|
// tools.
|
|
ToolConfig *ToolConfig
|
|
// Output only. Creation time of the cache entry.
|
|
CreateTime time.Time
|
|
// Output only. When the cache entry was last updated in UTC time.
|
|
UpdateTime time.Time
|
|
// Output only. Metadata on the usage of the cached content.
|
|
UsageMetadata *CachedContentUsageMetadata
|
|
}
|
|
|
|
func (v *CachedContent) toProto() *pb.CachedContent {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
p := &pb.CachedContent{
|
|
Name: pvAddrOrNil(v.Name),
|
|
DisplayName: pvAddrOrNil(v.DisplayName),
|
|
Model: pvAddrOrNil(v.Model),
|
|
SystemInstruction: v.SystemInstruction.toProto(),
|
|
Contents: pvTransformSlice(v.Contents, (*Content).toProto),
|
|
Tools: pvTransformSlice(v.Tools, (*Tool).toProto),
|
|
ToolConfig: v.ToolConfig.toProto(),
|
|
CreateTime: pvTimeToProto(v.CreateTime),
|
|
UpdateTime: pvTimeToProto(v.UpdateTime),
|
|
UsageMetadata: v.UsageMetadata.toProto(),
|
|
}
|
|
populateCachedContentTo(p, v)
|
|
return p
|
|
}
|
|
|
|
func (CachedContent) fromProto(p *pb.CachedContent) *CachedContent {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
v := &CachedContent{
|
|
Name: pvDerefOrZero(p.Name),
|
|
DisplayName: pvDerefOrZero(p.DisplayName),
|
|
Model: pvDerefOrZero(p.Model),
|
|
SystemInstruction: (Content{}).fromProto(p.SystemInstruction),
|
|
Contents: pvTransformSlice(p.Contents, (Content{}).fromProto),
|
|
Tools: pvTransformSlice(p.Tools, (Tool{}).fromProto),
|
|
ToolConfig: (ToolConfig{}).fromProto(p.ToolConfig),
|
|
CreateTime: pvTimeFromProto(p.CreateTime),
|
|
UpdateTime: pvTimeFromProto(p.UpdateTime),
|
|
UsageMetadata: (CachedContentUsageMetadata{}).fromProto(p.UsageMetadata),
|
|
}
|
|
populateCachedContentFrom(v, p)
|
|
return v
|
|
}
|
|
|
|
// CachedContentUsageMetadata is metadata on the usage of the cached content.
|
|
type CachedContentUsageMetadata struct {
|
|
// Total number of tokens that the cached content consumes.
|
|
TotalTokenCount int32
|
|
}
|
|
|
|
func (v *CachedContentUsageMetadata) toProto() *pb.CachedContent_UsageMetadata {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CachedContent_UsageMetadata{
|
|
TotalTokenCount: v.TotalTokenCount,
|
|
}
|
|
}
|
|
|
|
func (CachedContentUsageMetadata) fromProto(p *pb.CachedContent_UsageMetadata) *CachedContentUsageMetadata {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CachedContentUsageMetadata{
|
|
TotalTokenCount: p.TotalTokenCount,
|
|
}
|
|
}
|
|
|
|
// Candidate is a response candidate generated from the model.
|
|
type Candidate struct {
|
|
// Output only. Index of the candidate in the list of candidates.
|
|
Index int32
|
|
// Output only. Generated content returned from the model.
|
|
Content *Content
|
|
// Optional. Output only. The reason why the model stopped generating tokens.
|
|
//
|
|
// If empty, the model has not stopped generating the tokens.
|
|
FinishReason FinishReason
|
|
// List of ratings for the safety of a response candidate.
|
|
//
|
|
// There is at most one rating per category.
|
|
SafetyRatings []*SafetyRating
|
|
// Output only. Citation information for model-generated candidate.
|
|
//
|
|
// This field may be populated with recitation information for any text
|
|
// included in the `content`. These are passages that are "recited" from
|
|
// copyrighted material in the foundational LLM's training data.
|
|
CitationMetadata *CitationMetadata
|
|
// Output only. Token count for this candidate.
|
|
TokenCount int32
|
|
}
|
|
|
|
func (v *Candidate) toProto() *pb.Candidate {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Candidate{
|
|
Index: pvAddrOrNil(v.Index),
|
|
Content: v.Content.toProto(),
|
|
FinishReason: pb.Candidate_FinishReason(v.FinishReason),
|
|
SafetyRatings: pvTransformSlice(v.SafetyRatings, (*SafetyRating).toProto),
|
|
CitationMetadata: v.CitationMetadata.toProto(),
|
|
TokenCount: v.TokenCount,
|
|
}
|
|
}
|
|
|
|
func (Candidate) fromProto(p *pb.Candidate) *Candidate {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &Candidate{
|
|
Index: pvDerefOrZero(p.Index),
|
|
Content: (Content{}).fromProto(p.Content),
|
|
FinishReason: FinishReason(p.FinishReason),
|
|
SafetyRatings: pvTransformSlice(p.SafetyRatings, (SafetyRating{}).fromProto),
|
|
CitationMetadata: (CitationMetadata{}).fromProto(p.CitationMetadata),
|
|
TokenCount: p.TokenCount,
|
|
}
|
|
}
|
|
|
|
// CitationMetadata is a collection of source attributions for a piece of content.
|
|
type CitationMetadata struct {
|
|
// Citations to sources for a specific response.
|
|
CitationSources []*CitationSource
|
|
}
|
|
|
|
func (v *CitationMetadata) toProto() *pb.CitationMetadata {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CitationMetadata{
|
|
CitationSources: pvTransformSlice(v.CitationSources, (*CitationSource).toProto),
|
|
}
|
|
}
|
|
|
|
func (CitationMetadata) fromProto(p *pb.CitationMetadata) *CitationMetadata {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CitationMetadata{
|
|
CitationSources: pvTransformSlice(p.CitationSources, (CitationSource{}).fromProto),
|
|
}
|
|
}
|
|
|
|
// CitationSource contains a citation to a source for a portion of a specific response.
|
|
type CitationSource struct {
|
|
// Optional. Start of segment of the response that is attributed to this
|
|
// source.
|
|
//
|
|
// Index indicates the start of the segment, measured in bytes.
|
|
StartIndex *int32
|
|
// Optional. End of the attributed segment, exclusive.
|
|
EndIndex *int32
|
|
// Optional. URI that is attributed as a source for a portion of the text.
|
|
URI *string
|
|
// Optional. License for the GitHub project that is attributed as a source for
|
|
// segment.
|
|
//
|
|
// License info is required for code citations.
|
|
License string
|
|
}
|
|
|
|
func (v *CitationSource) toProto() *pb.CitationSource {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CitationSource{
|
|
StartIndex: v.StartIndex,
|
|
EndIndex: v.EndIndex,
|
|
Uri: v.URI,
|
|
License: pvAddrOrNil(v.License),
|
|
}
|
|
}
|
|
|
|
func (CitationSource) fromProto(p *pb.CitationSource) *CitationSource {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CitationSource{
|
|
StartIndex: p.StartIndex,
|
|
EndIndex: p.EndIndex,
|
|
URI: p.Uri,
|
|
License: pvDerefOrZero(p.License),
|
|
}
|
|
}
|
|
|
|
// CodeExecution is tool that executes code generated by the model, and automatically returns
|
|
// the result to the model.
|
|
//
|
|
// See also `ExecutableCode` and `CodeExecutionResult` which are only generated
|
|
// when using this tool.
|
|
type CodeExecution struct {
|
|
}
|
|
|
|
func (v *CodeExecution) toProto() *pb.CodeExecution {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CodeExecution{}
|
|
}
|
|
|
|
func (CodeExecution) fromProto(p *pb.CodeExecution) *CodeExecution {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CodeExecution{}
|
|
}
|
|
|
|
// CodeExecutionResult is result of executing the `ExecutableCode`.
|
|
//
|
|
// Only generated when using the `CodeExecution`, and always follows a `part`
|
|
// containing the `ExecutableCode`.
|
|
type CodeExecutionResult struct {
|
|
// Required. Outcome of the code execution.
|
|
Outcome CodeExecutionResultOutcome
|
|
// Optional. Contains stdout when code execution is successful, stderr or
|
|
// other description otherwise.
|
|
Output string
|
|
}
|
|
|
|
func (v *CodeExecutionResult) toProto() *pb.CodeExecutionResult {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CodeExecutionResult{
|
|
Outcome: pb.CodeExecutionResult_Outcome(v.Outcome),
|
|
Output: v.Output,
|
|
}
|
|
}
|
|
|
|
func (CodeExecutionResult) fromProto(p *pb.CodeExecutionResult) *CodeExecutionResult {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CodeExecutionResult{
|
|
Outcome: CodeExecutionResultOutcome(p.Outcome),
|
|
Output: p.Output,
|
|
}
|
|
}
|
|
|
|
// CodeExecutionResultOutcome is enumeration of possible outcomes of the code execution.
|
|
type CodeExecutionResultOutcome int32
|
|
|
|
const (
|
|
// CodeExecutionResultOutcomeUnspecified means unspecified status. This value should not be used.
|
|
CodeExecutionResultOutcomeUnspecified CodeExecutionResultOutcome = 0
|
|
// CodeExecutionResultOutcomeOK means code execution completed successfully.
|
|
CodeExecutionResultOutcomeOK CodeExecutionResultOutcome = 1
|
|
// CodeExecutionResultOutcomeFailed means code execution finished but with a failure. `stderr` should contain the
|
|
// reason.
|
|
CodeExecutionResultOutcomeFailed CodeExecutionResultOutcome = 2
|
|
// CodeExecutionResultOutcomeDeadlineExceeded means code execution ran for too long, and was cancelled. There may or may not
|
|
// be a partial output present.
|
|
CodeExecutionResultOutcomeDeadlineExceeded CodeExecutionResultOutcome = 3
|
|
)
|
|
|
|
var namesForCodeExecutionResultOutcome = map[CodeExecutionResultOutcome]string{
|
|
CodeExecutionResultOutcomeUnspecified: "CodeExecutionResultOutcomeUnspecified",
|
|
CodeExecutionResultOutcomeOK: "CodeExecutionResultOutcomeOK",
|
|
CodeExecutionResultOutcomeFailed: "CodeExecutionResultOutcomeFailed",
|
|
CodeExecutionResultOutcomeDeadlineExceeded: "CodeExecutionResultOutcomeDeadlineExceeded",
|
|
}
|
|
|
|
func (v CodeExecutionResultOutcome) String() string {
|
|
if n, ok := namesForCodeExecutionResultOutcome[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("CodeExecutionResultOutcome(%d)", v)
|
|
}
|
|
|
|
// Content is the base structured datatype containing multi-part content of a message.
|
|
//
|
|
// A `Content` includes a `role` field designating the producer of the `Content`
|
|
// and a `parts` field containing multi-part data that contains the content of
|
|
// the message turn.
|
|
type Content struct {
|
|
// Ordered `Parts` that constitute a single message. Parts may have different
|
|
// MIME types.
|
|
Parts []Part
|
|
// Optional. The producer of the content. Must be either 'user' or 'model'.
|
|
//
|
|
// Useful to set for multi-turn conversations, otherwise can be left blank
|
|
// or unset.
|
|
Role string
|
|
}
|
|
|
|
func (v *Content) toProto() *pb.Content {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Content{
|
|
Parts: pvTransformSlice(v.Parts, partToProto),
|
|
Role: v.Role,
|
|
}
|
|
}
|
|
|
|
func (Content) fromProto(p *pb.Content) *Content {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &Content{
|
|
Parts: pvTransformSlice(p.Parts, partFromProto),
|
|
Role: p.Role,
|
|
}
|
|
}
|
|
|
|
// ContentEmbedding is a list of floats representing an embedding.
|
|
type ContentEmbedding struct {
|
|
// The embedding values.
|
|
Values []float32
|
|
}
|
|
|
|
func (v *ContentEmbedding) toProto() *pb.ContentEmbedding {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.ContentEmbedding{
|
|
Values: v.Values,
|
|
}
|
|
}
|
|
|
|
func (ContentEmbedding) fromProto(p *pb.ContentEmbedding) *ContentEmbedding {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &ContentEmbedding{
|
|
Values: p.Values,
|
|
}
|
|
}
|
|
|
|
// CountTokensResponse is a response from `CountTokens`.
|
|
//
|
|
// It returns the model's `token_count` for the `prompt`.
|
|
type CountTokensResponse struct {
|
|
// The number of tokens that the `model` tokenizes the `prompt` into.
|
|
//
|
|
// Always non-negative. When cached_content is set, this is still the total
|
|
// effective prompt size. I.e. this includes the number of tokens in the
|
|
// cached content.
|
|
TotalTokens int32
|
|
// Number of tokens in the cached part of the prompt, i.e. in the cached
|
|
// content.
|
|
CachedContentTokenCount int32
|
|
}
|
|
|
|
func (v *CountTokensResponse) toProto() *pb.CountTokensResponse {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.CountTokensResponse{
|
|
TotalTokens: v.TotalTokens,
|
|
CachedContentTokenCount: v.CachedContentTokenCount,
|
|
}
|
|
}
|
|
|
|
func (CountTokensResponse) fromProto(p *pb.CountTokensResponse) *CountTokensResponse {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &CountTokensResponse{
|
|
TotalTokens: p.TotalTokens,
|
|
CachedContentTokenCount: p.CachedContentTokenCount,
|
|
}
|
|
}
|
|
|
|
// EmbedContentResponse is the response to an `EmbedContentRequest`.
|
|
type EmbedContentResponse struct {
|
|
// Output only. The embedding generated from the input content.
|
|
Embedding *ContentEmbedding
|
|
}
|
|
|
|
func (v *EmbedContentResponse) toProto() *pb.EmbedContentResponse {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.EmbedContentResponse{
|
|
Embedding: v.Embedding.toProto(),
|
|
}
|
|
}
|
|
|
|
func (EmbedContentResponse) fromProto(p *pb.EmbedContentResponse) *EmbedContentResponse {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &EmbedContentResponse{
|
|
Embedding: (ContentEmbedding{}).fromProto(p.Embedding),
|
|
}
|
|
}
|
|
|
|
// ExecutableCode is code generated by the model that is meant to be executed, and the result
|
|
// returned to the model.
|
|
//
|
|
// Only generated when using the `CodeExecution` tool, in which the code will
|
|
// be automatically executed, and a corresponding `CodeExecutionResult` will
|
|
// also be generated.
|
|
type ExecutableCode struct {
|
|
// Required. Programming language of the `code`.
|
|
Language ExecutableCodeLanguage
|
|
// Required. The code to be executed.
|
|
Code string
|
|
}
|
|
|
|
func (v *ExecutableCode) toProto() *pb.ExecutableCode {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.ExecutableCode{
|
|
Language: pb.ExecutableCode_Language(v.Language),
|
|
Code: v.Code,
|
|
}
|
|
}
|
|
|
|
func (ExecutableCode) fromProto(p *pb.ExecutableCode) *ExecutableCode {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &ExecutableCode{
|
|
Language: ExecutableCodeLanguage(p.Language),
|
|
Code: p.Code,
|
|
}
|
|
}
|
|
|
|
// ExecutableCodeLanguage is supported programming languages for the generated code.
|
|
type ExecutableCodeLanguage int32
|
|
|
|
const (
|
|
// ExecutableCodeLanguageUnspecified means unspecified language. This value should not be used.
|
|
ExecutableCodeLanguageUnspecified ExecutableCodeLanguage = 0
|
|
// ExecutableCodePython means python >= 3.10, with numpy and simpy available.
|
|
ExecutableCodePython ExecutableCodeLanguage = 1
|
|
)
|
|
|
|
var namesForExecutableCodeLanguage = map[ExecutableCodeLanguage]string{
|
|
ExecutableCodeLanguageUnspecified: "ExecutableCodeLanguageUnspecified",
|
|
ExecutableCodePython: "ExecutableCodePython",
|
|
}
|
|
|
|
func (v ExecutableCodeLanguage) String() string {
|
|
if n, ok := namesForExecutableCodeLanguage[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("ExecutableCodeLanguage(%d)", v)
|
|
}
|
|
|
|
// File is a file uploaded to the API.
|
|
type File struct {
|
|
// Metadata for the File.
|
|
Metadata *FileMetadata
|
|
// Immutable. Identifier. The `File` resource name. The ID (name excluding the
|
|
// "files/" prefix) can contain up to 40 characters that are lowercase
|
|
// alphanumeric or dashes (-). The ID cannot start or end with a dash. If the
|
|
// name is empty on create, a unique name will be generated. Example:
|
|
// `files/123-456`
|
|
Name string
|
|
// Optional. The human-readable display name for the `File`. The display name
|
|
// must be no more than 512 characters in length, including spaces. Example:
|
|
// "Welcome Image"
|
|
DisplayName string
|
|
// Output only. MIME type of the file.
|
|
MIMEType string
|
|
// Output only. Size of the file in bytes.
|
|
SizeBytes int64
|
|
// Output only. The timestamp of when the `File` was created.
|
|
CreateTime time.Time
|
|
// Output only. The timestamp of when the `File` was last updated.
|
|
UpdateTime time.Time
|
|
// Output only. The timestamp of when the `File` will be deleted. Only set if
|
|
// the `File` is scheduled to expire.
|
|
ExpirationTime time.Time
|
|
// Output only. SHA-256 hash of the uploaded bytes.
|
|
Sha256Hash []byte
|
|
// Output only. The uri of the `File`.
|
|
URI string
|
|
// Output only. Processing state of the File.
|
|
State FileState
|
|
// Output only. Error status if File processing failed.
|
|
Error *apierror.APIError
|
|
}
|
|
|
|
func (v *File) toProto() *pb.File {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
p := &pb.File{
|
|
Name: v.Name,
|
|
DisplayName: v.DisplayName,
|
|
MimeType: v.MIMEType,
|
|
SizeBytes: v.SizeBytes,
|
|
CreateTime: pvTimeToProto(v.CreateTime),
|
|
UpdateTime: pvTimeToProto(v.UpdateTime),
|
|
ExpirationTime: pvTimeToProto(v.ExpirationTime),
|
|
Sha256Hash: v.Sha256Hash,
|
|
Uri: v.URI,
|
|
State: pb.File_State(v.State),
|
|
Error: pvAPIErrorToProto(v.Error),
|
|
}
|
|
populateFileTo(p, v)
|
|
return p
|
|
}
|
|
|
|
func (File) fromProto(p *pb.File) *File {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
v := &File{
|
|
Name: p.Name,
|
|
DisplayName: p.DisplayName,
|
|
MIMEType: p.MimeType,
|
|
SizeBytes: p.SizeBytes,
|
|
CreateTime: pvTimeFromProto(p.CreateTime),
|
|
UpdateTime: pvTimeFromProto(p.UpdateTime),
|
|
ExpirationTime: pvTimeFromProto(p.ExpirationTime),
|
|
Sha256Hash: p.Sha256Hash,
|
|
URI: p.Uri,
|
|
State: FileState(p.State),
|
|
Error: pvAPIErrorFromProto(p.Error),
|
|
}
|
|
populateFileFrom(v, p)
|
|
return v
|
|
}
|
|
|
|
// FileData is URI based data.
|
|
type FileData struct {
|
|
// The IANA standard MIME type of the source data.
|
|
// If present, this overrides the MIME type specified or inferred
|
|
// when the file was uploaded.
|
|
// The supported MIME types are documented on [this page].
|
|
//
|
|
// [this page]: https://ai.google.dev/gemini-api/docs/prompting_with_media?lang=go#supported_file_formats
|
|
MIMEType string
|
|
// The URI returned from UploadFile or GetFile.
|
|
URI string
|
|
}
|
|
|
|
func (v *FileData) toProto() *pb.FileData {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.FileData{
|
|
MimeType: v.MIMEType,
|
|
FileUri: v.URI,
|
|
}
|
|
}
|
|
|
|
func (FileData) fromProto(p *pb.FileData) *FileData {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &FileData{
|
|
MIMEType: p.MimeType,
|
|
URI: p.FileUri,
|
|
}
|
|
}
|
|
|
|
// FileState represents states for the lifecycle of a File.
|
|
type FileState int32
|
|
|
|
const (
|
|
// FileStateUnspecified means the default value. This value is used if the state is omitted.
|
|
FileStateUnspecified FileState = 0
|
|
// FileStateProcessing means file is being processed and cannot be used for inference yet.
|
|
FileStateProcessing FileState = 1
|
|
// FileStateActive means file is processed and available for inference.
|
|
FileStateActive FileState = 2
|
|
// FileStateFailed means file failed processing.
|
|
FileStateFailed FileState = 10
|
|
)
|
|
|
|
var namesForFileState = map[FileState]string{
|
|
FileStateUnspecified: "FileStateUnspecified",
|
|
FileStateProcessing: "FileStateProcessing",
|
|
FileStateActive: "FileStateActive",
|
|
FileStateFailed: "FileStateFailed",
|
|
}
|
|
|
|
func (v FileState) String() string {
|
|
if n, ok := namesForFileState[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("FileState(%d)", v)
|
|
}
|
|
|
|
// FinishReason is defines the reason why the model stopped generating tokens.
|
|
type FinishReason int32
|
|
|
|
const (
|
|
// FinishReasonUnspecified means default value. This value is unused.
|
|
FinishReasonUnspecified FinishReason = 0
|
|
// FinishReasonStop means natural stop point of the model or provided stop sequence.
|
|
FinishReasonStop FinishReason = 1
|
|
// FinishReasonMaxTokens means the maximum number of tokens as specified in the request was reached.
|
|
FinishReasonMaxTokens FinishReason = 2
|
|
// FinishReasonSafety means the candidate content was flagged for safety reasons.
|
|
FinishReasonSafety FinishReason = 3
|
|
// FinishReasonRecitation means the candidate content was flagged for recitation reasons.
|
|
FinishReasonRecitation FinishReason = 4
|
|
// FinishReasonOther means unknown reason.
|
|
FinishReasonOther FinishReason = 5
|
|
)
|
|
|
|
var namesForFinishReason = map[FinishReason]string{
|
|
FinishReasonUnspecified: "FinishReasonUnspecified",
|
|
FinishReasonStop: "FinishReasonStop",
|
|
FinishReasonMaxTokens: "FinishReasonMaxTokens",
|
|
FinishReasonSafety: "FinishReasonSafety",
|
|
FinishReasonRecitation: "FinishReasonRecitation",
|
|
FinishReasonOther: "FinishReasonOther",
|
|
}
|
|
|
|
func (v FinishReason) String() string {
|
|
if n, ok := namesForFinishReason[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("FinishReason(%d)", v)
|
|
}
|
|
|
|
// FunctionCall is a predicted `FunctionCall` returned from the model that contains
|
|
// a string representing the `FunctionDeclaration.name` with the
|
|
// arguments and their values.
|
|
type FunctionCall struct {
|
|
// Required. The name of the function to call.
|
|
// Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum
|
|
// length of 63.
|
|
Name string
|
|
// Optional. The function parameters and values in JSON object format.
|
|
Args map[string]any
|
|
}
|
|
|
|
func (v *FunctionCall) toProto() *pb.FunctionCall {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.FunctionCall{
|
|
Name: v.Name,
|
|
Args: pvMapToStructPB(v.Args),
|
|
}
|
|
}
|
|
|
|
func (FunctionCall) fromProto(p *pb.FunctionCall) *FunctionCall {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &FunctionCall{
|
|
Name: p.Name,
|
|
Args: pvMapFromStructPB(p.Args),
|
|
}
|
|
}
|
|
|
|
// FunctionCallingConfig holds configuration for function calling.
|
|
type FunctionCallingConfig struct {
|
|
// Optional. Specifies the mode in which function calling should execute. If
|
|
// unspecified, the default value will be set to AUTO.
|
|
Mode FunctionCallingMode
|
|
// Optional. A set of function names that, when provided, limits the functions
|
|
// the model will call.
|
|
//
|
|
// This should only be set when the Mode is ANY. Function names
|
|
// should match [FunctionDeclaration.name]. With mode set to ANY, model will
|
|
// predict a function call from the set of function names provided.
|
|
AllowedFunctionNames []string
|
|
}
|
|
|
|
func (v *FunctionCallingConfig) toProto() *pb.FunctionCallingConfig {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.FunctionCallingConfig{
|
|
Mode: pb.FunctionCallingConfig_Mode(v.Mode),
|
|
AllowedFunctionNames: v.AllowedFunctionNames,
|
|
}
|
|
}
|
|
|
|
func (FunctionCallingConfig) fromProto(p *pb.FunctionCallingConfig) *FunctionCallingConfig {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &FunctionCallingConfig{
|
|
Mode: FunctionCallingMode(p.Mode),
|
|
AllowedFunctionNames: p.AllowedFunctionNames,
|
|
}
|
|
}
|
|
|
|
// FunctionCallingMode is defines the execution behavior for function calling by defining the
|
|
// execution mode.
|
|
type FunctionCallingMode int32
|
|
|
|
const (
|
|
// FunctionCallingUnspecified means unspecified function calling mode. This value should not be used.
|
|
FunctionCallingUnspecified FunctionCallingMode = 0
|
|
// FunctionCallingAuto means default model behavior, model decides to predict either a function call
|
|
// or a natural language response.
|
|
FunctionCallingAuto FunctionCallingMode = 1
|
|
// FunctionCallingAny means model is constrained to always predicting a function call only.
|
|
// If "allowed_function_names" are set, the predicted function call will be
|
|
// limited to any one of "allowed_function_names", else the predicted
|
|
// function call will be any one of the provided "function_declarations".
|
|
FunctionCallingAny FunctionCallingMode = 2
|
|
// FunctionCallingNone means model will not predict any function call. Model behavior is same as when
|
|
// not passing any function declarations.
|
|
FunctionCallingNone FunctionCallingMode = 3
|
|
)
|
|
|
|
var namesForFunctionCallingMode = map[FunctionCallingMode]string{
|
|
FunctionCallingUnspecified: "FunctionCallingUnspecified",
|
|
FunctionCallingAuto: "FunctionCallingAuto",
|
|
FunctionCallingAny: "FunctionCallingAny",
|
|
FunctionCallingNone: "FunctionCallingNone",
|
|
}
|
|
|
|
func (v FunctionCallingMode) String() string {
|
|
if n, ok := namesForFunctionCallingMode[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("FunctionCallingMode(%d)", v)
|
|
}
|
|
|
|
// FunctionDeclaration is structured representation of a function declaration as defined by the
|
|
// [OpenAPI 3.03 specification](https://spec.openapis.org/oas/v3.0.3). Included
|
|
// in this declaration are the function name and parameters. This
|
|
// FunctionDeclaration is a representation of a block of code that can be used
|
|
// as a `Tool` by the model and executed by the client.
|
|
type FunctionDeclaration struct {
|
|
// Required. The name of the function.
|
|
// Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum
|
|
// length of 63.
|
|
Name string
|
|
// Required. A brief description of the function.
|
|
Description string
|
|
// Optional. Describes the parameters to this function. Reflects the Open
|
|
// API 3.03 Parameter Object string Key: the name of the parameter. Parameter
|
|
// names are case sensitive. Schema Value: the Schema defining the type used
|
|
// for the parameter.
|
|
Parameters *Schema
|
|
}
|
|
|
|
func (v *FunctionDeclaration) toProto() *pb.FunctionDeclaration {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.FunctionDeclaration{
|
|
Name: v.Name,
|
|
Description: v.Description,
|
|
Parameters: v.Parameters.toProto(),
|
|
}
|
|
}
|
|
|
|
func (FunctionDeclaration) fromProto(p *pb.FunctionDeclaration) *FunctionDeclaration {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &FunctionDeclaration{
|
|
Name: p.Name,
|
|
Description: p.Description,
|
|
Parameters: (Schema{}).fromProto(p.Parameters),
|
|
}
|
|
}
|
|
|
|
// FunctionResponse is the result output from a `FunctionCall` that contains a string
|
|
// representing the `FunctionDeclaration.name` and a structured JSON
|
|
// object containing any output from the function is used as context to
|
|
// the model. This should contain the result of a`FunctionCall` made
|
|
// based on model prediction.
|
|
type FunctionResponse struct {
|
|
// Required. The name of the function to call.
|
|
// Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum
|
|
// length of 63.
|
|
Name string
|
|
// Required. The function response in JSON object format.
|
|
Response map[string]any
|
|
}
|
|
|
|
func (v *FunctionResponse) toProto() *pb.FunctionResponse {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.FunctionResponse{
|
|
Name: v.Name,
|
|
Response: pvMapToStructPB(v.Response),
|
|
}
|
|
}
|
|
|
|
func (FunctionResponse) fromProto(p *pb.FunctionResponse) *FunctionResponse {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &FunctionResponse{
|
|
Name: p.Name,
|
|
Response: pvMapFromStructPB(p.Response),
|
|
}
|
|
}
|
|
|
|
// GenerateContentResponse is the response from a GenerateContent or GenerateContentStream call.
|
|
//
|
|
// Note on safety ratings and content filtering. They are reported for both
|
|
// prompt in `GenerateContentResponse.prompt_feedback` and for each candidate
|
|
// in `finish_reason` and in `safety_ratings`. The API contract is that:
|
|
// - either all requested candidates are returned or no candidates at all
|
|
// - no candidates are returned only if there was something wrong with the
|
|
// prompt (see `prompt_feedback`)
|
|
// - feedback on each candidate is reported on `finish_reason` and
|
|
// `safety_ratings`.
|
|
type GenerateContentResponse struct {
|
|
// Candidate responses from the model.
|
|
Candidates []*Candidate
|
|
// Returns the prompt's feedback related to the content filters.
|
|
PromptFeedback *PromptFeedback
|
|
// Output only. Metadata on the generation requests' token usage.
|
|
UsageMetadata *UsageMetadata
|
|
}
|
|
|
|
func (v *GenerateContentResponse) toProto() *pb.GenerateContentResponse {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.GenerateContentResponse{
|
|
Candidates: pvTransformSlice(v.Candidates, (*Candidate).toProto),
|
|
PromptFeedback: v.PromptFeedback.toProto(),
|
|
UsageMetadata: v.UsageMetadata.toProto(),
|
|
}
|
|
}
|
|
|
|
func (GenerateContentResponse) fromProto(p *pb.GenerateContentResponse) *GenerateContentResponse {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &GenerateContentResponse{
|
|
Candidates: pvTransformSlice(p.Candidates, (Candidate{}).fromProto),
|
|
PromptFeedback: (PromptFeedback{}).fromProto(p.PromptFeedback),
|
|
UsageMetadata: (UsageMetadata{}).fromProto(p.UsageMetadata),
|
|
}
|
|
}
|
|
|
|
// GenerationConfig is configuration options for model generation and outputs. Not all parameters
|
|
// may be configurable for every model.
|
|
type GenerationConfig struct {
|
|
// Optional. Number of generated responses to return.
|
|
//
|
|
// Currently, this value can only be set to 1. If unset, this will default
|
|
// to 1.
|
|
CandidateCount *int32
|
|
// Optional. The set of character sequences (up to 5) that will stop output
|
|
// generation. If specified, the API will stop at the first appearance of a
|
|
// stop sequence. The stop sequence will not be included as part of the
|
|
// response.
|
|
StopSequences []string
|
|
// Optional. The maximum number of tokens to include in a candidate.
|
|
//
|
|
// Note: The default value varies by model, see the `Model.output_token_limit`
|
|
// attribute of the `Model` returned from the `getModel` function.
|
|
MaxOutputTokens *int32
|
|
// Optional. Controls the randomness of the output.
|
|
//
|
|
// Note: The default value varies by model, see the `Model.temperature`
|
|
// attribute of the `Model` returned from the `getModel` function.
|
|
//
|
|
// Values can range from [0.0, 2.0].
|
|
Temperature *float32
|
|
// Optional. The maximum cumulative probability of tokens to consider when
|
|
// sampling.
|
|
//
|
|
// The model uses combined Top-k and nucleus sampling.
|
|
//
|
|
// Tokens are sorted based on their assigned probabilities so that only the
|
|
// most likely tokens are considered. Top-k sampling directly limits the
|
|
// maximum number of tokens to consider, while Nucleus sampling limits number
|
|
// of tokens based on the cumulative probability.
|
|
//
|
|
// Note: The default value varies by model, see the `Model.top_p`
|
|
// attribute of the `Model` returned from the `getModel` function.
|
|
TopP *float32
|
|
// Optional. The maximum number of tokens to consider when sampling.
|
|
//
|
|
// Models use nucleus sampling or combined Top-k and nucleus sampling.
|
|
// Top-k sampling considers the set of `top_k` most probable tokens.
|
|
// Models running with nucleus sampling don't allow top_k setting.
|
|
//
|
|
// Note: The default value varies by model, see the `Model.top_k`
|
|
// attribute of the `Model` returned from the `getModel` function. Empty
|
|
// `top_k` field in `Model` indicates the model doesn't apply top-k sampling
|
|
// and doesn't allow setting `top_k` on requests.
|
|
TopK *int32
|
|
// Optional. Output response mimetype of the generated candidate text.
|
|
// Supported mimetype:
|
|
// `text/plain`: (default) Text output.
|
|
// `application/json`: JSON response in the candidates.
|
|
ResponseMIMEType string
|
|
// Optional. Output response schema of the generated candidate text when
|
|
// response mime type can have schema. Schema can be objects, primitives or
|
|
// arrays and is a subset of [OpenAPI
|
|
// schema](https://spec.openapis.org/oas/v3.0.3#schema).
|
|
//
|
|
// If set, a compatible response_mime_type must also be set.
|
|
// Compatible mimetypes:
|
|
// `application/json`: Schema for JSON response.
|
|
ResponseSchema *Schema
|
|
}
|
|
|
|
func (v *GenerationConfig) toProto() *pb.GenerationConfig {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.GenerationConfig{
|
|
CandidateCount: v.CandidateCount,
|
|
StopSequences: v.StopSequences,
|
|
MaxOutputTokens: v.MaxOutputTokens,
|
|
Temperature: v.Temperature,
|
|
TopP: v.TopP,
|
|
TopK: v.TopK,
|
|
ResponseMimeType: v.ResponseMIMEType,
|
|
ResponseSchema: v.ResponseSchema.toProto(),
|
|
}
|
|
}
|
|
|
|
func (GenerationConfig) fromProto(p *pb.GenerationConfig) *GenerationConfig {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &GenerationConfig{
|
|
CandidateCount: p.CandidateCount,
|
|
StopSequences: p.StopSequences,
|
|
MaxOutputTokens: p.MaxOutputTokens,
|
|
Temperature: p.Temperature,
|
|
TopP: p.TopP,
|
|
TopK: p.TopK,
|
|
ResponseMIMEType: p.ResponseMimeType,
|
|
ResponseSchema: (Schema{}).fromProto(p.ResponseSchema),
|
|
}
|
|
}
|
|
|
|
// HarmBlockThreshold specifies block at and beyond a specified harm probability.
|
|
type HarmBlockThreshold int32
|
|
|
|
const (
|
|
// HarmBlockUnspecified means threshold is unspecified.
|
|
HarmBlockUnspecified HarmBlockThreshold = 0
|
|
// HarmBlockLowAndAbove means content with NEGLIGIBLE will be allowed.
|
|
HarmBlockLowAndAbove HarmBlockThreshold = 1
|
|
// HarmBlockMediumAndAbove means content with NEGLIGIBLE and LOW will be allowed.
|
|
HarmBlockMediumAndAbove HarmBlockThreshold = 2
|
|
// HarmBlockOnlyHigh means content with NEGLIGIBLE, LOW, and MEDIUM will be allowed.
|
|
HarmBlockOnlyHigh HarmBlockThreshold = 3
|
|
// HarmBlockNone means all content will be allowed.
|
|
HarmBlockNone HarmBlockThreshold = 4
|
|
)
|
|
|
|
var namesForHarmBlockThreshold = map[HarmBlockThreshold]string{
|
|
HarmBlockUnspecified: "HarmBlockUnspecified",
|
|
HarmBlockLowAndAbove: "HarmBlockLowAndAbove",
|
|
HarmBlockMediumAndAbove: "HarmBlockMediumAndAbove",
|
|
HarmBlockOnlyHigh: "HarmBlockOnlyHigh",
|
|
HarmBlockNone: "HarmBlockNone",
|
|
}
|
|
|
|
func (v HarmBlockThreshold) String() string {
|
|
if n, ok := namesForHarmBlockThreshold[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("HarmBlockThreshold(%d)", v)
|
|
}
|
|
|
|
// HarmCategory specifies the category of a rating.
|
|
//
|
|
// These categories cover various kinds of harms that developers
|
|
// may wish to adjust.
|
|
type HarmCategory int32
|
|
|
|
const (
|
|
// HarmCategoryUnspecified means category is unspecified.
|
|
HarmCategoryUnspecified HarmCategory = 0
|
|
// HarmCategoryDerogatory means negative or harmful comments targeting identity and/or protected attribute.
|
|
HarmCategoryDerogatory HarmCategory = 1
|
|
// HarmCategoryToxicity means content that is rude, disrespectful, or profane.
|
|
HarmCategoryToxicity HarmCategory = 2
|
|
// HarmCategoryViolence means describes scenarios depicting violence against an individual or group, or
|
|
// general descriptions of gore.
|
|
HarmCategoryViolence HarmCategory = 3
|
|
// HarmCategorySexual means contains references to sexual acts or other lewd content.
|
|
HarmCategorySexual HarmCategory = 4
|
|
// HarmCategoryMedical means promotes unchecked medical advice.
|
|
HarmCategoryMedical HarmCategory = 5
|
|
// HarmCategoryDangerous means dangerous content that promotes, facilitates, or encourages harmful acts.
|
|
HarmCategoryDangerous HarmCategory = 6
|
|
// HarmCategoryHarassment means harasment content.
|
|
HarmCategoryHarassment HarmCategory = 7
|
|
// HarmCategoryHateSpeech means hate speech and content.
|
|
HarmCategoryHateSpeech HarmCategory = 8
|
|
// HarmCategorySexuallyExplicit means sexually explicit content.
|
|
HarmCategorySexuallyExplicit HarmCategory = 9
|
|
// HarmCategoryDangerousContent means dangerous content.
|
|
HarmCategoryDangerousContent HarmCategory = 10
|
|
)
|
|
|
|
var namesForHarmCategory = map[HarmCategory]string{
|
|
HarmCategoryUnspecified: "HarmCategoryUnspecified",
|
|
HarmCategoryDerogatory: "HarmCategoryDerogatory",
|
|
HarmCategoryToxicity: "HarmCategoryToxicity",
|
|
HarmCategoryViolence: "HarmCategoryViolence",
|
|
HarmCategorySexual: "HarmCategorySexual",
|
|
HarmCategoryMedical: "HarmCategoryMedical",
|
|
HarmCategoryDangerous: "HarmCategoryDangerous",
|
|
HarmCategoryHarassment: "HarmCategoryHarassment",
|
|
HarmCategoryHateSpeech: "HarmCategoryHateSpeech",
|
|
HarmCategorySexuallyExplicit: "HarmCategorySexuallyExplicit",
|
|
HarmCategoryDangerousContent: "HarmCategoryDangerousContent",
|
|
}
|
|
|
|
func (v HarmCategory) String() string {
|
|
if n, ok := namesForHarmCategory[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("HarmCategory(%d)", v)
|
|
}
|
|
|
|
// HarmProbability specifies the probability that a piece of content is harmful.
|
|
//
|
|
// The classification system gives the probability of the content being
|
|
// unsafe. This does not indicate the severity of harm for a piece of content.
|
|
type HarmProbability int32
|
|
|
|
const (
|
|
// HarmProbabilityUnspecified means probability is unspecified.
|
|
HarmProbabilityUnspecified HarmProbability = 0
|
|
// HarmProbabilityNegligible means content has a negligible chance of being unsafe.
|
|
HarmProbabilityNegligible HarmProbability = 1
|
|
// HarmProbabilityLow means content has a low chance of being unsafe.
|
|
HarmProbabilityLow HarmProbability = 2
|
|
// HarmProbabilityMedium means content has a medium chance of being unsafe.
|
|
HarmProbabilityMedium HarmProbability = 3
|
|
// HarmProbabilityHigh means content has a high chance of being unsafe.
|
|
HarmProbabilityHigh HarmProbability = 4
|
|
)
|
|
|
|
var namesForHarmProbability = map[HarmProbability]string{
|
|
HarmProbabilityUnspecified: "HarmProbabilityUnspecified",
|
|
HarmProbabilityNegligible: "HarmProbabilityNegligible",
|
|
HarmProbabilityLow: "HarmProbabilityLow",
|
|
HarmProbabilityMedium: "HarmProbabilityMedium",
|
|
HarmProbabilityHigh: "HarmProbabilityHigh",
|
|
}
|
|
|
|
func (v HarmProbability) String() string {
|
|
if n, ok := namesForHarmProbability[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("HarmProbability(%d)", v)
|
|
}
|
|
|
|
// ModelInfo is information about a language model.
|
|
type ModelInfo struct {
|
|
// Required. The resource name of the `Model`.
|
|
//
|
|
// Format: `models/{model}` with a `{model}` naming convention of:
|
|
//
|
|
// * "{base_model_id}-{version}"
|
|
//
|
|
// Examples:
|
|
//
|
|
// * `models/chat-bison-001`
|
|
Name string
|
|
// Required. The name of the base model, pass this to the generation request.
|
|
//
|
|
// Examples:
|
|
//
|
|
// * `chat-bison`
|
|
BaseModelID string
|
|
// Required. The version number of the model.
|
|
//
|
|
// This represents the major version
|
|
Version string
|
|
// The human-readable name of the model. E.g. "Chat Bison".
|
|
//
|
|
// The name can be up to 128 characters long and can consist of any UTF-8
|
|
// characters.
|
|
DisplayName string
|
|
// A short description of the model.
|
|
Description string
|
|
// Maximum number of input tokens allowed for this model.
|
|
InputTokenLimit int32
|
|
// Maximum number of output tokens available for this model.
|
|
OutputTokenLimit int32
|
|
// The model's supported generation methods.
|
|
//
|
|
// The method names are defined as Pascal case
|
|
// strings, such as `generateMessage` which correspond to API methods.
|
|
SupportedGenerationMethods []string
|
|
// Controls the randomness of the output.
|
|
//
|
|
// Values can range over `[0.0,max_temperature]`, inclusive. A higher value
|
|
// will produce responses that are more varied, while a value closer to `0.0`
|
|
// will typically result in less surprising responses from the model.
|
|
// This value specifies default to be used by the backend while making the
|
|
// call to the model.
|
|
Temperature float32
|
|
// The maximum temperature this model can use.
|
|
MaxTemperature *float32
|
|
// For Nucleus sampling.
|
|
//
|
|
// Nucleus sampling considers the smallest set of tokens whose probability
|
|
// sum is at least `top_p`.
|
|
// This value specifies default to be used by the backend while making the
|
|
// call to the model.
|
|
TopP float32
|
|
// For Top-k sampling.
|
|
//
|
|
// Top-k sampling considers the set of `top_k` most probable tokens.
|
|
// This value specifies default to be used by the backend while making the
|
|
// call to the model.
|
|
// If empty, indicates the model doesn't use top-k sampling, and `top_k` isn't
|
|
// allowed as a generation parameter.
|
|
TopK int32
|
|
}
|
|
|
|
func (v *ModelInfo) toProto() *pb.Model {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Model{
|
|
Name: v.Name,
|
|
BaseModelId: v.BaseModelID,
|
|
Version: v.Version,
|
|
DisplayName: v.DisplayName,
|
|
Description: v.Description,
|
|
InputTokenLimit: v.InputTokenLimit,
|
|
OutputTokenLimit: v.OutputTokenLimit,
|
|
SupportedGenerationMethods: v.SupportedGenerationMethods,
|
|
Temperature: pvAddrOrNil(v.Temperature),
|
|
MaxTemperature: v.MaxTemperature,
|
|
TopP: pvAddrOrNil(v.TopP),
|
|
TopK: pvAddrOrNil(v.TopK),
|
|
}
|
|
}
|
|
|
|
func (ModelInfo) fromProto(p *pb.Model) *ModelInfo {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &ModelInfo{
|
|
Name: p.Name,
|
|
BaseModelID: p.BaseModelId,
|
|
Version: p.Version,
|
|
DisplayName: p.DisplayName,
|
|
Description: p.Description,
|
|
InputTokenLimit: p.InputTokenLimit,
|
|
OutputTokenLimit: p.OutputTokenLimit,
|
|
SupportedGenerationMethods: p.SupportedGenerationMethods,
|
|
Temperature: pvDerefOrZero(p.Temperature),
|
|
MaxTemperature: p.MaxTemperature,
|
|
TopP: pvDerefOrZero(p.TopP),
|
|
TopK: pvDerefOrZero(p.TopK),
|
|
}
|
|
}
|
|
|
|
// PromptFeedback contains a set of the feedback metadata the prompt specified in
|
|
// `GenerateContentRequest.content`.
|
|
type PromptFeedback struct {
|
|
// Optional. If set, the prompt was blocked and no candidates are returned.
|
|
// Rephrase your prompt.
|
|
BlockReason BlockReason
|
|
// Ratings for safety of the prompt.
|
|
// There is at most one rating per category.
|
|
SafetyRatings []*SafetyRating
|
|
}
|
|
|
|
func (v *PromptFeedback) toProto() *pb.GenerateContentResponse_PromptFeedback {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.GenerateContentResponse_PromptFeedback{
|
|
BlockReason: pb.GenerateContentResponse_PromptFeedback_BlockReason(v.BlockReason),
|
|
SafetyRatings: pvTransformSlice(v.SafetyRatings, (*SafetyRating).toProto),
|
|
}
|
|
}
|
|
|
|
func (PromptFeedback) fromProto(p *pb.GenerateContentResponse_PromptFeedback) *PromptFeedback {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &PromptFeedback{
|
|
BlockReason: BlockReason(p.BlockReason),
|
|
SafetyRatings: pvTransformSlice(p.SafetyRatings, (SafetyRating{}).fromProto),
|
|
}
|
|
}
|
|
|
|
// SafetyRating is the safety rating for a piece of content.
|
|
//
|
|
// The safety rating contains the category of harm and the
|
|
// harm probability level in that category for a piece of content.
|
|
// Content is classified for safety across a number of
|
|
// harm categories and the probability of the harm classification is included
|
|
// here.
|
|
type SafetyRating struct {
|
|
// Required. The category for this rating.
|
|
Category HarmCategory
|
|
// Required. The probability of harm for this content.
|
|
Probability HarmProbability
|
|
// Was this content blocked because of this rating?
|
|
Blocked bool
|
|
}
|
|
|
|
func (v *SafetyRating) toProto() *pb.SafetyRating {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.SafetyRating{
|
|
Category: pb.HarmCategory(v.Category),
|
|
Probability: pb.SafetyRating_HarmProbability(v.Probability),
|
|
Blocked: v.Blocked,
|
|
}
|
|
}
|
|
|
|
func (SafetyRating) fromProto(p *pb.SafetyRating) *SafetyRating {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &SafetyRating{
|
|
Category: HarmCategory(p.Category),
|
|
Probability: HarmProbability(p.Probability),
|
|
Blocked: p.Blocked,
|
|
}
|
|
}
|
|
|
|
// SafetySetting is safety setting, affecting the safety-blocking behavior.
|
|
//
|
|
// Passing a safety setting for a category changes the allowed probability that
|
|
// content is blocked.
|
|
type SafetySetting struct {
|
|
// Required. The category for this setting.
|
|
Category HarmCategory
|
|
// Required. Controls the probability threshold at which harm is blocked.
|
|
Threshold HarmBlockThreshold
|
|
}
|
|
|
|
func (v *SafetySetting) toProto() *pb.SafetySetting {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.SafetySetting{
|
|
Category: pb.HarmCategory(v.Category),
|
|
Threshold: pb.SafetySetting_HarmBlockThreshold(v.Threshold),
|
|
}
|
|
}
|
|
|
|
func (SafetySetting) fromProto(p *pb.SafetySetting) *SafetySetting {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &SafetySetting{
|
|
Category: HarmCategory(p.Category),
|
|
Threshold: HarmBlockThreshold(p.Threshold),
|
|
}
|
|
}
|
|
|
|
// Schema is the `Schema` object allows the definition of input and output data types.
|
|
// These types can be objects, but also primitives and arrays.
|
|
// Represents a select subset of an [OpenAPI 3.0 schema
|
|
// object](https://spec.openapis.org/oas/v3.0.3#schema).
|
|
type Schema struct {
|
|
// Required. Data type.
|
|
Type Type
|
|
// Optional. The format of the data. This is used only for primitive
|
|
// datatypes. Supported formats:
|
|
//
|
|
// for NUMBER type: float, double
|
|
// for INTEGER type: int32, int64
|
|
Format string
|
|
// Optional. A brief description of the parameter. This could contain examples
|
|
// of use. Parameter description may be formatted as Markdown.
|
|
Description string
|
|
// Optional. Indicates if the value may be null.
|
|
Nullable bool
|
|
// Optional. Possible values of the element of Type.STRING with enum format.
|
|
// For example we can define an Enum Direction as :
|
|
// {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}
|
|
Enum []string
|
|
// Optional. Schema of the elements of Type.ARRAY.
|
|
Items *Schema
|
|
// Optional. Properties of Type.OBJECT.
|
|
Properties map[string]*Schema
|
|
// Optional. Required properties of Type.OBJECT.
|
|
Required []string
|
|
}
|
|
|
|
func (v *Schema) toProto() *pb.Schema {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Schema{
|
|
Type: pb.Type(v.Type),
|
|
Format: v.Format,
|
|
Description: v.Description,
|
|
Nullable: v.Nullable,
|
|
Enum: v.Enum,
|
|
Items: v.Items.toProto(),
|
|
Properties: pvTransformMapValues(v.Properties, (*Schema).toProto),
|
|
Required: v.Required,
|
|
}
|
|
}
|
|
|
|
func (Schema) fromProto(p *pb.Schema) *Schema {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &Schema{
|
|
Type: Type(p.Type),
|
|
Format: p.Format,
|
|
Description: p.Description,
|
|
Nullable: p.Nullable,
|
|
Enum: p.Enum,
|
|
Items: (Schema{}).fromProto(p.Items),
|
|
Properties: pvTransformMapValues(p.Properties, (Schema{}).fromProto),
|
|
Required: p.Required,
|
|
}
|
|
}
|
|
|
|
// TaskType is type of task for which the embedding will be used.
|
|
type TaskType int32
|
|
|
|
const (
|
|
// TaskTypeUnspecified means unset value, which will default to one of the other enum values.
|
|
TaskTypeUnspecified TaskType = 0
|
|
// TaskTypeRetrievalQuery means specifies the given text is a query in a search/retrieval setting.
|
|
TaskTypeRetrievalQuery TaskType = 1
|
|
// TaskTypeRetrievalDocument means specifies the given text is a document from the corpus being searched.
|
|
TaskTypeRetrievalDocument TaskType = 2
|
|
// TaskTypeSemanticSimilarity means specifies the given text will be used for STS.
|
|
TaskTypeSemanticSimilarity TaskType = 3
|
|
// TaskTypeClassification means specifies that the given text will be classified.
|
|
TaskTypeClassification TaskType = 4
|
|
// TaskTypeClustering means specifies that the embeddings will be used for clustering.
|
|
TaskTypeClustering TaskType = 5
|
|
// TaskTypeQuestionAnswering means specifies that the given text will be used for question answering.
|
|
TaskTypeQuestionAnswering TaskType = 6
|
|
// TaskTypeFactVerification means specifies that the given text will be used for fact verification.
|
|
TaskTypeFactVerification TaskType = 7
|
|
)
|
|
|
|
var namesForTaskType = map[TaskType]string{
|
|
TaskTypeUnspecified: "TaskTypeUnspecified",
|
|
TaskTypeRetrievalQuery: "TaskTypeRetrievalQuery",
|
|
TaskTypeRetrievalDocument: "TaskTypeRetrievalDocument",
|
|
TaskTypeSemanticSimilarity: "TaskTypeSemanticSimilarity",
|
|
TaskTypeClassification: "TaskTypeClassification",
|
|
TaskTypeClustering: "TaskTypeClustering",
|
|
TaskTypeQuestionAnswering: "TaskTypeQuestionAnswering",
|
|
TaskTypeFactVerification: "TaskTypeFactVerification",
|
|
}
|
|
|
|
func (v TaskType) String() string {
|
|
if n, ok := namesForTaskType[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("TaskType(%d)", v)
|
|
}
|
|
|
|
// Tool details that the model may use to generate response.
|
|
//
|
|
// A `Tool` is a piece of code that enables the system to interact with
|
|
// external systems to perform an action, or set of actions, outside of
|
|
// knowledge and scope of the model.
|
|
type Tool struct {
|
|
// Optional. A list of FunctionDeclarations available to the model that
|
|
// can be used for function calling. The model or system does not execute
|
|
// the function. Instead the defined function may be returned as a [FunctionCall]
|
|
// part with arguments to the client side for execution. The next conversation
|
|
// turn may contain a [FunctionResponse] with the role "function" generation
|
|
// context for the next model turn.
|
|
FunctionDeclarations []*FunctionDeclaration
|
|
// Optional. Enables the model to execute code as part of generation.
|
|
CodeExecution *CodeExecution
|
|
}
|
|
|
|
func (v *Tool) toProto() *pb.Tool {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.Tool{
|
|
FunctionDeclarations: pvTransformSlice(v.FunctionDeclarations, (*FunctionDeclaration).toProto),
|
|
CodeExecution: v.CodeExecution.toProto(),
|
|
}
|
|
}
|
|
|
|
func (Tool) fromProto(p *pb.Tool) *Tool {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &Tool{
|
|
FunctionDeclarations: pvTransformSlice(p.FunctionDeclarations, (FunctionDeclaration{}).fromProto),
|
|
CodeExecution: (CodeExecution{}).fromProto(p.CodeExecution),
|
|
}
|
|
}
|
|
|
|
// ToolConfig is the Tool configuration containing parameters for specifying `Tool` use
|
|
// in the request.
|
|
type ToolConfig struct {
|
|
// Optional. Function calling config.
|
|
FunctionCallingConfig *FunctionCallingConfig
|
|
}
|
|
|
|
func (v *ToolConfig) toProto() *pb.ToolConfig {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.ToolConfig{
|
|
FunctionCallingConfig: v.FunctionCallingConfig.toProto(),
|
|
}
|
|
}
|
|
|
|
func (ToolConfig) fromProto(p *pb.ToolConfig) *ToolConfig {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &ToolConfig{
|
|
FunctionCallingConfig: (FunctionCallingConfig{}).fromProto(p.FunctionCallingConfig),
|
|
}
|
|
}
|
|
|
|
// Type contains the list of OpenAPI data types as defined by
|
|
// https://spec.openapis.org/oas/v3.0.3#data-types
|
|
type Type int32
|
|
|
|
const (
|
|
// TypeUnspecified means not specified, should not be used.
|
|
TypeUnspecified Type = 0
|
|
// TypeString means string type.
|
|
TypeString Type = 1
|
|
// TypeNumber means number type.
|
|
TypeNumber Type = 2
|
|
// TypeInteger means integer type.
|
|
TypeInteger Type = 3
|
|
// TypeBoolean means boolean type.
|
|
TypeBoolean Type = 4
|
|
// TypeArray means array type.
|
|
TypeArray Type = 5
|
|
// TypeObject means object type.
|
|
TypeObject Type = 6
|
|
)
|
|
|
|
var namesForType = map[Type]string{
|
|
TypeUnspecified: "TypeUnspecified",
|
|
TypeString: "TypeString",
|
|
TypeNumber: "TypeNumber",
|
|
TypeInteger: "TypeInteger",
|
|
TypeBoolean: "TypeBoolean",
|
|
TypeArray: "TypeArray",
|
|
TypeObject: "TypeObject",
|
|
}
|
|
|
|
func (v Type) String() string {
|
|
if n, ok := namesForType[v]; ok {
|
|
return n
|
|
}
|
|
return fmt.Sprintf("Type(%d)", v)
|
|
}
|
|
|
|
// UsageMetadata is metadata on the generation request's token usage.
|
|
type UsageMetadata struct {
|
|
// Number of tokens in the prompt. When cached_content is set, this is still
|
|
// the total effective prompt size. I.e. this includes the number of tokens
|
|
// in the cached content.
|
|
PromptTokenCount int32
|
|
// Number of tokens in the cached part of the prompt, i.e. in the cached
|
|
// content.
|
|
CachedContentTokenCount int32
|
|
// Total number of tokens across the generated candidates.
|
|
CandidatesTokenCount int32
|
|
// Total token count for the generation request (prompt + candidates).
|
|
TotalTokenCount int32
|
|
}
|
|
|
|
func (v *UsageMetadata) toProto() *pb.GenerateContentResponse_UsageMetadata {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.GenerateContentResponse_UsageMetadata{
|
|
PromptTokenCount: v.PromptTokenCount,
|
|
CachedContentTokenCount: v.CachedContentTokenCount,
|
|
CandidatesTokenCount: v.CandidatesTokenCount,
|
|
TotalTokenCount: v.TotalTokenCount,
|
|
}
|
|
}
|
|
|
|
func (UsageMetadata) fromProto(p *pb.GenerateContentResponse_UsageMetadata) *UsageMetadata {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &UsageMetadata{
|
|
PromptTokenCount: p.PromptTokenCount,
|
|
CachedContentTokenCount: p.CachedContentTokenCount,
|
|
CandidatesTokenCount: p.CandidatesTokenCount,
|
|
TotalTokenCount: p.TotalTokenCount,
|
|
}
|
|
}
|
|
|
|
// VideoMetadata is metadata for a video `File`.
|
|
type VideoMetadata struct {
|
|
// Duration of the video.
|
|
Duration time.Duration
|
|
}
|
|
|
|
func (v *VideoMetadata) toProto() *pb.VideoMetadata {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return &pb.VideoMetadata{
|
|
VideoDuration: durationpb.New(v.Duration),
|
|
}
|
|
}
|
|
|
|
func (VideoMetadata) fromProto(p *pb.VideoMetadata) *VideoMetadata {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &VideoMetadata{
|
|
Duration: pvDurationFromProto(p.VideoDuration),
|
|
}
|
|
}
|
|
|
|
func pvTransformSlice[From, To any](from []From, f func(From) To) []To {
|
|
if from == nil {
|
|
return nil
|
|
}
|
|
to := make([]To, len(from))
|
|
for i, e := range from {
|
|
to[i] = f(e)
|
|
}
|
|
return to
|
|
}
|
|
|
|
func pvTransformMapValues[K comparable, VFrom, VTo any](from map[K]VFrom, f func(VFrom) VTo) map[K]VTo {
|
|
if from == nil {
|
|
return nil
|
|
}
|
|
to := map[K]VTo{}
|
|
for k, v := range from {
|
|
to[k] = f(v)
|
|
}
|
|
return to
|
|
}
|
|
|
|
func pvAddrOrNil[T comparable](x T) *T {
|
|
var z T
|
|
if x == z {
|
|
return nil
|
|
}
|
|
return &x
|
|
}
|
|
|
|
func pvDerefOrZero[T any](x *T) T {
|
|
if x == nil {
|
|
var z T
|
|
return z
|
|
}
|
|
return *x
|
|
}
|
|
|
|
func pvMapToStructPB(m map[string]any) *structpb.Struct {
|
|
if m == nil {
|
|
return nil
|
|
}
|
|
s, err := structpb.NewStruct(m)
|
|
if err != nil {
|
|
panic(pvPanic(fmt.Errorf("pvMapToStructPB: %w", err)))
|
|
}
|
|
return s
|
|
}
|
|
|
|
func pvMapFromStructPB(p *structpb.Struct) map[string]any {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return p.AsMap()
|
|
}
|
|
|
|
func pvTimeToProto(t time.Time) *timestamppb.Timestamp {
|
|
if t.IsZero() {
|
|
return nil
|
|
}
|
|
return timestamppb.New(t)
|
|
}
|
|
|
|
func pvTimeFromProto(ts *timestamppb.Timestamp) time.Time {
|
|
if ts == nil {
|
|
return time.Time{}
|
|
}
|
|
return ts.AsTime()
|
|
}
|
|
|
|
func pvAPIErrorToProto(ae *apierror.APIError) *spb.Status {
|
|
if ae == nil {
|
|
return nil
|
|
}
|
|
return ae.GRPCStatus().Proto()
|
|
}
|
|
|
|
func pvAPIErrorFromProto(s *spb.Status) *apierror.APIError {
|
|
err := gstatus.ErrorProto(s)
|
|
aerr, ok := apierror.ParseError(err, true)
|
|
if !ok {
|
|
// Should be impossible.
|
|
return nil
|
|
}
|
|
return aerr
|
|
}
|
|
|
|
func pvDurationFromProto(d *durationpb.Duration) time.Duration {
|
|
if d == nil {
|
|
return 0
|
|
}
|
|
return d.AsDuration()
|
|
}
|
|
|
|
// pvPanic wraps panics from support functions.
|
|
// User-provided functions in the same package can also use it.
|
|
// It allows callers to distinguish conversion function panics from other panics.
|
|
type pvPanic error
|
|
|
|
// pvCatchPanic recovers from panics of type pvPanic and
|
|
// returns an error instead.
|
|
func pvCatchPanic[T any](f func() T) (_ T, err error) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
if _, ok := r.(pvPanic); ok {
|
|
err = r.(error)
|
|
} else {
|
|
panic(r)
|
|
}
|
|
}
|
|
}()
|
|
return f(), nil
|
|
}
|