Referência da API em tempo real

A API Live permite interações de voz e vídeo bidirecionais de baixa latência com o Gemini. Com a API Live, você pode oferecer aos usuários finais a experiência de conversas naturais e semelhantes às humanas, além de interromper as respostas do modelo usando comandos de voz. A API Live pode processar entradas de texto, áudio e vídeo e fornecer saídas de texto e áudio.

Para mais informações sobre a API Live, consulte API Live.

Recursos

A API Live inclui os seguintes recursos principais:

  • Multimodalidade: o modelo pode ver, ouvir e falar.
  • Interação em tempo real com baixa latência: o modelo pode fornecer respostas rápidas.
  • Memória de sessão: o modelo retém a memória de todas as interações em uma única sessão, lembrando informações ouvidas ou vistas anteriormente.
  • Suporte para chamada de função, execução de código e pesquisa como ferramenta: é possível integrar o modelo a serviços e fontes de dados externos.

A API Live foi desenvolvida para comunicação de servidor para servidor.

Para apps da Web e para dispositivos móveis, recomendamos usar a integração dos nossos parceiros no Daily.

Modelos compatíveis

Primeiros passos

Para testar a API ao vivo, acesse o Vertex AI Studio e clique em Iniciar sessão.

A API Live é uma API stateful que usa WebSockets.

Esta seção mostra um exemplo de como usar a API Live para geração de texto-texto usando o Python 3.9 ou mais recente.

Gen AI SDK for Python

Instalar

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK da IA generativa com a Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    Content,
    LiveConnectConfig,
    HttpOptions,
    Modality,
    Part,
)

client = genai.Client(http_options=HttpOptions(api_version="v1beta1"))
model_id = "gemini-2.0-flash-live-preview-04-09"

async with client.aio.live.connect(
    model=model_id,
    config=LiveConnectConfig(response_modalities=[Modality.TEXT]),
) as session:
    text_input = "Hello? Gemini, are you there?"
    print("> ", text_input, "\n")
    await session.send_client_content(
        turns=Content(role="user", parts=[Part(text=text_input)])
    )

    response = []

    async for message in session.receive():
        if message.text:
            response.append(message.text)

    print("".join(response))
# Example output:
# >  Hello? Gemini, are you there?
# Yes, I'm here. What would you like to talk about?

Guia de integração

Esta seção descreve como a integração funciona com a API Live.

Sessões

Uma conexão WebSocket estabelece uma sessão entre o cliente e o servidor Gemini.

Depois que um cliente inicia uma nova conexão, a sessão pode trocar mensagens com o servidor para:

  • Enviar texto, áudio ou vídeo para o servidor do Gemini.
  • Receber solicitações de chamada de áudio, texto ou função do servidor Gemini.

A configuração da sessão é enviada na primeira mensagem após a conexão. Uma configuração de sessão inclui o modelo, os parâmetros de geração, instruções do sistema e ferramentas.

Confira o exemplo de configuração a seguir:


{
  "model": string,
  "generationConfig": {
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "temperature": number,
    "topP": number,
    "topK": integer,
    "presencePenalty": number,
    "frequencyPenalty": number,
    "responseModalities": [string],
    "speechConfig": object
  },

  "systemInstruction": string,
  "tools": [object]
}

Para mais informações, consulte BidiGenerateContentSetup.

Enviar mensagens

As mensagens são objetos formatados em JSON trocados pela conexão WebSocket.

Para enviar uma mensagem, o cliente precisa enviar um objeto JSON por uma conexão WebSocket aberta. O objeto JSON precisa ter exatamente um dos campos do conjunto de objetos a seguir:


{
  "setup": BidiGenerateContentSetup,
  "clientContent": BidiGenerateContentClientContent,
  "realtimeInput": BidiGenerateContentRealtimeInput,
  "toolResponse": BidiGenerateContentToolResponse
}

Mensagens de cliente com suporte

Confira as mensagens de cliente compatíveis na tabela a seguir:

Mensagem Descrição
BidiGenerateContentSetup Configuração da sessão a ser enviada na primeira mensagem
BidiGenerateContentClientContent Atualização incremental do conteúdo da conversa atual enviada pelo cliente
BidiGenerateContentRealtimeInput Entrada de áudio ou vídeo em tempo real
BidiGenerateContentToolResponse Resposta a uma ToolCallMessage recebida do servidor

Receber mensagens

Para receber mensagens do Gemini, detecte o evento "message" do WebSocket e analise o resultado de acordo com a definição das mensagens do servidor com suporte.

Confira a seguir:

ws.addEventListener("message", async (evt) => {
  if (evt.data instanceof Blob) {
    // Process the received data (audio, video, etc.)
  } else {
    // Process JSON response
  }
});

As mensagens do servidor terão exatamente um dos campos do seguinte conjunto de objetos:


{
  "setupComplete": BidiGenerateContentSetupComplete,
  "serverContent": BidiGenerateContentServerContent,
  "toolCall": BidiGenerateContentToolCall,
  "toolCallCancellation": BidiGenerateContentToolCallCancellation
  "usageMetadata": UsageMetadata
  "goAway": GoAway
  "sessionResumptionUpdate": SessionResumptionUpdate
  "inputTranscription": BidiGenerateContentTranscription
  "outputTranscription": BidiGenerateContentTranscription
}

Mensagens do servidor com suporte

Confira as mensagens do servidor compatíveis na tabela a seguir:

Mensagem Descrição
BidiGenerateContentSetupComplete Uma mensagem BidiGenerateContentSetup do cliente, enviada quando a configuração é concluída
BidiGenerateContentServerContent Conteúdo gerado pelo modelo em resposta a uma mensagem do cliente
BidiGenerateContentToolCall Solicitação para que o cliente execute as chamadas de função e retorne as respostas com os IDs correspondentes
BidiGenerateContentToolCallCancellation É enviado quando uma chamada de função é cancelada devido à interrupção da saída do modelo pelo usuário.
UsageMetadata Um relatório do número de tokens usados pela sessão até o momento
GoAway Um sinal de que a conexão atual será encerrada em breve
SessionResumptionUpdate Um ponto de controle de sessão, que pode ser retomado
BidiGenerateContentTranscription Uma transcrição da fala do usuário ou do modelo

Atualizações incrementais de conteúdo

Use atualizações incrementais para enviar entrada de texto, estabelecer o contexto da sessão ou restaurar o contexto da sessão. Para contextos curtos, você pode enviar interações passo a passo para representar a sequência exata de eventos. Para contextos mais longos, é recomendável fornecer um único resumo de mensagem para liberar a janela de contexto para as interações de acompanhamento.

Confira o exemplo de mensagem de contexto a seguir:

{
  "clientContent": {
    "turns": [
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"user"
      },
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"model"
      }
    ],
    "turnComplete": true
  }
}

Embora as partes do conteúdo possam ser do tipo functionResponse, BidiGenerateContentClientContent não pode ser usado para fornecer uma resposta às chamadas de função emitidas pelo modelo. Use BidiGenerateContentToolResponse. O BidiGenerateContentClientContent só deve ser usado para estabelecer o contexto anterior ou fornecer entrada de texto para a conversa.

Streaming de áudio e vídeo

Execução de código

Para saber mais sobre a execução de código, consulte Execução de código.

Chamadas de função

Todas as funções precisam ser declaradas no início da sessão enviando definições de ferramentas como parte da mensagem BidiGenerateContentSetup.

Você define funções usando JSON, especificamente com um subconjunto selecionado do formato de esquema da OpenAPI. Uma única declaração de função pode incluir os seguintes parâmetros:

  • name (string): o identificador exclusivo da função na chamada de API.

  • description (string): uma explicação abrangente do propósito e dos recursos da função.

  • parameters (objeto): define os dados de entrada necessários pela função.

    • type (string): especifica o tipo de dados geral, como objeto.

    • properties (objeto): lista parâmetros individuais, cada um com:

      • type (string): o tipo de dados do parâmetro, como string, número inteiro ou booleano.
      • description (string): uma explicação clara do objetivo e do formato esperado do parâmetro.
    • required (matriz): uma matriz de strings que lista os nomes de parâmetros obrigatórios para a função funcionar.

Para conferir exemplos de código de uma declaração de função usando comandos curl, consulte Chamada de função com a API Gemini. Para conferir exemplos de como criar declarações de função usando os SDKs da API Gemini, consulte o tutorial de chamada de função.

Com um único comando, o modelo pode gerar várias chamadas de função e o código necessário para encadear as saídas. Esse código é executado em um ambiente de sandbox, gerando mensagens BidiGenerateContentToolCall posteriores. A execução é pausada até que os resultados de cada chamada de função fiquem disponíveis, o que garante o processamento sequencial.

O cliente precisa responder com BidiGenerateContentToolResponse.

Para saber mais, consulte Introdução à chamada de função.

Formatos de áudio

Consulte a lista de formatos de áudio compatíveis.

Instruções do sistema

É possível fornecer instruções ao sistema para controlar melhor a saída do modelo e especificar o tom e o sentimento das respostas de áudio.

As instruções do sistema são adicionadas ao comando antes do início da interação e permanecem em vigor durante toda a sessão.

As instruções do sistema só podem ser definidas no início de uma sessão, imediatamente após a conexão inicial. Para fornecer mais entradas ao modelo durante a sessão, use atualizações de conteúdo incrementais.

Interrupções

Os usuários podem interromper a saída do modelo a qualquer momento. Quando a detecção de atividade de voz (VAD) detecta uma interrupção, a geração em andamento é cancelada e descartada. Somente as informações já enviadas ao cliente são retidas no histórico da sessão. Em seguida, o servidor envia uma mensagem BidiGenerateContentServerContent para informar a interrupção.

Além disso, o servidor Gemini descarta todas as chamadas de função pendentes e envia uma mensagem BidiGenerateContentServerContent com os IDs das chamadas canceladas.

Vozes

Para especificar uma voz, defina voiceName no objeto speechConfig como parte da configuração da sessão.

Confira a representação JSON a seguir de um objeto speechConfig:

{
  "voiceConfig": {
    "prebuiltVoiceConfig": {
      "voiceName": "VOICE_NAME"
    }
  }
}

Para conferir a lista de vozes compatíveis, consulte Mudar as configurações de voz e idioma.

Limitações

Considere as seguintes limitações da API Live e do Gemini 2.0 ao planejar seu projeto.

Autenticação do cliente

A API Live só oferece autenticação de servidor para servidor e não é recomendada para uso direto do cliente. A entrada do cliente precisa ser roteada por um servidor de aplicativo intermediário para autenticação segura com a API Live.

Duração máxima da sessão

A duração máxima padrão de uma sessão de conversa é de 10 minutos. Para mais informações, consulte Duração da sessão.

Detecção de atividade de voz (VAD)

Por padrão, o modelo realiza automaticamente a detecção de atividade de voz (VAD, na sigla em inglês) em um stream de entrada de áudio contínuo. O VAD pode ser configurado com o campo RealtimeInputConfig.AutomaticActivityDetection da mensagem de configuração.

Quando o fluxo de áudio é pausado por mais de um segundo (por exemplo, quando o usuário desliga o microfone), um evento AudioStreamEnd é enviado para limpar todo o áudio em cache. O cliente pode retomar o envio de dados de áudio a qualquer momento.

Como alternativa, o VAD automático pode ser desativado definindo RealtimeInputConfig.AutomaticActivityDetection.disabled como true na mensagem de configuração. Nessa configuração, o cliente é responsável por detectar a fala do usuário e enviar mensagens ActivityStart e ActivityEnd nos momentos apropriados. Um AudioStreamEnd não é enviado nesta configuração. Em vez disso, qualquer interrupção do fluxo é marcada por uma mensagem ActivityEnd.

Outras limitações

Não há suporte para endpoint manual.

As entradas e saídas de áudio afetam negativamente a capacidade do modelo de usar chamadas de função.

Contagem de tokens

Não há suporte para a contagem de tokens.

Limites de taxas

Os seguintes limites de taxa se aplicam:

  • Três sessões simultâneas por chave de API
  • 4 milhões de tokens por minuto

Mensagens e eventos

BidiGenerateContentClientContent

Atualização incremental da conversa atual enviada pelo cliente. Todo o conteúdo aqui é adicionado incondicionalmente ao histórico de conversas e usado como parte do comando para o modelo gerar conteúdo.

Uma mensagem aqui vai interromper qualquer geração de modelo atual.

Campos
turns[]

Content

Opcional. O conteúdo anexado à conversa atual com o modelo.

Para consultas de turno único, esta é uma instância única. Para consultas com várias interações, esse é um campo repetido que contém o histórico da conversa e a solicitação mais recente.

turn_complete

bool

Opcional. Se verdadeiro, indica que a geração de conteúdo do servidor precisa começar com o comando acumulado. Caso contrário, o servidor vai aguardar outras mensagens antes de iniciar a geração.

BidiGenerateContentRealtimeInput

Entrada do usuário enviada em tempo real.

Isso é diferente de ClientContentUpdate de algumas maneiras:

  • Podem ser enviados continuamente sem interrupção para a geração de modelos.
  • Se for necessário misturar dados intercalados entre ClientContentUpdate e RealtimeUpdate, o servidor vai tentar otimizar para a melhor resposta, mas não há garantias.
  • O fim da vez não é especificado explicitamente, mas é derivado da atividade do usuário (por exemplo, fim da fala).
  • Mesmo antes do fim da jogada, os dados são processados de forma incremental para otimizar o início rápido da resposta do modelo.
  • Sempre é considerada a entrada do usuário (não pode ser usada para preencher o histórico de conversas).
Campos
media_chunks[]

Blob

Opcional. Dados de bytes inline para entrada de mídia.

activity_start

ActivityStart

Opcional. Marca o início da atividade do usuário. Isso só pode ser enviado se a detecção automática (ou seja, do lado do servidor) estiver desativada.

activity_end

ActivityEnd

Opcional. Marca o fim da atividade do usuário. Isso só pode ser enviado se a detecção automática (ou seja, do lado do servidor) estiver desativada.

ActivityEnd

Esse tipo não tem campos.

Marca o fim da atividade do usuário.

ActivityStart

Esse tipo não tem campos.

Apenas um dos campos desta mensagem precisa ser definido por vez. Marca o início da atividade do usuário.

BidiGenerateContentServerContent

Atualização incremental do servidor gerada pelo modelo em resposta às mensagens do cliente.

O conteúdo é gerado o mais rápido possível, e não em tempo real. Os clientes podem escolher armazenar em buffer e reproduzir em tempo real.

Campos
turn_complete

bool

Apenas saída. Se verdadeiro, indica que a geração do modelo foi concluída. A geração só vai começar em resposta a outras mensagens do cliente. Pode ser definido com content, indicando que o content é o último na vez.

interrupted

bool

Apenas saída. Se verdadeiro, indica que uma mensagem do cliente interrompeu a geração de modelos atual. Se o cliente estiver reproduzindo o conteúdo em tempo real, esse é um bom sinal para interromper e esvaziar a fila atual. Se o cliente estiver reproduzindo o conteúdo em tempo real, esse é um bom sinal para interromper e esvaziar a fila de reprodução atual.

generation_complete

bool

Apenas saída. Se verdadeiro, indica que a geração do modelo foi concluída.

Quando o modelo é interrompido durante a geração, não há a mensagem "generation_complete" na jogada interrompida. Ela passa por "interrupted > turn_complete".

Quando o modelo assume a reprodução em tempo real, há um atraso entre generation_complete e turn_complete causado pelo modelo que aguarda a conclusão da reprodução.

grounding_metadata

GroundingMetadata

Apenas saída. Os metadados especificam as fontes usadas para fundamentar o conteúdo gerado.

input_transcription

Transcription

Opcional. Transcrição de entrada. A transcrição é independente da vez do modelo, o que significa que ela não implica em nenhuma ordem entre a transcrição e a vez do modelo.

output_transcription

Transcription

Opcional. Transcrição de saída. A transcrição é independente da vez do modelo, o que significa que ela não implica em nenhuma ordem entre a transcrição e a vez do modelo.

model_turn

Content

Apenas saída. O conteúdo que o modelo gerou como parte da conversa atual com o usuário.

Transcrição

Mensagem de transcrição de áudio.

Campos
text

string

Opcional. Texto da transcrição.

finished

bool

Opcional. O bool indica o fim da transcrição.

BidiGenerateContentSetup

Mensagem a ser enviada na primeira e única mensagem do cliente. Contém a configuração que será aplicada durante a sessão de streaming.

Os clientes precisam aguardar uma mensagem BidiGenerateContentSetupComplete antes de enviar outras mensagens.

Campos
model

string

Obrigatório. O nome totalmente qualificado do modelo do editor.

Formato do modelo do editor: projects/{project}/locations/{location}/publishers/\*/models/\*

generation_config

GenerationConfig

Opcional. Configuração de geração.

Os seguintes campos não são compatíveis:

  • response_logprobs
  • response_mime_type
  • logprobs
  • response_schema
  • stop_sequence
  • routing_config
  • audio_timestamp
system_instruction

Content

Opcional. O usuário forneceu instruções do sistema para o modelo. Observação: use apenas texto em partes, e o conteúdo de cada parte ficará em um parágrafo separado.

tools[]

Tool

Opcional. Uma lista de Tools que o modelo pode usar para gerar a próxima resposta.

Um Tool é um código que permite ao sistema interagir com sistemas externos para realizar uma ação ou conjunto de ações fora do conhecimento e do escopo do modelo.

session_resumption

SessionResumptionConfig

Opcional. Configura o mecanismo de retomada da sessão. Se incluído, o servidor vai enviar mensagens SessionResumptionUpdate periódicas ao cliente.

context_window_compression

ContextWindowCompressionConfig

Opcional. Configura o mecanismo de compactação da janela de contexto.

Se incluído, o servidor vai compactar a janela de contexto para caber no comprimento especificado.

realtime_input_config

RealtimeInputConfig

Opcional. Configura o processamento de entrada em tempo real.

input_audio_transcription

AudioTranscriptionConfig

Opcional. A transcrição da entrada é alinhada ao idioma do áudio de entrada.

output_audio_transcription

AudioTranscriptionConfig

Opcional. A transcrição da saída é alinhada ao código de idioma especificado para o áudio de saída.

AudioTranscriptionConfig

Esse tipo não tem campos.

A configuração da transcrição de áudio.

BidiGenerateContentSetupComplete

Esse tipo não tem campos.

Enviada em resposta a uma mensagem BidiGenerateContentSetup do cliente.

BidiGenerateContentToolCall

Solicitar que o cliente execute o function_calls e retorne as respostas com os ids correspondentes.

Campos
function_calls[]

FunctionCall

Apenas saída. A chamada de função a ser executada.

BidiGenerateContentToolCallCancellation

Notificação para o cliente de que um ToolCallMessage emitido anteriormente com os ids especificados não foi executado e precisa ser cancelado. Se houver efeitos colaterais nessas chamadas de ferramentas, os clientes poderão tentar desfazer as chamadas de ferramentas. Essa mensagem ocorre apenas nos casos em que os clientes interrompem as rodadas do servidor.

Campos
ids[]

string

Apenas saída. Os IDs das chamadas de ferramenta a serem canceladas.

BidiGenerateContentToolResponse

Resposta gerada pelo cliente para uma ToolCall recebida do servidor. Os objetos FunctionResponse individuais são associados aos respectivos objetos FunctionCall pelo campo id.

Nas APIs unary e de streaming do servidor, a chamada de função GenerateContent acontece trocando as partes Content, enquanto nas APIs bidi, a chamada de função acontece sobre esse conjunto dedicado de mensagens.

Campos
function_responses[]

FunctionResponse

Opcional. A resposta às chamadas de função.

RealtimeInputConfig

Configura o comportamento de entrada em tempo real em BidiGenerateContent.

Campos
automatic_activity_detection

AutomaticActivityDetection

Opcional. Se não for definido, a detecção automática de atividades será ativada por padrão. Se a detecção automática de voz estiver desativada, o cliente precisará enviar sinais de atividade.

activity_handling

ActivityHandling

Opcional. Define o efeito da atividade.

turn_coverage

TurnCoverage

Opcional. Define qual entrada é incluída na vez do usuário.

ActivityHandling

As diferentes maneiras de lidar com a atividade do usuário.

Enums
ACTIVITY_HANDLING_UNSPECIFIED Se não for especificado, o comportamento padrão será START_OF_ACTIVITY_INTERRUPTS.
START_OF_ACTIVITY_INTERRUPTS Se for verdadeiro, o início da atividade vai interromper a resposta do modelo, também chamada de "invasão". A resposta atual do modelo será interrompida no momento da interrupção. Esse é o comportamento padrão.
NO_INTERRUPTION A resposta do modelo não será interrompida.

AutomaticActivityDetection

Configura a detecção automática de atividade.

Campos
start_of_speech_sensitivity

StartSensitivity

Opcional. Determina a probabilidade de detecção da fala.

end_of_speech_sensitivity

EndSensitivity

Opcional. Determina a probabilidade de a fala detectada ter terminado.

prefix_padding_ms

int32

Opcional. A duração necessária da fala detectada antes que o início da fala seja confirmado. Quanto menor esse valor, mais sensível será a detecção do início da fala e mais curto poderá ser o discurso reconhecido. No entanto, isso também aumenta a probabilidade de falsos positivos.

silence_duration_ms

int32

Opcional. A duração necessária de silêncio (ou ausência de fala) detectado antes do fim da fala. Quanto maior esse valor, mais longos podem ser os intervalos de fala sem interromper a atividade do usuário, mas isso aumenta a latência do modelo.

disabled

bool

Opcional. Se ativada, a entrada de voz e texto detectada é considerada uma atividade. Se desativado, o cliente precisa enviar indicadores de atividade.

EndSensitivity

Fim da sensibilidade ao início da fala.

Enums
END_SENSITIVITY_UNSPECIFIED O padrão é END_SENSITIVITY_LOW.
END_SENSITIVITY_HIGH A detecção automática encerra a fala com mais frequência.
END_SENSITIVITY_LOW A detecção automática encerra a fala com menos frequência.

StartSensitivity

Sensibilidade ao início da fala.

Enums
START_SENSITIVITY_UNSPECIFIED O padrão é START_SENSITIVITY_LOW.
START_SENSITIVITY_HIGH A detecção automática vai detectar o início da fala com mais frequência.
START_SENSITIVITY_LOW A detecção automática vai detectar o início da fala com menos frequência.

TurnCoverage

Opções sobre qual entrada é incluída na vez do usuário.

Enums
TURN_COVERAGE_UNSPECIFIED Se não for especificado, o comportamento padrão será TURN_INCLUDES_ALL_INPUT.
TURN_INCLUDES_ONLY_ACTIVITY A vez do usuário inclui apenas a atividade desde a última vez, excluindo a inatividade (por exemplo, silêncio no fluxo de áudio).
TURN_INCLUDES_ALL_INPUT A vez do usuário inclui todas as entradas em tempo real desde a última vez, incluindo a inatividade (por exemplo, silêncio no fluxo de áudio). Esse é o comportamento padrão.

UsageMetadata

Metadados sobre o uso do conteúdo armazenado em cache.

Campos
total_token_count

int32

Número total de tokens consumidos pelo conteúdo armazenado em cache.

text_count

int32

Número de caracteres de texto.

image_count

int32

Número de imagens.

video_duration_seconds

int32

Duração do vídeo em segundos.

audio_duration_seconds

int32

Duração do áudio em segundos.

GoAway

O servidor não vai conseguir atender o cliente em breve.

Campos
time_left

Duration

O tempo restante antes que a conexão seja encerrada como CANCELADA. O tempo mínimo retornado aqui é especificado de forma diferente, junto com os limites de taxa de um determinado modelo.

SessionResumptionUpdate

Atualização do estado de retomada da sessão.

Só é enviado se BidiGenerateContentSetup.session_resumption foi definido.

Campos
new_handle

string

Novo identificador que representa o estado que pode ser retomado. Vazio se resumable=false.

resumable

bool

Verdadeiro se a sessão puder ser retomada neste ponto.

Talvez não seja possível retomar a sessão em alguns pontos. Nesse caso, enviamos uma atualização vazia de new_handle e resumable=false. Um exemplo desse caso pode ser um modelo que executa chamadas de função ou apenas gera. A retomada da sessão (usando o token da sessão anterior) nesse estado resultará em perda de dados.

last_consumed_client_message_index

int64

Índice da última mensagem enviada pelo cliente que está incluída no estado representado por este SessionResumptionToken. Só é enviado quando SessionResumptionConfig.transparent está definido.

A presença desse índice permite que os usuários se conectem de forma transparente e evitam o problema de perder parte da entrada de áudio/vídeo em tempo real. Se o cliente quiser se desconectar temporariamente (por exemplo, como resultado do recebimento de GoAway), ele poderá fazer isso sem perder o estado, armazenando em buffer as mensagens enviadas desde a última SessionResmumptionTokenUpdate. Esse campo permite limitar o armazenamento em buffer (evitar manter todas as solicitações na RAM).

Ele não será usado para "retomada para restaurar o estado" algum tempo depois. Nesses casos, é provável que os frames de áudio e vídeo parciais não sejam necessários.

A seguir