Référence du SDK Python

Classes, méthodes et événements du SDK Python Speech Engine.

Cette page documente l’API publique du SDK Python Speech Engine (elevenlabs).

Obtenir une ressource Speech Engine

Récupérez une SpeechEngineResource à partir de son ID de moteur. L’objet renvoyé fournit des méthodes pour démarrer un serveur, vérifier des requêtes ou créer des sessions individuelles.

from elevenlabs import AsyncElevenLabs
elevenlabs = AsyncElevenLabs()
engine = await elevenlabs.speech_engine.get("seng_8k3m9xr4hjnfg983brhmhkd98n6")

SpeechEngineResource

Propriétés

PropriétéTypeDescription
engine_idstrL’ID du moteur vocal.

serve

Démarre un serveur WebSocket autonome. Bloque jusqu’à son arrêt.

await engine.serve(
port=3001,
path="/ws",
debug=True,
on_transcript=handle_transcript,
)
ParamètreTypeValeur par défautDescription
portint3001Port sur lequel écouter.
pathstrNoneRestreint les connexions à ce chemin. None accepte toutes les connexions.
debugboolFalseActive la journalisation de débogage vers stdout.
disable_authboolFalseIgnore la vérification JWT pour les connexions entrantes. Consultez Désactiver l’authentification.
on_initcallableAppelé lors de l’initialisation d’une session.
on_transcriptcallableAppelé lorsqu’une transcription utilisateur arrive.
on_closecallableAppelé lors d’une déconnexion propre.
on_disconnectcallableAppelé lorsque le WebSocket se ferme de manière inattendue.
on_errorcallableAppelé en cas d’erreurs de protocole ou WebSocket.

Désactiver l’authentification

Par défaut, serve() vérifie l’en-tête X-Elevenlabs-Speech-Engine-Authorization sur chaque connexion entrante. Si votre serveur se trouve derrière une couche d’infrastructure qui restreint déjà le trafic entrant à ElevenLabs, généralement une liste d’autorisation d’adresses IP limitée aux plages de sortie d’ElevenLabs, vous pouvez ignorer la vérification JWT en transmettant disable_auth=True :

# No api_key required when disable_auth is True
await engine.serve(port=3001, disable_auth=True, on_transcript=on_transcript)
# Or directly on SpeechEngineServer
from elevenlabs.speech_engine import SpeechEngineServer
server = SpeechEngineServer(port=3001, disable_auth=True, on_transcript=on_transcript)
await server.serve()

Lorsque l’authentification est désactivée, le serveur accepte tout client pouvant l’atteindre et émet un UserWarning au démarrage.

Utilisez disable_auth=True uniquement si une liste d’autorisation d’adresses IP, des valeurs d’en-tête personnalisées ou une restriction réseau équivalente se trouve devant le serveur. Sans cela, toute personne sur Internet peut ouvrir une session et consommer vos ressources de calcul ainsi que votre quota LLM en aval.

verify_request

Vérifie qu’une requête entrante provient de l’API Speech Engine d’ElevenLabs. Vérifie que l’en-tête X-Elevenlabs-Speech-Engine-Authorization contient un JWT valide signé avec le hachage SHA-256 de votre clé API.

Nécessaire uniquement si vous gérez vous-même la mise à niveau WebSocket. Avec serve(), la vérification est effectuée automatiquement, sauf si disable_auth=True a été défini.

is_valid = engine.verify_request(headers)
ParamètreTypeDescription
headersdictDictionnaire des en-têtes de requête.

Renvoie : bool, True si la requête est valide.

create_session

Encapsule un WebSocket accepté dans une SpeechEngineSession. Utilisez cette méthode pour une intégration serveur personnalisée, par exemple FastAPI, Starlette ou une gestion manuelle de WebSocket.

session = engine.create_session(websocket, debug=True)
session.on("user_transcript", handle_transcript)
await session.run()
ParamètreTypeValeur par défautDescription
wsWebSocketUne connexion WebSocket acceptée.
debugboolFalseActive la journalisation de débogage.

Renvoie : SpeechEngineSession

SpeechEngineSession

Encapsule une seule connexion WebSocket. Chaque connexion représente une conversation. La session émet des événements pour les transcriptions et les changements de cycle de vie, et fournit des méthodes pour renvoyer des réponses LLM.

Lorsqu’une nouvelle transcription arrive, le gestionnaire de la transcription précédente est automatiquement annulé, interrompant tout appel LLM en cours.

Propriétés

PropriétéTypeDescription
conversation_idOptional[str]L’ID de conversation attribué par l’API. Disponible après init.
is_openboolIndique si la session est toujours ouverte.

on

Enregistre un gestionnaire pour un événement. Renvoie la session pour permettre l’enchaînement.

session.on("user_transcript", handler)

off

Supprime un gestionnaire précédemment enregistré.

session.off("user_transcript", handler)

once

Enregistre un gestionnaire qui s’exécute une fois puis se supprime.

session.once("init", handler)

send_response

Renvoie une réponse LLM à l’API Speech Engine pour la synthèse vocale. Cette méthode doit être appelée dans un gestionnaire on_transcript. L’appeler en dehors d’un gestionnaire émet un avertissement et s’arrête sans envoyer de réponse.

# String response
await session.send_response("Hello, how can I help?")
# Streamed response (OpenAI, Anthropic, or Gemini)
stream = await openai_client.responses.create(model="gpt-4o", input=messages, stream=True)
await session.send_response(stream)
ParamètreTypeDescription
responsestr | itérable asynchroneUne chaîne complète ou un itérable asynchrone de segments de texte ou d’événements de flux LLM.

Le SDK détecte automatiquement et extrait le texte des formats de flux LLM suivants :

FournisseurFormat d’événement
API Responses d’OpenAI{ type: "response.output_text.delta", delta: "text" }
Chat Completions d’OpenAI{ choices: [{ delta: { content: "text" } }] }
API Messages d’Anthropic{ type: "content_block_delta", delta: { type: "text_delta", text: "text" } }
API Gemini de Google{ candidates: [{ content: { parts: [{ text: "text" }] } }] }

run

Exécute la boucle de réception jusqu’à la fermeture du WebSocket. Il s’agit du point d’entrée principal après la création manuelle d’une session via create_session().

session = engine.create_session(websocket)
session.on("user_transcript", handle_transcript)
await session.run()

close

Ferme la session et la connexion WebSocket sous-jacente.

session.close()

Rappels

Les arguments nommés transmis à serve(). Tous les rappels sont facultatifs. Les gestionnaires peuvent être des fonctions synchrones ou asynchrones, sous forme de coroutines.

RappelSignatureDescription
on_init(conversation_id: str, session) -> NoneSession initialisée avec un ID de conversation.
on_transcript(transcript: list, session) -> NoneParole de l’utilisateur transcrite.
on_close(session) -> NoneDéconnexion propre d’ElevenLabs.
on_disconnect(session) -> NoneWebSocket fermé de manière inattendue.
on_error(error: Exception, session) -> NoneErreur de protocole ou WebSocket.

Événements

Lorsque vous utilisez directement session.on() plutôt que des rappels, voici les noms des événements et les signatures de leurs gestionnaires.

ÉvénementSignature du gestionnaire
user_transcript(transcript: list[ConversationMessage])
init(conversation_id: str)
close()
disconnected()
error(error: Exception)

Des constantes de noms d’événements sont disponibles pour une utilisation avec sûreté de type :

from elevenlabs.speech_engine import USER_TRANSCRIPT, INIT, CLOSE, DISCONNECTED, ERROR
session.on(USER_TRANSCRIPT, handle_transcript)

ConversationMessage

Un message unique dans l’historique de conversation. La transcription complète est transmise à on_transcript à chaque tour.

PropriétéTypeDescription
role"user" | "agent"L’expéditeur du message.
contentstrLe contenu textuel du message.

Protocole filaire

À titre de référence, voici les messages JSON échangés via la connexion WebSocket. Le SDK gère automatiquement la sérialisation et la désérialisation.

Entrants, de l’API ElevenLabs vers le serveur du développeur

Type de messageChampsDescription
initconversation_id: stringSession initialisée.
user_transcriptuser_transcript: TranscriptMessage[], event_id: numberParole de l’utilisateur transcrite.
pingMaintien de connexion. Le SDK répond par pong.
closeDéconnexion propre.
errormessage: stringErreur provenant de l’API.

Sortants, du serveur du développeur vers l’API ElevenLabs

Type de messageChampsDescription
agent_responsecontent: string, event_id: number, is_final: booleanSegment de réponse LLM pour la synthèse TTS.
pongRéponse à ping.