blob: 683fd873274e2e5dd67a10c6a72190e81c72f5e2 [file]
// 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.
syntax = "proto3";
package google.ai.generativelanguage.v1beta;
import "google/ai/generativelanguage/v1beta/citation.proto";
import "google/ai/generativelanguage/v1beta/content.proto";
import "google/ai/generativelanguage/v1beta/retriever.proto";
import "google/ai/generativelanguage/v1beta/safety.proto";
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
option go_package = "cloud.google.com/go/ai/generativelanguage/apiv1beta/generativelanguagepb;generativelanguagepb";
option java_multiple_files = true;
option java_outer_classname = "GenerativeServiceProto";
option java_package = "com.google.ai.generativelanguage.v1beta";
// API for using Large Models that generate multimodal content and have
// additional capabilities beyond text generation.
service GenerativeService {
option (google.api.default_host) = "generativelanguage.googleapis.com";
// Generates a response from the model given an input
// `GenerateContentRequest`.
rpc GenerateContent(GenerateContentRequest)
returns (GenerateContentResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:generateContent"
body: "*"
additional_bindings {
post: "/v1beta/{model=tunedModels/*}:generateContent"
body: "*"
}
};
option (google.api.method_signature) = "model,contents";
}
// Generates a grounded answer from the model given an input
// `GenerateAnswerRequest`.
rpc GenerateAnswer(GenerateAnswerRequest) returns (GenerateAnswerResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:generateAnswer"
body: "*"
};
option (google.api.method_signature) =
"model,contents,safety_settings,answer_style";
}
// Generates a streamed response from the model given an input
// `GenerateContentRequest`.
rpc StreamGenerateContent(GenerateContentRequest)
returns (stream GenerateContentResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:streamGenerateContent"
body: "*"
};
option (google.api.method_signature) = "model,contents";
}
// Generates an embedding from the model given an input `Content`.
rpc EmbedContent(EmbedContentRequest) returns (EmbedContentResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:embedContent"
body: "*"
};
option (google.api.method_signature) = "model,content";
}
// Generates multiple embeddings from the model given input text in a
// synchronous call.
rpc BatchEmbedContents(BatchEmbedContentsRequest)
returns (BatchEmbedContentsResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:batchEmbedContents"
body: "*"
};
option (google.api.method_signature) = "model,requests";
}
// Runs a model's tokenizer on input content and returns the token count.
rpc CountTokens(CountTokensRequest) returns (CountTokensResponse) {
option (google.api.http) = {
post: "/v1beta/{model=models/*}:countTokens"
body: "*"
};
option (google.api.method_signature) = "model,contents";
}
}
// Type of task for which the embedding will be used.
enum TaskType {
// Unset value, which will default to one of the other enum values.
TASK_TYPE_UNSPECIFIED = 0;
// Specifies the given text is a query in a search/retrieval setting.
RETRIEVAL_QUERY = 1;
// Specifies the given text is a document from the corpus being searched.
RETRIEVAL_DOCUMENT = 2;
// Specifies the given text will be used for STS.
SEMANTIC_SIMILARITY = 3;
// Specifies that the given text will be classified.
CLASSIFICATION = 4;
// Specifies that the embeddings will be used for clustering.
CLUSTERING = 5;
// Specifies that the given text will be used for question answering.
QUESTION_ANSWERING = 6;
// Specifies that the given text will be used for fact verification.
FACT_VERIFICATION = 7;
}
// Request to generate a completion from the model.
message GenerateContentRequest {
// Required. The name of the `Model` to use for generating the completion.
//
// Format: `name=models/{model}`.
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Model"
}
];
// Optional. Developer set system instruction. Currently, text only.
optional Content system_instruction = 8
[(google.api.field_behavior) = OPTIONAL];
// Required. The content of the current conversation with the model.
//
// For single-turn queries, this is a single instance. For multi-turn queries,
// this is a repeated field that contains conversation history + latest
// request.
repeated Content contents = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. A list of `Tools` the model may use to generate the next
// 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. The only supported tool is currently
// `Function`.
repeated Tool tools = 5 [(google.api.field_behavior) = OPTIONAL];
// Optional. Tool configuration for any `Tool` specified in the request.
ToolConfig tool_config = 7 [(google.api.field_behavior) = OPTIONAL];
// Optional. A list of unique `SafetySetting` instances for blocking unsafe
// content.
//
// This will be enforced on the `GenerateContentRequest.contents` and
// `GenerateContentResponse.candidates`. There should not be more than one
// setting for each `SafetyCategory` type. The API will block any contents and
// responses that fail to meet the thresholds set by these settings. This list
// overrides the default settings for each `SafetyCategory` specified in the
// safety_settings. If there is no `SafetySetting` for a given
// `SafetyCategory` provided in the list, the API will use the default safety
// setting for that category. Harm categories HARM_CATEGORY_HATE_SPEECH,
// HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT,
// HARM_CATEGORY_HARASSMENT are supported.
repeated SafetySetting safety_settings = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration options for model generation and outputs.
optional GenerationConfig generation_config = 4
[(google.api.field_behavior) = OPTIONAL];
}
// Configuration options for model generation and outputs. Not all parameters
// may be configurable for every model.
message GenerationConfig {
// Optional. Number of generated responses to return.
//
// Currently, this value can only be set to 1. If unset, this will default
// to 1.
optional int32 candidate_count = 1 [(google.api.field_behavior) = OPTIONAL];
// 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.
repeated string stop_sequences = 2 [(google.api.field_behavior) = OPTIONAL];
// 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.
optional int32 max_output_tokens = 4 [(google.api.field_behavior) = OPTIONAL];
// 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].
optional float temperature = 5 [(google.api.field_behavior) = OPTIONAL];
// 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.
optional float top_p = 6 [(google.api.field_behavior) = OPTIONAL];
// 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.
optional int32 top_k = 7 [(google.api.field_behavior) = OPTIONAL];
// Optional. Output response mimetype of the generated candidate text.
// Supported mimetype:
// `text/plain`: (default) Text output.
// `application/json`: JSON response in the candidates.
string response_mime_type = 13 [(google.api.field_behavior) = OPTIONAL];
}
// Configuration for retrieving grounding content from a `Corpus` or
// `Document` created using the Semantic Retriever API.
message SemanticRetrieverConfig {
// Required. Name of the resource for retrieval, e.g. corpora/123 or
// corpora/123/documents/abc.
string source = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Query to use for similarity matching `Chunk`s in the given
// resource.
Content query = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Filters for selecting `Document`s and/or `Chunk`s from the
// resource.
repeated MetadataFilter metadata_filters = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. Maximum number of relevant `Chunk`s to retrieve.
optional int32 max_chunks_count = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. Minimum relevance score for retrieved relevant `Chunk`s.
optional float minimum_relevance_score = 5
[(google.api.field_behavior) = OPTIONAL];
}
// Response from the model supporting multiple candidates.
//
// 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`.
message GenerateContentResponse {
// A set of the feedback metadata the prompt specified in
// `GenerateContentRequest.content`.
message PromptFeedback {
// Specifies what was the reason why prompt was blocked.
enum BlockReason {
// Default value. This value is unused.
BLOCK_REASON_UNSPECIFIED = 0;
// Prompt was blocked due to safety reasons. You can inspect
// `safety_ratings` to understand which safety category blocked it.
SAFETY = 1;
// Prompt was blocked due to unknown reaasons.
OTHER = 2;
}
// Optional. If set, the prompt was blocked and no candidates are returned.
// Rephrase your prompt.
BlockReason block_reason = 1 [(google.api.field_behavior) = OPTIONAL];
// Ratings for safety of the prompt.
// There is at most one rating per category.
repeated SafetyRating safety_ratings = 2;
}
// Candidate responses from the model.
repeated Candidate candidates = 1;
// Returns the prompt's feedback related to the content filters.
PromptFeedback prompt_feedback = 2;
}
// A response candidate generated from the model.
message Candidate {
// Defines the reason why the model stopped generating tokens.
enum FinishReason {
// Default value. This value is unused.
FINISH_REASON_UNSPECIFIED = 0;
// Natural stop point of the model or provided stop sequence.
STOP = 1;
// The maximum number of tokens as specified in the request was reached.
MAX_TOKENS = 2;
// The candidate content was flagged for safety reasons.
SAFETY = 3;
// The candidate content was flagged for recitation reasons.
RECITATION = 4;
// Unknown reason.
OTHER = 5;
}
// Output only. Index of the candidate in the list of candidates.
optional int32 index = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Generated content returned from the model.
Content content = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Output only. The reason why the model stopped generating tokens.
//
// If empty, the model has not stopped generating the tokens.
FinishReason finish_reason = 2 [
(google.api.field_behavior) = OPTIONAL,
(google.api.field_behavior) = OUTPUT_ONLY
];
// List of ratings for the safety of a response candidate.
//
// There is at most one rating per category.
repeated SafetyRating safety_ratings = 5;
// 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 citation_metadata = 6
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Token count for this candidate.
int32 token_count = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Attribution information for sources that contributed to a
// grounded answer.
//
// This field is populated for `GenerateAnswer` calls.
repeated GroundingAttribution grounding_attributions = 8
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// Identifier for the source contributing to this attribution.
message AttributionSourceId {
// Identifier for a part within a `GroundingPassage`.
message GroundingPassageId {
// Output only. ID of the passage matching the `GenerateAnswerRequest`'s
// `GroundingPassage.id`.
string passage_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Index of the part within the `GenerateAnswerRequest`'s
// `GroundingPassage.content`.
int32 part_index = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Identifier for a `Chunk` retrieved via Semantic Retriever specified in the
// `GenerateAnswerRequest` using `SemanticRetrieverConfig`.
message SemanticRetrieverChunk {
// Output only. Name of the source matching the request's
// `SemanticRetrieverConfig.source`. Example: `corpora/123` or
// `corpora/123/documents/abc`
string source = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Name of the `Chunk` containing the attributed text.
// Example: `corpora/123/documents/abc/chunks/xyz`
string chunk = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
}
oneof source {
// Identifier for an inline passage.
GroundingPassageId grounding_passage = 1;
// Identifier for a `Chunk` fetched via Semantic Retriever.
SemanticRetrieverChunk semantic_retriever_chunk = 2;
}
}
// Attribution for a source that contributed to an answer.
message GroundingAttribution {
// Output only. Identifier for the source contributing to this attribution.
AttributionSourceId source_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
// Grounding source content that makes up this attribution.
Content content = 2;
}
// Request to generate a grounded answer from the model.
message GenerateAnswerRequest {
// Style for grounded answers.
enum AnswerStyle {
// Unspecified answer style.
ANSWER_STYLE_UNSPECIFIED = 0;
// Succint but abstract style.
ABSTRACTIVE = 1;
// Very brief and extractive style.
EXTRACTIVE = 2;
// Verbose style including extra details. The response may be formatted as a
// sentence, paragraph, multiple paragraphs, or bullet points, etc.
VERBOSE = 3;
}
// The sources in which to ground the answer.
oneof grounding_source {
// Passages provided inline with the request.
GroundingPassages inline_passages = 6;
// Content retrieved from resources created via the Semantic Retriever
// API.
SemanticRetrieverConfig semantic_retriever = 7;
}
// Required. The name of the `Model` to use for generating the grounded
// response.
//
// Format: `model=models/{model}`.
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Model"
}
];
// Required. The content of the current conversation with the model. For
// single-turn queries, this is a single question to answer. For multi-turn
// queries, this is a repeated field that contains conversation history and
// the last `Content` in the list containing the question.
//
// Note: GenerateAnswer currently only supports queries in English.
repeated Content contents = 2 [(google.api.field_behavior) = REQUIRED];
// Required. Style in which answers should be returned.
AnswerStyle answer_style = 5 [(google.api.field_behavior) = REQUIRED];
// Optional. A list of unique `SafetySetting` instances for blocking unsafe
// content.
//
// This will be enforced on the `GenerateAnswerRequest.contents` and
// `GenerateAnswerResponse.candidate`. There should not be more than one
// setting for each `SafetyCategory` type. The API will block any contents and
// responses that fail to meet the thresholds set by these settings. This list
// overrides the default settings for each `SafetyCategory` specified in the
// safety_settings. If there is no `SafetySetting` for a given
// `SafetyCategory` provided in the list, the API will use the default safety
// setting for that category. Harm categories HARM_CATEGORY_HATE_SPEECH,
// HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT,
// HARM_CATEGORY_HARASSMENT are supported.
repeated SafetySetting safety_settings = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. Controls the randomness of the output.
//
// Values can range from [0.0,1.0], inclusive. A value closer to 1.0 will
// produce responses that are more varied and creative, while a value closer
// to 0.0 will typically result in more straightforward responses from the
// model. A low temperature (~0.2) is usually recommended for
// Attributed-Question-Answering use cases.
optional float temperature = 4 [(google.api.field_behavior) = OPTIONAL];
}
// Response from the model for a grounded answer.
message GenerateAnswerResponse {
// Feedback related to the input data used to answer the question, as opposed
// to model-generated response to the question.
message InputFeedback {
// Specifies what was the reason why input was blocked.
enum BlockReason {
// Default value. This value is unused.
BLOCK_REASON_UNSPECIFIED = 0;
// Input was blocked due to safety reasons. You can inspect
// `safety_ratings` to understand which safety category blocked it.
SAFETY = 1;
// Input was blocked due to other reasons.
OTHER = 2;
}
// Optional. If set, the input was blocked and no candidates are returned.
// Rephrase your input.
optional BlockReason block_reason = 1
[(google.api.field_behavior) = OPTIONAL];
// Ratings for safety of the input.
// There is at most one rating per category.
repeated SafetyRating safety_ratings = 2;
}
// Candidate answer from the model.
//
// Note: The model *always* attempts to provide a grounded answer, even when
// the answer is unlikely to be answerable from the given passages.
// In that case, a low-quality or ungrounded answer may be provided, along
// with a low `answerable_probability`.
Candidate answer = 1;
// Output only. The model's estimate of the probability that its answer is
// correct and grounded in the input passages.
//
// A low answerable_probability indicates that the answer might not be
// grounded in the sources.
//
// When `answerable_probability` is low, some clients may wish to:
//
// * Display a message to the effect of "We couldn’t answer that question" to
// the user.
// * Fall back to a general-purpose LLM that answers the question from world
// knowledge. The threshold and nature of such fallbacks will depend on
// individual clients’ use cases. 0.5 is a good starting threshold.
optional float answerable_probability = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Feedback related to the input data used to answer the
// question, as opposed to model-generated response to the question.
//
// "Input data" can be one or more of the following:
//
// - Question specified by the last entry in `GenerateAnswerRequest.content`
// - Conversation history specified by the other entries in
// `GenerateAnswerRequest.content`
// - Grounding sources (`GenerateAnswerRequest.semantic_retriever` or
// `GenerateAnswerRequest.inline_passages`)
optional InputFeedback input_feedback = 3
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// Request containing the `Content` for the model to embed.
message EmbedContentRequest {
// Required. The model's resource name. This serves as an ID for the Model to
// use.
//
// This name should match a model name returned by the `ListModels` method.
//
// Format: `models/{model}`
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Model"
}
];
// Required. The content to embed. Only the `parts.text` fields will be
// counted.
Content content = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Optional task type for which the embeddings will be used. Can
// only be set for `models/embedding-001`.
optional TaskType task_type = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. An optional title for the text. Only applicable when TaskType is
// `RETRIEVAL_DOCUMENT`.
//
// Note: Specifying a `title` for `RETRIEVAL_DOCUMENT` provides better quality
// embeddings for retrieval.
optional string title = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. Optional reduced dimension for the output embedding. If set,
// excessive values in the output embedding are truncated from the end.
// Supported by `models/text-embedding-latest`.
optional int32 output_dimensionality = 5
[(google.api.field_behavior) = OPTIONAL];
}
// A list of floats representing an embedding.
message ContentEmbedding {
// The embedding values.
repeated float values = 1;
}
// The response to an `EmbedContentRequest`.
message EmbedContentResponse {
// Output only. The embedding generated from the input content.
ContentEmbedding embedding = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Batch request to get embeddings from the model for a list of prompts.
message BatchEmbedContentsRequest {
// Required. The model's resource name. This serves as an ID for the Model to
// use.
//
// This name should match a model name returned by the `ListModels` method.
//
// Format: `models/{model}`
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Model"
}
];
// Required. Embed requests for the batch. The model in each of these requests
// must match the model specified `BatchEmbedContentsRequest.model`.
repeated EmbedContentRequest requests = 2
[(google.api.field_behavior) = REQUIRED];
}
// The response to a `BatchEmbedContentsRequest`.
message BatchEmbedContentsResponse {
// Output only. The embeddings for each request, in the same order as provided
// in the batch request.
repeated ContentEmbedding embeddings = 1
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// Counts the number of tokens in the `prompt` sent to a model.
//
// Models may tokenize text differently, so each model may return a different
// `token_count`.
message CountTokensRequest {
// Required. The model's resource name. This serves as an ID for the Model to
// use.
//
// This name should match a model name returned by the `ListModels` method.
//
// Format: `models/{model}`
string model = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Model"
}
];
// Required. The input given to the model as a prompt.
repeated Content contents = 2 [(google.api.field_behavior) = REQUIRED];
}
// A response from `CountTokens`.
//
// It returns the model's `token_count` for the `prompt`.
message CountTokensResponse {
// The number of tokens that the `model` tokenizes the `prompt` into.
//
// Always non-negative.
int32 total_tokens = 1;
}