L'API Live est une API avec état qui utilise WebSockets. Dans cette section, vous trouverez des informations supplémentaires sur l'API WebSockets.
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.
Connexion WebSocket
Pour démarrer une session, connectez-vous à ce point de terminaison WebSocket :
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Configuration de la session
Le message initial envoyé après l'établissement de la connexion WebSocket définit la configuration de la session, qui inclut le modèle, les paramètres de génération, les instructions système et les outils.
Vous ne pouvez pas mettre à jour la configuration lorsque la connexion est ouverte. Toutefois, vous pouvez modifier les paramètres de configuration, à l'exception du modèle, lorsque vous mettez en pause et reprenez l'opération via le mécanisme de reprise de session.
Consultez l'exemple de configuration suivant. Notez que la casse des noms peut varier dans les SDK. Vous pouvez consulter les options de configuration du SDK Python ici.
{
"model": string,
"generationConfig": {
"candidateCount": integer,
"maxOutputTokens": integer,
"temperature": number,
"topP": number,
"topK": integer,
"presencePenalty": number,
"frequencyPenalty": number,
"responseModalities": [string],
"speechConfig": object,
"mediaResolution": object
},
"systemInstruction": string,
"tools": [object]
}
Pour en savoir plus sur le champ de l'API, consultez generationConfig.
Envoyer des messages
Pour échanger des messages via la connexion WebSocket, 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, vidéo ou textuelle 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.
Consultez les références suivantes :
async with client.aio.live.connect(model='...', config=config) as session:
await session.send(input='Hello world!', end_of_turn=True)
async for message in session.receive():
print(message)
Les messages serveur peuvent comporter un champ usageMetadata, mais ils incluent exactement l'un des autres champs du message BidiGenerateContentServerMessage. (L'union messageType n'est pas exprimée en JSON. Le champ apparaît donc au niveau supérieur du message.)
Messages et événements
ActivityEnd
Ce type ne comporte aucun champ.
Indique la fin de l'activité 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. |
ActivityStart
Ce type ne comporte aucun champ.
Indique le début de l'activité de l'utilisateur.
AudioTranscriptionConfig
Ce type ne comporte aucun champ.
Configuration de la transcription audio.
AutomaticActivityDetection
Configure la détection automatique de l'activité.
| Champs | |
|---|---|
disabled |
Facultatif. Si cette option est activée (valeur par défaut), 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é. |
startOfSpeechSensitivity |
Facultatif. Détermine la probabilité de détection de la parole. |
prefixPaddingMs |
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. |
endOfSpeechSensitivity |
Facultatif. Détermine la probabilité que la parole détectée soit terminée. |
silenceDurationMs |
Facultatif. Durée requise de sons autres que la parole (par exemple, du silence) détectés 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. |
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 le prompt envoyé 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[] |
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. |
turnComplete |
Facultatif. Si la valeur est "true", cela indique que la génération du contenu du serveur doit commencer par le prompt actuellement accumulé. 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.
Les différentes modalités (audio, vidéo et texte) sont traitées comme des flux simultanés. L'ordre de ces flux n'est pas garanti.
Cette méthode diffère de BidiGenerateContentClientContent 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
BidiGenerateContentClientContentetBidiGenerateContentRealtimeInput, 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.
| Champs | |
|---|---|
mediaChunks[] |
Facultatif. Données d'octets intégrés pour l'entrée multimédia. Plusieurs OBSOLÈTE : utilisez plutôt |
audio |
Facultatif. Ils constituent le flux d'entrée audio en temps réel. |
video |
Facultatif. Ils constituent le flux d'entrée vidéo en temps réel. |
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. |
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. |
audioStreamEnd |
Facultatif. Indique que le flux audio est terminé, par exemple parce que le micro a été désactivé. Cette information ne doit être envoyée que lorsque la détection automatique de l'activité est activée (ce qui est le cas par défaut). Le client peut rouvrir le flux en envoyant un message audio. |
text |
Facultatif. Ils constituent le flux d'entrée de texte en temps réel. |
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 | |
|---|---|
generationComplete |
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. |
turnComplete |
Uniquement en sortie. Si la valeur est "true", cela indique que le modèle a terminé son tour. La génération ne démarre que si d'autres messages du client sont reçus. |
interrupted |
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 de lecture actuelle. |
groundingMetadata |
Uniquement en sortie. Métadonnées d'ancrage pour le contenu généré. |
inputTranscription |
Uniquement en sortie. Transcription audio de l'entrée. La transcription est envoyée indépendamment des autres messages du serveur et l'ordre n'est pas garanti. |
outputTranscription |
Uniquement en sortie. Transcription audio de la sortie. La transcription est envoyée indépendamment des autres messages du serveur. L'ordre n'est pas garanti, en particulier entre |
urlContextMetadata |
|
modelTurn |
Uniquement en sortie. Contenu généré par le modèle pendant la conversation en cours avec l'utilisateur. |
BidiGenerateContentServerMessage
Message de réponse pour l'appel BidiGenerateContent.
| Champs | |
|---|---|
usageMetadata |
Uniquement en sortie. Métadonnées d'utilisation concernant la ou les réponses. |
Champ d'union messageType. Type du message. messageType ne peut être qu'un des éléments suivants : |
|
setupComplete |
Uniquement en sortie. Il est envoyé en réponse à un message |
serverContent |
Uniquement en sortie. Contenu généré par le modèle en réponse aux messages client. |
toolCall |
Uniquement en sortie. Demande au client d'exécuter les |
toolCallCancellation |
Uniquement en sortie. Notification au client indiquant qu'un |
goAway |
Uniquement en sortie. Notification indiquant que le serveur va bientôt se déconnecter. |
sessionResumptionUpdate |
Uniquement en sortie. Mise à jour de l'état de reprise de la session. |
BidiGenerateContentSetup
Message à envoyer dans le premier (et uniquement dans le premier) BidiGenerateContentClientMessage. Contient la configuration qui s'appliquera pendant la durée du RPC de streaming.
Les clients doivent attendre un message BidiGenerateContentSetupComplete avant d'envoyer d'autres messages.
| Champs | |
|---|---|
model |
Obligatoire. Nom de ressource du modèle. Il sert d'ID pour le modèle. Format : |
generationConfig |
Facultatif. Configuration de la génération. Les champs suivants ne sont pas acceptés :
|
systemInstruction |
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[] |
Facultatif. Liste de
|
realtimeInputConfig |
Facultatif. Configure la gestion de l'entrée en temps réel. |
sessionResumption |
Facultatif. Configure le mécanisme de reprise de session. Si cet élément est inclus, le serveur envoie des messages |
contextWindowCompression |
Facultatif. Configure un mécanisme de compression de la fenêtre de contexte. Si cet élément est inclus, le serveur réduit automatiquement la taille du contexte lorsqu'il dépasse la longueur configurée. |
inputAudioTranscription |
Facultatif. Si cette option est définie, elle active la transcription de la saisie vocale. La transcription correspond à la langue audio d'entrée, si elle est configurée. |
outputAudioTranscription |
Facultatif. Si cette option est définie, elle permet de transcrire la sortie audio du modèle. La transcription correspond au code de langue spécifié pour le contenu audio de sortie, le cas échéant. |
proactivity |
Facultatif. Configure la proactivité du modèle. Cela permet au modèle de répondre de manière proactive à l'entrée et d'ignorer les entrées non pertinentes. |
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 functionCalls et de renvoyer les réponses avec les id correspondants.
| Champs | |
|---|---|
functionCalls[] |
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[] |
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 | |
|---|---|
functionResponses[] |
Facultatif. Réponse aux appels de fonction. |
BidiGenerateContentTranscription
Transcription de l'audio (entrée ou sortie).
| Champs | |
|---|---|
text |
Texte de la transcription. |
ContextWindowCompressionConfig
Active la compression de la fenêtre de contexte, un mécanisme permettant de gérer la fenêtre de contexte du modèle afin qu'elle ne dépasse pas une longueur donnée.
| Champs | |
|---|---|
Champ d'union compressionMechanism. Mécanisme de compression de la fenêtre de contexte utilisé. compressionMechanism ne peut être qu'un des éléments suivants : |
|
slidingWindow |
Un mécanisme de fenêtre glissante. |
triggerTokens |
Nombre de jetons (avant l'exécution d'un tour) requis pour déclencher une compression de la fenêtre de contexte. Vous pouvez l'utiliser pour trouver un équilibre entre la qualité et la latence, car des fenêtres de contexte plus courtes peuvent entraîner des réponses plus rapides du modèle. Toutefois, toute opération de compression entraînera une augmentation temporaire de la latence. Il ne faut donc pas les déclencher fréquemment. Si aucune valeur n'est définie, la valeur par défaut est de 80 % de la limite de la fenêtre de contexte du modèle. Il reste donc 20 % pour la prochaine requête utilisateur/réponse du modèle. |
EndSensitivity
Détermine comment la fin de la parole est détectée.
| Enums | |
|---|---|
END_SENSITIVITY_UNSPECIFIED |
La valeur par défaut est END_SENSITIVITY_HIGH. |
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. |
GoAway
Notification indiquant que le serveur va bientôt se déconnecter.
| Champs | |
|---|---|
timeLeft |
Temps restant avant la fin de la connexion (considérée comme ABORTED). Cette durée ne sera jamais inférieure à un minimum spécifique au modèle, qui sera spécifié avec les limites de débit pour le modèle. |
ProactivityConfig
Configuration des fonctionnalités de proactivité.
| Champs | |
|---|---|
proactiveAudio |
Facultatif. Si cette option est activée, le modèle peut refuser de répondre à la dernière requête. Par exemple, cela permet au modèle d'ignorer les paroles hors contexte ou de rester silencieux si l'utilisateur n'a pas encore fait de demande. |
RealtimeInputConfig
Configure le comportement d'entrée en temps réel dans BidiGenerateContent.
| Champs | |
|---|---|
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é. |
activityHandling |
Facultatif. Définit l'effet de l'activité. |
turnCoverage |
Facultatif. Définit l'entrée incluse dans le tour de l'utilisateur. |
SessionResumptionConfig
Configuration de la reprise de session.
Ce message est inclus dans la configuration de la session en tant que BidiGenerateContentSetup.sessionResumption. Si cette option est configurée, le serveur envoie des messages SessionResumptionUpdate.
| Champs | |
|---|---|
handle |
Handle d'une session précédente. Si elle n'est pas présente, une session est créée. Les identifiants de session proviennent des valeurs |
SessionResumptionUpdate
Mise à jour de l'état de reprise de la session.
N'est envoyé que si BidiGenerateContentSetup.sessionResumption a été défini.
| Champs | |
|---|---|
newHandle |
Nouveau handle représentant un état pouvant être repris. Vide si |
resumable |
"True" si la session actuelle peut être reprise à ce stade. Il est possible que vous ne puissiez pas reprendre la session à certains moments. Par exemple, lorsque le modèle exécute des appels de fonction ou génère du contenu. La reprise de la session (à l'aide d'un jeton de session précédent) dans cet état entraînera une perte de données. Dans ce cas, |
SlidingWindow
La méthode SlidingWindow consiste à supprimer le contenu au début de la fenêtre de contexte. Le contexte obtenu commencera toujours au début d'un tour de rôle USER. Les instructions système et les BidiGenerateContentSetup.prefixTurns resteront toujours au début du résultat.
| Champs | |
|---|---|
targetTokens |
Nombre cible de jetons à conserver. La valeur par défaut est trigger_tokens/2. Le fait de supprimer des parties de la fenêtre de contexte entraîne une augmentation temporaire de la latence. Cette valeur doit donc être calibrée pour éviter les opérations de compression fréquentes. |
StartSensitivity
Détermine comment le début de la parole est détecté.
| Enums | |
|---|---|
START_SENSITIVITY_UNSPECIFIED |
La valeur par défaut est START_SENSITIVITY_HIGH. |
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_ONLY_ACTIVITY. |
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). Il s'agit du comportement par défaut. |
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). |
UrlContextMetadata
Métadonnées associées à l'outil de récupération du contexte d'URL.
| Champs | |
|---|---|
urlMetadata[] |
Liste du contexte d'URL. |
UsageMetadata
Métadonnées d'utilisation concernant la ou les réponses.
| Champs | |
|---|---|
promptTokenCount |
Uniquement en sortie. Nombre de jetons dans la requête. Lorsque |
cachedContentTokenCount |
Nombre de jetons dans la partie mise en cache de la requête (le contenu mis en cache) |
responseTokenCount |
Uniquement en sortie. Nombre total de jetons pour tous les candidats de réponse générés. |
toolUsePromptTokenCount |
Uniquement en sortie. Nombre de jetons présents dans la ou les invites d'utilisation d'outils. |
thoughtsTokenCount |
Uniquement en sortie. Nombre de jetons de pensées pour les modèles à raisonnement. |
totalTokenCount |
Uniquement en sortie. Nombre total de jetons pour la requête de génération (requête + candidats de réponse). |
promptTokensDetails[] |
Uniquement en sortie. Liste des modalités traitées dans l'entrée de la requête. |
cacheTokensDetails[] |
Uniquement en sortie. Liste des modalités du contenu mis en cache dans l'entrée de la requête. |
responseTokensDetails[] |
Uniquement en sortie. Liste des modalités renvoyées dans la réponse. |
toolUsePromptTokensDetails[] |
Uniquement en sortie. Liste des modalités traitées pour les entrées de demande d'utilisation d'outils. |
Jetons d'authentification éphémères
Vous pouvez obtenir des jetons d'authentification éphémères en appelant AuthTokenService.CreateToken, puis les utiliser avec GenerativeService.BidiGenerateContentConstrained, soit en transmettant le jeton dans un paramètre de requête access_token, soit dans un en-tête HTTP Authorization avec le préfixe "Token".
CreateAuthTokenRequest
Créez un jeton d'authentification éphémère.
| Champs | |
|---|---|
authToken |
Obligatoire. Jeton à créer. |
AuthToken
Requête permettant de créer un jeton d'authentification éphémère.
| Champs | |
|---|---|
name |
Uniquement en sortie. Identifiant. Le jeton lui-même. |
expireTime |
Facultatif. Uniquement en entrée. Immuable. Il s'agit d'une durée facultative au-delà de laquelle les messages des sessions BidiGenerateContent seront refusés lorsque le jeton obtenu sera utilisé. (Gemini peut fermer la session de manière préventive après ce délai.) Si elle n'est pas définie, la valeur par défaut est 30 minutes dans le futur. Si elle est définie, cette valeur doit être inférieure à 20 heures dans le futur. |
newSessionExpireTime |
Facultatif. Uniquement en entrée. Immuable. Heure après laquelle les nouvelles sessions de l'API Live utilisant le jeton résultant de cette requête seront refusées. Si cette valeur n'est pas définie, la valeur par défaut est de 60 secondes dans le futur. Si elle est définie, cette valeur doit être inférieure à 20 heures dans le futur. |
fieldMask |
Facultatif. Uniquement en entrée. Immuable. Si field_mask est vide et que Si field_mask est vide et que Si field_mask n'est pas vide, les champs correspondants de |
Champ d'union config. Configuration spécifique à la méthode pour le jeton obtenu. config ne peut être qu'un des éléments suivants : |
|
bidiGenerateContentSetup |
Facultatif. Uniquement en entrée. Immuable. Configuration spécifique à |
uses |
Facultatif. Uniquement en entrée. Immuable. Nombre de fois où le jeton peut être utilisé. Si cette valeur est égale à zéro, aucune limite n'est appliquée. La reprise d'une session de l'API Live n'est pas comptabilisée comme une utilisation. Si aucune valeur n'est spécifiée, la valeur par défaut est 1. |
En savoir plus sur les types courants
Pour en savoir plus sur les types de ressources d'API couramment utilisés Blob, Content, FunctionCall, FunctionResponse, GenerationConfig, GroundingMetadata, ModalityTokenCount et Tool, consultez Générer du contenu.