Skip to main content
Les API temps réel de Gradium utilisent le même cycle de vie WebSocket pour la TTS et le STT :
  1. Connectez-vous avec authentification.
  2. Envoyez un message setup.
  3. Attendez ready, ou recevez-le en différé.
  4. Envoyez les messages d’entrée (text pour le TTS, audio pour le STT).
  5. Si besoin, faites un flush de l’entrée en tampon.
  6. Envoyez end_of_stream.
  7. Lisez la sortie jusqu’à ce que le serveur envoie end_of_stream ou error.
Le SDK Python gère la connexion pour vous, mais le cycle de vie est le même si vous utilisez directement le protocole.

Endpoints

Authentification

Les clients côté serveur doivent envoyer la clé API dans l’en-tête x-api-key :
Les clients navigateur ne doivent pas exposer de clés API. Générez sur votre serveur un token à usage unique et de courte durée, puis connectez-vous avec ?token=... ; voir WebSockets dans le navigateur.

Setup

Le premier message logique de chaque requête est setup.
TTS setup
STT setup
Champs de setup communs : Champs de setup propres au TTS : Champs de setup propres au STT :

Ready

Après le setup, le serveur envoie ready. Vous pouvez l’attendre avant d’envoyer l’entrée, ou commencer à envoyer immédiatement et laisser le SDK le récupérer pendant la réception.
TTS ready
STT ready
Utilisez request_id dans vos logs et vos tickets de support. Pour le STT, utilisez delay_in_frames pour régler la gestion des tours de parole ou le comportement du flush forcé.

Entrée

Le TTS accepte des messages texte :
Lorsque vous diffusez en streaming le texte d’un LLM, découpez-le sur les espaces ou aux limites de phrases. Ne coupez pas à l’intérieur d’un mot et n’isolez pas la ponctuation dans un message à part : le serveur traite les messages texte successifs comme des fragments distincts et insère un espace entre eux. Le STT accepte des messages audio encodés en base64 :
Pour du PCM brut, utilisez si possible des fragments de 80 ms :

Flush

Le TTS prend en charge le flush au niveau du modèle avec la balise <flush> dans le texte :
Utilisez-la lorsqu’un LLM en amont a terminé une idée et que vous voulez que le modèle émette l’audio restant en tampon sans attendre davantage de texte. Évitez de faire un flush après chaque token : de petits fragments de texte dégradent la prosodie. Le STT prend en charge un message flush :
Le serveur traite l’audio en attente et répond avec :
Utilisez le flush STT lorsque votre application a détecté une fin de tour de parole et a besoin de la transcription en attente avant de passer la main à un agent.

Fin

Envoyez end_of_stream lorsque vous avez fini d’envoyer l’entrée d’une requête :
Pour une connexion à usage unique, le serveur envoie la sortie finale puis ferme le WebSocket. Pour une connexion réutilisable ou multiplexée, définissez close_ws_on_eos: false dans le setup et continuez à envoyer de nouveaux groupes setup/entrée.

Multiplexage

Pour exécuter plusieurs requêtes logiques sur un seul socket :
  1. Définissez close_ws_on_eos: false.
  2. Associez un client_req_id unique à chaque message d’une requête.
  3. Routez chaque réponse selon son client_req_id correspondant.
Consultez Multiplexage pour des exemples complets.

Erreurs

Les erreurs WebSocket sont envoyées en JSON, puis le socket se ferme :
Considérez error comme définitif pour ce socket. Ouvrez une nouvelle connexion pour réessayer. Codes courants : Pour les contrats d’erreur REST et WebSocket, voir Erreurs.

Étapes suivantes

WebSocket de synthèse vocale

Envoyez du texte en flux et recevez des fragments audio en retour.

WebSocket de transcription

Envoyez de l’audio en flux et recevez du texte, des événements VAD et flush.

Multiplexage

Exécutez plusieurs requêtes logiques sur un seul WebSocket.

WebSockets dans le navigateur

Utilisez des tokens de courte durée sans exposer vos clés API.