Documentation de référence de l'API Live

L'API Live permet des interactions vocales et vidéo bidirectionnelles à faible latence avec Gemini. Vous pouvez l'utiliser pour proposer aux utilisateurs finaux des conversations vocales naturelles et leur permettre d'interrompre les réponses du modèle à l'aide de commandes vocales. L'API Live peut traiter les entrées texte, audio et vidéo, et fournir des sorties texte et audio.

Pour en savoir plus sur l'API Live, consultez API Live.

Fonctionnalités

L'API Live inclut les principales fonctionnalités suivantes :

  • Multimodalité : le modèle peut voir, entendre et parler.
  • Interaction en temps réel à faible latence : le modèle peut fournir des réponses rapides.
  • Mémoire par session : le modèle conserve en mémoire toutes les interactions au cours d'une même session, en rappelant les informations déjà entendues ou vues.
  • Compatibilité avec l'appel de fonction, l'exécution de code et la recherche en tant qu'outil : vous pouvez intégrer le modèle à des services et des sources de données externes.

L'API Live est conçue pour la communication entre serveurs.

Pour les applications Web et mobiles, nous vous recommandons d'utiliser l'intégration de nos partenaires sur Daily.

Modèles compatibles

Commencer

Pour essayer l'API Live, accédez à Vertex AI Studio, puis cliquez sur Lancer une session.

L'API Live est une API avec état qui utilise WebSockets.

Cette section présente un exemple d'utilisation de l'API Live pour la génération de texte à texte à l'aide de Python 3.9 ou version ultérieure.

Gen AI SDK for Python

Installation

pip install --upgrade google-genai

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Gen AI avec 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?

Guide d'intégration

Cette section décrit le fonctionnement de l'intégration avec l'API Live.

Sessions

Une connexion WebSocket établit une session entre le client et le serveur Gemini.

Une fois qu'un client a établi une nouvelle connexion, la session peut échanger des messages avec le serveur pour :

  • envoyer du texte, de l'audio ou des vidéos au serveur Gemini ;
  • recevoir des requêtes audio, textuelles ou d'appel de fonction du serveur Gemini.

La configuration de la session est envoyée dans le premier message après la connexion. Une configuration de session inclut le modèle, les paramètres de génération, les instructions système et les outils.

Consultez l'exemple de configuration suivant :


{
  "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]
}

Pour en savoir plus, consultez BidiGenerateContentSetup.

Envoyer des messages

Les messages sont des objets au format JSON échangés par le biais de la connexion WebSocket.

Pour envoyer un message, le client doit envoyer un objet JSON par le biais d'une connexion WebSocket ouverte. L'objet JSON doit comporter exactement l'un des champs de l'ensemble d'objets suivant :


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

Messages client acceptés

Consultez les messages client acceptés dans le tableau suivant :

Message Description
BidiGenerateContentSetup Configuration de la session envoyée dans le premier message
BidiGenerateContentClientContent Mise à jour incrémentielle du contenu de la conversation actuelle envoyée par le client
BidiGenerateContentRealtimeInput Entrée audio ou vidéo en temps réel
BidiGenerateContentToolResponse Réponse à un ToolCallMessage reçu du serveur

Recevoir des messages

Pour recevoir des messages de Gemini, écoutez l'événement "message" de WebSocket, puis analysez le résultat en fonction de la définition des messages serveur acceptés.

Examinez le code suivant :

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

Les messages serveur doivent comporter exactement l'un des champs de l'ensemble d'objets suivant :


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

Messages serveur acceptés

Consultez les messages serveur acceptés dans le tableau suivant :

Message Description
BidiGenerateContentSetupComplete Message BidiGenerateContentSetup du client, envoyé une fois la configuration terminée
BidiGenerateContentServerContent Contenu généré par le modèle en réponse à un message client
BidiGenerateContentToolCall Demande au client d'exécuter les appels de fonction et de renvoyer les réponses avec les ID correspondants
BidiGenerateContentToolCallCancellation Envoyé lorsqu'un appel de fonction est annulé, car l'utilisateur a interrompu la sortie du modèle
UsageMetadata Rapport sur le nombre de jetons utilisés par la session jusqu'à présent
GoAway Signal indiquant que la connexion actuelle sera bientôt interrompue
SessionResumptionUpdate Point de contrôle de session, qui peut être repris
BidiGenerateContentTranscription Transcription de la parole de l'utilisateur ou du modèle

Mises à jour incrémentielles du contenu

Utilisez des mises à jour incrémentielles pour envoyer une entrée textuelle, ou établir ou restaurer le contexte de la session. Pour les contextes courts, vous pouvez envoyer des interactions au fur et à mesure pour représenter la séquence exacte des événements. Pour les contextes plus longs, il est recommandé de fournir un seul résumé des messages afin de libérer la fenêtre de contexte pour les interactions de suivi.

Consultez l'exemple de message de contexte suivant :

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

Notez que, bien que les parties de contenu puissent être de type functionResponse, BidiGenerateContentClientContent ne doit pas être utilisé pour fournir une réponse aux appels de fonction émis par le modèle. Utilisez BidiGenerateContentToolResponse à la place. BidiGenerateContentClientContent ne doit être utilisé que pour établir le contexte précédent ou fournir une entrée textuelle à la conversation.

Contenu audio et vidéo en streaming

Exécution du code

Pour en savoir plus sur l'exécution du code, consultez Exécution du code.

Appel de fonction

Toutes les fonctions doivent être déclarées au début de la session en envoyant des définitions d'outils dans le message BidiGenerateContentSetup.

Vous définissez des fonctions à l'aide de JSON, en particulier avec un sous-ensemble sélectionné du format de schéma OpenAPI. Une déclaration de fonction peut inclure les paramètres suivants :

  • name (chaîne) : identifiant unique de la fonction dans l'appel d'API.

  • description (chaîne) : explication détaillée de l'objectif et des fonctionnalités de la fonction.

  • parameters (objet) : définit les données d'entrée requises par la fonction.

    • type (chaîne) : spécifie le type de données global, tel qu'un objet.

    • properties (objet) : liste les paramètres individuels, chacun avec les éléments suivants :

      • type (chaîne) : type de données du paramètre, tel que chaîne, entier ou booléen.
      • description (chaîne) : explication claire de l'objectif du paramètre et du format attendu.
    • required (tableau) : tableau de chaînes listant les noms des paramètres obligatoires pour le bon fonctionnement de la fonction.

Pour obtenir des exemples de code d'une déclaration de fonction à l'aide de commandes curl, consultez Appel de fonction avec l'API Gemini. Pour obtenir des exemples de création de déclarations de fonction à l'aide des SDK de l'API Gemini, consultez le tutoriel sur l'appel de fonction.

À partir d'une seule requête, le modèle peut générer plusieurs appels de fonction et le code nécessaire pour chaîner leurs sorties. Ce code s'exécute dans un environnement de bac à sable, générant par la suite des messages BidiGenerateContentToolCall. L'exécution est interrompue jusqu'à ce que les résultats de chaque appel de fonction soient disponibles, ce qui assure un traitement séquentiel.

Le client doit répondre avec BidiGenerateContentToolResponse.

Pour en savoir plus, consultez Présentation de l'appel de fonction.

Formats audio

Consultez la liste des formats audio acceptés.

Instructions système

Vous pouvez fournir des instructions système pour mieux contrôler la sortie du modèle et spécifier le ton et le sentiment des réponses audio.

Les instructions système sont ajoutées à la requête avant le début de l'interaction et s'appliquent pendant toute la session.

Les instructions système ne peuvent être définies qu'au début d'une session, immédiatement après la connexion initiale. Pour fournir des entrées supplémentaires au modèle pendant la session, utilisez des mises à jour incrémentielles du contenu.

Interruptions

Les utilisateurs peuvent interrompre la sortie du modèle à tout moment. Lorsque la détection de l'activité vocale (VAD, Voice Activity Detection) détecte une interruption, la génération en cours est annulée et supprimée. Seules les informations déjà envoyées au client sont conservées dans l'historique de la session. Le serveur envoie ensuite un message BidiGenerateContentServerContent pour signaler l'interruption.

De plus, le serveur Gemini supprime tous les appels de fonction en attente et envoie un message BidiGenerateContentServerContent avec les ID des appels annulés.

Voix

Pour spécifier une voix, définissez voiceName dans l'objet speechConfig lors de la configuration de la session.

Examinez la représentation JSON suivante d'un objet speechConfig :

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

Pour afficher la liste des voix acceptées, consultez Modifier les paramètres de voix et de langue.

Limites

Tenez compte des limites suivantes de l'API Live et de Gemini 2.0 lorsque vous planifiez votre projet.

Authentification client

L'API Live ne fournit qu'une authentification de serveur à serveur et n'est pas recommandée pour une utilisation directe par le client. L'entrée client doit être acheminée au moyen d'un serveur d'applications intermédiaire pour assurer une authentification sécurisée avec l'API Live.

Durée maximale de la session

La durée maximale par défaut d'une session de conversation est de 10 minutes. Pour en savoir plus, consultez Durée des sessions.

Détection de l'activité vocale (VAD)

Par défaut, le modèle détecte automatiquement l'activité vocale sur un flux d'entrée audio continu. La VAD peut être configurée avec le champ RealtimeInputConfig.AutomaticActivityDetection du message de configuration.

Lorsque le flux audio est mis en pause pendant plus d'une seconde (par exemple, parce que l'utilisateur a désactivé le micro), un événement AudioStreamEnd est envoyé pour vider l'audio mis en cache. Le client peut reprendre l'envoi des données audio à tout moment.

Vous pouvez également désactiver la VAD automatique en définissant RealtimeInputConfig.AutomaticActivityDetection.disabled sur true dans le message de configuration. Dans cette configuration, le client est chargé de détecter la parole de l'utilisateur et d'envoyer les messages ActivityStart et ActivityEnd au moment opportun. Un AudioStreamEnd n'est pas envoyé dans cette configuration. Au lieu de cela, toute interruption du flux est marquée par un message ActivityEnd.

Autres limites

La sélection manuelle du point de terminaison n'est pas prise en charge.

Les entrées et les sorties audio ont un impact négatif sur la capacité du modèle à utiliser l'appel de fonction.

Nombre de jetons

Le nombre de jetons n'est pas pris en charge.

Limites de débit

Les limites de débit suivantes s'appliquent :

  • 3 sessions simultanées par clé API
  • 4 millions de jetons par minute

Messages et événements

BidiGenerateContentClientContent

Mise à jour incrémentielle de la conversation en cours envoyée par le client. Tout le contenu est ajouté sans condition à l'historique de la conversation et utilisé dans la requête envoyée au modèle pour générer du contenu.

Un message ici interrompra toute génération de contenu actuellement réalisée par le modèle.

Champs
turns[]

Content

Facultatif. Contenu ajouté à la conversation en cours avec le modèle.

Pour les requêtes à un seul tour, il s'agit d'une instance unique. Pour les requêtes multitours, il s'agit d'un champ répété contenant l'historique de la conversation et la dernière requête.

turn_complete

bool

Facultatif. Si la valeur est "true", cela indique que la génération du contenu du serveur doit commencer par la requête actuellement accumulée. Sinon, le serveur attendra des messages supplémentaires avant de commencer la génération.

BidiGenerateContentRealtimeInput

Entrée utilisateur envoyée en temps réel.

Cette méthode diffère de ClientContentUpdate de plusieurs manières :

  • Elle peut être envoyée en continu sans interrompre la génération de contenu par le modèle.
  • Si vous devez mélanger des données entrelacées entre ClientContentUpdate et RealtimeUpdate, le serveur tente d'optimiser la réponse, sans garantie que cela fonctionne.
  • La fin du tour n'est pas spécifiée explicitement. Elle dépend plutôt de l'activité de l'utilisateur (par exemple, fin de la parole).
  • Même avant la fin du tour, les données sont traitées de manière incrémentielle pour optimiser le démarrage rapide de la réponse du modèle.
  • Elle est toujours considérée comme l'entrée de l'utilisateur. Elle ne peut pas être utilisée pour remplir l'historique de la conversation.
Champs
media_chunks[]

Blob

Facultatif. Données d'octets intégrés pour l'entrée multimédia.

activity_start

ActivityStart

Facultatif. Indique le début de l'activité de l'utilisateur. Cette information ne peut être envoyée que si la détection automatique de l'activité (c'est-à-dire côté serveur) est désactivée.

activity_end

ActivityEnd

Facultatif. Indique la fin de l'activité de l'utilisateur. Cette information ne peut être envoyée que si la détection automatique de l'activité (c'est-à-dire côté serveur) est désactivée.

ActivityEnd

Ce type ne comporte aucun champ.

Indique la fin de l'activité de l'utilisateur.

ActivityStart

Ce type ne comporte aucun champ.

Un seul des champs de ce message doit être défini à la fois. Indique le début de l'activité de l'utilisateur.

BidiGenerateContentServerContent

Mise à jour incrémentielle du serveur générée par le modèle en réponse aux messages client.

Le contenu est généré aussi rapidement que possible, et non en temps réel. Les clients peuvent choisir de le mettre en mémoire tampon et de le lire en temps réel.

Champs
turn_complete

bool

Uniquement en sortie. Si la valeur est "true", cela indique que le modèle a fini de générer du contenu. La génération ne démarre que si d'autres messages du client sont reçus. Ce champ peut être défini avec content, ce qui indique que content est le dernier élément du tour.

interrupted

bool

Uniquement en sortie. Si la valeur est "true", cela indique qu'un message client a interrompu la génération de contenu actuellement réalisée par le modèle. Si le client lit le contenu en temps réel, il est recommandé d'arrêter et de vider la file d'attente actuelle. Si le client lit le contenu en temps réel, il est recommandé d'arrêter et de vider la file d'attente de lecture actuelle.

generation_complete

bool

Uniquement en sortie. Si la valeur est "true", cela indique que le modèle a fini de générer du contenu.

Lorsque la génération de contenu par le modèle est interrompue, le message "generation_complete" n'est pas affiché dans le tour interrompu. Le message "interrupted" sera directement suivi du message "turn_complete".

Lorsque le modèle suppose une lecture en temps réel, il y a un délai entre les messages "generation_complete" et "turn_complete", car le modèle attend la fin de la lecture.

grounding_metadata

GroundingMetadata

Uniquement en sortie. Les métadonnées spécifient les sources utilisées pour ancrer le contenu généré.

input_transcription

Transcription

Facultatif. Transcription de l'entrée. La transcription est indépendante du tour du modèle, ce qui signifie qu'il n'y a pas d'ordre entre la transcription et le tour du modèle.

output_transcription

Transcription

Facultatif. Transcription de la sortie. La transcription est indépendante du tour du modèle, ce qui signifie qu'il n'y a pas d'ordre entre la transcription et le tour du modèle.

model_turn

Content

Uniquement en sortie. Contenu généré par le modèle pendant la conversation en cours avec l'utilisateur.

Transcription

Message de transcription audio.

Champs
text

string

Facultatif. Texte de la transcription.

finished

bool

Facultatif. "bool" indique la fin de la transcription.

BidiGenerateContentSetup

Message à envoyer uniquement dans le premier message client. Contient la configuration qui s'appliquera pendant la durée de la session de streaming.

Les clients doivent attendre un message BidiGenerateContentSetupComplete avant d'envoyer d'autres messages.

Champs
model

string

Obligatoire. Nom complet du modèle d'éditeur.

Format du modèle d'éditeur : projects/{project}/locations/{location}/publishers/\*/models/\*

generation_config

GenerationConfig

Facultatif. Configuration de la génération.

Les champs suivants ne sont pas acceptés :

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

Content

Facultatif. Instructions système fournies par l'utilisateur pour le modèle. Remarque : seul du texte doit être utilisé dans les parties, et le contenu de chaque partie figurera dans un paragraphe distinct.

tools[]

Tool

Facultatif. Liste de Tools que le modèle peut utiliser pour générer la réponse suivante.

Tool est une portion de code qui permet au système d'interagir avec des systèmes externes pour effectuer une action ou un ensemble d'actions en dehors du champ d'application et des connaissances du modèle.

session_resumption

SessionResumptionConfig

Facultatif. Configure le mécanisme de reprise de session. Si cet élément est inclus, le serveur envoie régulièrement des messages SessionResumptionUpdate au client.

context_window_compression

ContextWindowCompressionConfig

Facultatif. Configure le mécanisme de compression de la fenêtre de contexte.

Si cet élément est inclus, le serveur compresse la fenêtre de contexte pour l'adapter à la longueur donnée.

realtime_input_config

RealtimeInputConfig

Facultatif. Configure la gestion de l'entrée en temps réel.

input_audio_transcription

AudioTranscriptionConfig

Facultatif. La transcription de l'entrée correspond à la langue audio d'entrée.

output_audio_transcription

AudioTranscriptionConfig

Facultatif. La transcription de la sortie correspond au code de langue spécifié pour le contenu audio de sortie.

AudioTranscriptionConfig

Ce type ne comporte aucun champ.

Configuration de la transcription audio.

BidiGenerateContentSetupComplete

Ce type ne comporte aucun champ.

Il est envoyé en réponse à un message BidiGenerateContentSetup du client.

BidiGenerateContentToolCall

Demande au client d'exécuter les function_calls et de renvoyer les réponses avec les id correspondants.

Champs
function_calls[]

FunctionCall

Uniquement en sortie. Appel de fonction à exécuter.

BidiGenerateContentToolCallCancellation

Notification au client indiquant qu'un ToolCallMessage précédemment émis avec les id spécifiés n'aurait pas dû être exécuté et doit être annulé. Si ces appels d'outils ont eu des effets secondaires, les clients peuvent tenter de les annuler. Ce message ne s'affiche que lorsque les clients interrompent les tours du serveur.

Champs
ids[]

string

Uniquement en sortie. ID des appels d'outils à annuler.

BidiGenerateContentToolResponse

Réponse générée par le client à un ToolCall reçu du serveur. Les objets FunctionResponse individuels sont mis en correspondance avec les objets FunctionCall respectifs par le champ id.

Notez que dans les API GenerateContent unaires et de streaming côté serveur, l'appel de fonction est effectué en échangeant les parties Content, tandis que dans les API GenerateContent bidirectionnelles, l'appel de fonction est réalisé sur cet ensemble de messages dédié.

Champs
function_responses[]

FunctionResponse

Facultatif. Réponse aux appels de fonction.

RealtimeInputConfig

Configure le comportement d'entrée en temps réel dans BidiGenerateContent.

Champs
automatic_activity_detection

AutomaticActivityDetection

Facultatif. Si cet élément n'est pas défini, la détection automatique de l'activité est activée par défaut. Si elle est désactivée, le client doit envoyer des signaux d'activité.

activity_handling

ActivityHandling

Facultatif. Définit l'effet de l'activité.

turn_coverage

TurnCoverage

Facultatif. Définit l'entrée incluse dans le tour de l'utilisateur.

ActivityHandling

Les différentes façons de gérer l'activité de l'utilisateur.

Énumérations
ACTIVITY_HANDLING_UNSPECIFIED Si aucune valeur n'est spécifiée, le comportement par défaut est START_OF_ACTIVITY_INTERRUPTS.
START_OF_ACTIVITY_INTERRUPTS Si la valeur est "true", le démarrage de l'activité interrompt la réponse du modèle (également appelé "barge-in"). La réponse actuelle du modèle est suspendue au moment de l'interruption. Il s'agit du comportement par défaut.
NO_INTERRUPTION La réponse du modèle n'est pas interrompue.

AutomaticActivityDetection

Configure la détection automatique de l'activité.

Champs
start_of_speech_sensitivity

StartSensitivity

Facultatif. Détermine la probabilité de détection de la parole.

end_of_speech_sensitivity

EndSensitivity

Facultatif. Détermine la probabilité que la parole détectée soit terminée.

prefix_padding_ms

int32

Facultatif. Durée requise de la parole détectée avant validation du début de la parole. Plus cette valeur est faible, plus la détection du début de la parole est sensible, ce qui permet de détecter des paroles plus courtes. Toutefois, cela augmente également la probabilité de faux positifs.

silence_duration_ms

int32

Facultatif. Durée requise du silence (ou de sons autres que la parole) détecté avant validation de la fin de la parole. Plus cette valeur est élevée, plus les intervalles de parole peuvent être longs sans interrompre l'activité de l'utilisateur. Toutefois, cela augmente la latence du modèle.

disabled

bool

Facultatif. Si cet élément est activé, les entrées vocales et textuelles détectées sont considérées comme une activité. S'il est désactivé, le client doit envoyer des signaux d'activité.

EndSensitivity

Sensibilité de la fin de la parole.

Énumérations
END_SENSITIVITY_UNSPECIFIED La valeur par défaut est END_SENSITIVITY_LOW.
END_SENSITIVITY_HIGH La détection automatique met fin plus souvent à la parole.
END_SENSITIVITY_LOW La détection automatique met fin moins souvent à la parole.

StartSensitivity

Sensibilité du début de la parole.

Énumérations
START_SENSITIVITY_UNSPECIFIED La valeur par défaut est START_SENSITIVITY_LOW.
START_SENSITIVITY_HIGH La détection automatique détectera plus souvent le début de la parole.
START_SENSITIVITY_LOW La détection automatique détectera moins souvent le début de la parole.

TurnCoverage

Options concernant les entrées à inclure dans le tour de l'utilisateur.

Énumérations
TURN_COVERAGE_UNSPECIFIED Si aucune valeur n'est spécifiée, le comportement par défaut est TURN_INCLUDES_ALL_INPUT.
TURN_INCLUDES_ONLY_ACTIVITY Le tour de l'utilisateur inclut uniquement l'activité depuis le dernier tour, à l'exclusion de l'inactivité (par exemple, un silence sur le flux audio).
TURN_INCLUDES_ALL_INPUT Le tour de l'utilisateur inclut toutes les entrées en temps réel depuis le dernier tour, y compris l'inactivité (par exemple, un silence sur le flux audio). Il s'agit du comportement par défaut.

UsageMetadata

Métadonnées sur l'utilisation du contenu mis en cache.

Champs
total_token_count

int32

Nombre total de jetons consommés par le contenu mis en cache.

text_count

int32

Nombre de caractères textuels.

image_count

int32

Nombre d'images.

video_duration_seconds

int32

Durée de la vidéo, en secondes.

audio_duration_seconds

int32

Durée de l'audio, en secondes.

GoAway

Le serveur ne pourra bientôt plus répondre aux demandes du client.

Champs
time_left

Duration

Temps restant avant la fin de la connexion (considérée comme ABORTED). Le temps minimal renvoyé est spécifié différemment avec les limites de débit pour un modèle donné.

SessionResumptionUpdate

Mise à jour de l'état de reprise de la session.

N'est envoyé que si BidiGenerateContentSetup.session_resumption a été défini.

Champs
new_handle

string

Nouveau handle représentant un état pouvant être repris. Vide si resumable=false.

resumable

bool

"True" si la session peut être reprise à ce stade.

Il est possible que vous ne puissiez pas reprendre la session à certains moments. Dans ce cas, nous envoyons une mise à jour new_handle vide et l'état resumable=false. Il peut s'agir par exemple d'un modèle qui exécute des appels de fonction ou qui génère simplement du contenu. La reprise de la session (à l'aide du jeton de session précédent) dans cet état entraînera une perte de données.

last_consumed_client_message_index

int64

Index du dernier message envoyé par le client et inclus dans l'état représenté par le SessionResumptionToken. Envoyé uniquement lorsque SessionResumptionConfig.transparent est défini.

La présence de cet index permet aux utilisateurs de se reconnecter de manière transparente et d'éviter de perdre une partie de l'entrée audio/vidéo en temps réel. Si le client souhaite se déconnecter temporairement (par exemple, suite à la réception d'un message GoAway), il peut le faire sans perdre l'état en mettant en mémoire tampon les messages envoyés depuis la dernière SessionResmumptionTokenUpdate. Ce champ leur permet de limiter la mise en mémoire tampon (d'éviter de conserver toutes les requêtes dans la mémoire RAM).

Il ne servira pas pour la "reprise afin de restaurer l'état". Dans ce cas, les images audio et vidéo partielles ne sont probablement pas nécessaires.

Étapes suivantes