blob: ec4b158eb759e37e6bbd35dfd5258951f6bf6e3b [file] [log] [blame]
// Copyright 2023 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 basic
import (
"fmt"
"cloud.google.com/go/civil"
pb "example.com/basic"
"example.com/protoveneer/support"
)
// Blob contains raw media bytes.
//
// Text should not be sent as raw bytes, use the 'text' field.
type Blob struct {
// Required. The IANA standard MIME type of the source data.
MIMEType string
// Required. 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,
}
}
// Citation contains source attributions for content.
type Citation struct {
// Output only. Url reference of the attribution.
URI string
// Output only. Publication date of the attribution.
PublicationDate civil.Date
Struct map[string]any
}
func (v *Citation) toProto() *pb.Citation {
if v == nil {
return nil
}
return &pb.Citation{
Uri: v.URI,
PublicationDate: support.CivilDateToProto(v.PublicationDate),
Struct: support.MapToStructPB(v.Struct),
}
}
func (Citation) fromProto(p *pb.Citation) *Citation {
if p == nil {
return nil
}
return &Citation{
URI: p.Uri,
PublicationDate: support.CivilDateFromProto(p.PublicationDate),
Struct: support.MapFromStructPB(p.Struct),
}
}
// CitationMetadata is a collection of source attributions for a piece of content.
type CitationMetadata struct {
// Output only. List of citations.
Citations []*Citation
CitMap map[string]*Citation
}
func (v *CitationMetadata) toProto() *pb.CitationMetadata {
if v == nil {
return nil
}
return &pb.CitationMetadata{
Citations: support.TransformSlice(v.Citations, (*Citation).toProto),
CitMap: support.TransformMapValues(v.CitMap, (*Citation).toProto),
}
}
func (CitationMetadata) fromProto(p *pb.CitationMetadata) *CitationMetadata {
if p == nil {
return nil
}
return &CitationMetadata{
Citations: support.TransformSlice(p.Citations, (Citation{}).fromProto),
CitMap: support.TransformMapValues(p.CitMap, (Citation{}).fromProto),
}
}
// FinishReason is the reason why the model stopped generating tokens.
// If empty, the model has not stopped generating the tokens.
type FinishReason int32
const (
// FinishReasonUnspecified means the finish reason is unspecified.
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 token generation was stopped as the response was flagged for safety
// reasons. NOTE: When streaming the Candidate.content will be empty if
// content filters blocked the output.
FinishReasonSafety FinishReason = 3
// FinishReasonRecitation means the token generation was stopped as the response was flagged for
// unauthorized citations.
FinishReasonRecitation FinishReason = 4
// FinishReasonOther means all other reasons that stopped the token generation
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)
}
// GenerationConfig is generation config.
type GenerationConfig struct {
// Optional. Controls the randomness of predictions.
Temperature float32
// Optional. Number of candidates to generate.
CandidateCount int32
// Optional. Stop sequences.
StopSequences []string
HarmCat HarmCategory
FinishReason FinishReason
CitMet *CitationMetadata
}
func (v *GenerationConfig) toProto() *pb.GenerationConfig {
if v == nil {
return nil
}
return &pb.GenerationConfig{
Temperature: support.AddrOrNil(v.Temperature),
CandidateCount: support.AddrOrNil(v.CandidateCount),
StopSequences: v.StopSequences,
HarmCat: pb.HarmCategory(v.HarmCat),
FinishReason: pb.Candidate_FinishReason(v.FinishReason),
CitMet: v.CitMet.toProto(),
}
}
func (GenerationConfig) fromProto(p *pb.GenerationConfig) *GenerationConfig {
if p == nil {
return nil
}
return &GenerationConfig{
Temperature: support.DerefOrZero(p.Temperature),
CandidateCount: support.DerefOrZero(p.CandidateCount),
StopSequences: p.StopSequences,
HarmCat: HarmCategory(p.HarmCat),
FinishReason: FinishReason(p.FinishReason),
CitMet: (CitationMetadata{}).fromProto(p.CitMet),
}
}
// HarmCategory specifies harm categories that will block the content.
type HarmCategory int32
const (
// HarmCategoryUnspecified means the harm category is unspecified.
HarmCategoryUnspecified HarmCategory = 0
// HarmCategoryHateSpeech means the harm category is hate speech.
HarmCategoryHateSpeech HarmCategory = 1
// HarmCategoryDangerousContent means the harm category is dangerous content.
HarmCategoryDangerousContent HarmCategory = 2
// HarmCategoryHarassment means the harm category is harassment.
HarmCategoryHarassment HarmCategory = 3
// HarmCategorySexuallyExplicit means the harm category is sexually explicit content.
HarmCategorySexuallyExplicit HarmCategory = 4
)
var namesForHarmCategory = map[HarmCategory]string{
HarmCategoryUnspecified: "HarmCategoryUnspecified",
HarmCategoryHateSpeech: "HarmCategoryHateSpeech",
HarmCategoryDangerousContent: "HarmCategoryDangerousContent",
HarmCategoryHarassment: "HarmCategoryHarassment",
HarmCategorySexuallyExplicit: "HarmCategorySexuallyExplicit",
}
func (v HarmCategory) String() string {
if n, ok := namesForHarmCategory[v]; ok {
return n
}
return fmt.Sprintf("HarmCategory(%d)", v)
}