| // 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/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 = "DiscussServiceProto"; |
| option java_package = "com.google.ai.generativelanguage.v1beta"; |
| |
| // An API for using Generative Language Models (GLMs) in dialog applications. |
| // |
| // Also known as large language models (LLMs), this API provides models that |
| // are trained for multi-turn dialog. |
| service DiscussService { |
| option (google.api.default_host) = "generativelanguage.googleapis.com"; |
| |
| // Generates a response from the model given an input `MessagePrompt`. |
| rpc GenerateMessage(GenerateMessageRequest) |
| returns (GenerateMessageResponse) { |
| option (google.api.http) = { |
| post: "/v1beta/{model=models/*}:generateMessage" |
| body: "*" |
| }; |
| option (google.api.method_signature) = |
| "model,prompt,temperature,candidate_count,top_p,top_k"; |
| } |
| |
| // Runs a model's tokenizer on a string and returns the token count. |
| rpc CountMessageTokens(CountMessageTokensRequest) |
| returns (CountMessageTokensResponse) { |
| option (google.api.http) = { |
| post: "/v1beta/{model=models/*}:countMessageTokens" |
| body: "*" |
| }; |
| option (google.api.method_signature) = "model,prompt"; |
| } |
| } |
| |
| // Request to generate a message response from the model. |
| message GenerateMessageRequest { |
| // Required. The name of the model to use. |
| // |
| // Format: `name=models/{model}`. |
| string model = 1 [ |
| (google.api.field_behavior) = REQUIRED, |
| (google.api.resource_reference) = { |
| type: "generativelanguage.googleapis.com/Model" |
| } |
| ]; |
| |
| // Required. The structured textual input given to the model as a prompt. |
| // |
| // Given a |
| // prompt, the model will return what it predicts is the next message in the |
| // discussion. |
| MessagePrompt prompt = 2 [(google.api.field_behavior) = REQUIRED]; |
| |
| // Optional. Controls the randomness of the output. |
| // |
| // Values can range over `[0.0,1.0]`, |
| // inclusive. A value closer to `1.0` will produce responses that are more |
| // varied, while a value closer to `0.0` will typically result in |
| // less surprising responses from the model. |
| optional float temperature = 3 [(google.api.field_behavior) = OPTIONAL]; |
| |
| // Optional. The number of generated response messages to return. |
| // |
| // This value must be between |
| // `[1, 8]`, inclusive. If unset, this will default to `1`. |
| optional int32 candidate_count = 4 [(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. |
| // |
| // Nucleus sampling considers the smallest set of tokens whose probability |
| // sum is at least `top_p`. |
| optional float top_p = 5 [(google.api.field_behavior) = OPTIONAL]; |
| |
| // Optional. The maximum number of tokens to consider when sampling. |
| // |
| // The model uses combined Top-k and nucleus sampling. |
| // |
| // Top-k sampling considers the set of `top_k` most probable tokens. |
| optional int32 top_k = 6 [(google.api.field_behavior) = OPTIONAL]; |
| } |
| |
| // The response from the model. |
| // |
| // This includes candidate messages and |
| // conversation history in the form of chronologically-ordered messages. |
| message GenerateMessageResponse { |
| // Candidate response messages from the model. |
| repeated Message candidates = 1; |
| |
| // The conversation history used by the model. |
| repeated Message messages = 2; |
| |
| // A set of content filtering metadata for the prompt and response |
| // text. |
| // |
| // This indicates which `SafetyCategory`(s) blocked a |
| // candidate from this response, the lowest `HarmProbability` |
| // that triggered a block, and the HarmThreshold setting for that category. |
| repeated ContentFilter filters = 3; |
| } |
| |
| // The base unit of structured text. |
| // |
| // A `Message` includes an `author` and the `content` of |
| // the `Message`. |
| // |
| // The `author` is used to tag messages when they are fed to the |
| // model as text. |
| message Message { |
| // Optional. The author of this Message. |
| // |
| // This serves as a key for tagging |
| // the content of this Message when it is fed to the model as text. |
| // |
| // The author can be any alphanumeric string. |
| string author = 1 [(google.api.field_behavior) = OPTIONAL]; |
| |
| // Required. The text content of the structured `Message`. |
| string content = 2 [(google.api.field_behavior) = REQUIRED]; |
| |
| // Output only. Citation information for model-generated `content` in this |
| // `Message`. |
| // |
| // If this `Message` was generated as output from the model, this field may be |
| // populated with attribution information for any text included in the |
| // `content`. This field is used only on output. |
| optional CitationMetadata citation_metadata = 3 |
| [(google.api.field_behavior) = OUTPUT_ONLY]; |
| } |
| |
| // All of the structured input text passed to the model as a prompt. |
| // |
| // A `MessagePrompt` contains a structured set of fields that provide context |
| // for the conversation, examples of user input/model output message pairs that |
| // prime the model to respond in different ways, and the conversation history |
| // or list of messages representing the alternating turns of the conversation |
| // between the user and the model. |
| message MessagePrompt { |
| // Optional. Text that should be provided to the model first to ground the |
| // response. |
| // |
| // If not empty, this `context` will be given to the model first before the |
| // `examples` and `messages`. When using a `context` be sure to provide it |
| // with every request to maintain continuity. |
| // |
| // This field can be a description of your prompt to the model to help provide |
| // context and guide the responses. Examples: "Translate the phrase from |
| // English to French." or "Given a statement, classify the sentiment as happy, |
| // sad or neutral." |
| // |
| // Anything included in this field will take precedence over message history |
| // if the total input size exceeds the model's `input_token_limit` and the |
| // input request is truncated. |
| string context = 1 [(google.api.field_behavior) = OPTIONAL]; |
| |
| // Optional. Examples of what the model should generate. |
| // |
| // This includes both user input and the response that the model should |
| // emulate. |
| // |
| // These `examples` are treated identically to conversation messages except |
| // that they take precedence over the history in `messages`: |
| // If the total input size exceeds the model's `input_token_limit` the input |
| // will be truncated. Items will be dropped from `messages` before `examples`. |
| repeated Example examples = 2 [(google.api.field_behavior) = OPTIONAL]; |
| |
| // Required. A snapshot of the recent conversation history sorted |
| // chronologically. |
| // |
| // Turns alternate between two authors. |
| // |
| // If the total input size exceeds the model's `input_token_limit` the input |
| // will be truncated: The oldest items will be dropped from `messages`. |
| repeated Message messages = 3 [(google.api.field_behavior) = REQUIRED]; |
| } |
| |
| // An input/output example used to instruct the Model. |
| // |
| // It demonstrates how the model should respond or format its response. |
| message Example { |
| // Required. An example of an input `Message` from the user. |
| Message input = 1 [(google.api.field_behavior) = REQUIRED]; |
| |
| // Required. An example of what the model should output given the input. |
| Message output = 2 [(google.api.field_behavior) = REQUIRED]; |
| } |
| |
| // 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 CountMessageTokensRequest { |
| // 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 prompt, whose token count is to be returned. |
| MessagePrompt prompt = 2 [(google.api.field_behavior) = REQUIRED]; |
| } |
| |
| // A response from `CountMessageTokens`. |
| // |
| // It returns the model's `token_count` for the `prompt`. |
| message CountMessageTokensResponse { |
| // The number of tokens that the `model` tokenizes the `prompt` into. |
| // |
| // Always non-negative. |
| int32 token_count = 1; |
| } |