Des tokens partiels pendant que la phrase est encore prononcée.
Tapra-Voice-Realtime est le jumeau streaming de Tapra-Voice : même gestion de l’alternance de langues, autre mode de livraison. Le navigateur ou votre serveur ouvre une socket, envoie des trames PCM 16 kHz et reçoit des événements partiels à mesure que les mots sont reconnus, puis une transcription finale avec le coût exact quand vous arrêtez.
ready 0.01 s → first partial 1.97 s → utterance 23.64 s → final 28.06 s (reason: client_stop)
Sortie réelle
Sorties réelles
Enregistré depuis le modèle en production.
Chaque sortie de cette page provient de tapra-voice-v1-realtime le 8 octobre 2026 et est affichée sans retouche, erreurs comprises. Chaque réponse réelle indique aussi son coût exact dans x-tapra-cost-tnd.
La note vocale multilingue de 26 secondes, diffusée en temps réel en trames PCM de 100 ms. Chaque partiel ci-dessous est l’événement envoyé par le serveur, au moment où il l’a envoyé.
0:00 / 0:00
Le client envoie · pcm_s16le 16 kHz
Partiels du serveur
final
نخمم نعمل une combinaison ما بين les deux modèles tomes canagent اللي هو capable يجاوب عل les clients كيما مثلا في الكنفيرما متاع les ordres والا تعمل marketing لهنا le modèle لازمو يكون قادر يعمل switch between languages ويجاوب زادا بنفس ال façon
Flux brut. Il entend mal le même nom de produit que le modèle fichiers (« tomes canagent »), mais écrit correctement façon, là où la transcription fichier se trompait.
Ce qu’il fait
Des capacités sur lesquelles construire dès aujourd’hui.
01
VAD sur les silences et fin de tour
Les sessions en direct masquent le silence avant le décodeur et émettent un événement utterance après environ 800 ms de pause. Environ 10 secondes de silence continu arrêtent la session, pour qu’un micro oublié ne bloque pas une place. Passez idle_stop=0 pour continuer d’écouter.
02
Pas de démarrage à froid GPU
L’inférence tourne sur des instances CPU standard. La première trame est servie tout de suite : pas de temps de chauffe, pas de capacité louée au repos.
03
Authentification sans fuite de clé
Les clients navigateur passent les sous-protocoles WebSocket tapra-realtime et tapra-auth.<API_KEY>. Les clients serveur utilisent Authorization: Bearer pendant l’upgrade. Une clé n’a jamais sa place dans une URL.
04
Cycle de vie explicite
Un événement ready ouvre la session, les partiels arrivent, {"type":"stop"} la ferme avec la transcription finale et le coût, et un ping toutes les 15 secondes garde la connexion quand vous n’envoyez pas d’audio. Dix secondes de silence ferment aussi la session, sauf avec idle_stop=0.
Actif par défaut ; ~800 ms de silence émettent utterance
Arrêt sur inactivité
Actif par défaut ; ~10 s de silence envoient final et ferment la socket
Keep-alive
{"type":"ping"} toutes les 15 secondes sans envoi d’audio
Fermeture
{"type":"stop"} ou l’arrêt sur inactivité renvoient la transcription finale et l’usage
Facturation
Millisecondes d’audio diffusées, à 0.300 TND / min
Ouvrir un flux temps réelts
const socket = new WebSocket(
'wss://api.tapra.tn/v1/realtime/stream?language=ar-AR',
['tapra-realtime', 'tapra-auth.' + apiKey]
);
socket.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'partial') render(message.text);
if (message.type === 'utterance') lockTurn(message.turn_text);
if (message.type === 'final') console.log(message.text, message.usage);
};
// Push mono 16-bit PCM frames, then close the session cleanly.
socket.onopen = () => recorder.onFrame((frame) => socket.send(frame));
stopButton.onclick = () => socket.send(JSON.stringify({ type: 'stop' }));
Comparaison
Ce qui distingue Tapra-Voice-Realtime.
Comparé aux API temps réel hébergées sur GPU et aux moteurs vocaux des navigateurs.
Tapra-Voice-Realtime comparé à une alternative générique
Capacité
Tapra-Voice-Realtime
Alternative générique
Temps de décodage d’un partiel
Médiane 4 ms, p95 119 ms sur 196 partiels (session enregistrée)
Courbe de chauffe GPU ; les sessions à froid bloquent plusieurs secondes
Coût au repos
Zéro — seul l’audio diffusé est facturé
Capacité GPU réservée facturée même en silence
Alternance en plein flux
Darija, français et anglais sur une seule socket
Une seule langue par session
Authentification navigateur
Sous-protocoles WebSocket, clé jamais dans l’URL
Jetons en query string qui finissent dans les logs et les referrers
Cohérence avec le mode fichiers
Même famille que tapra-voice-v1, même style de transcription
Un modèle streaming séparé, avec d’autres conventions
Coût
0.300 TND / min (≈ $0.100), mesuré par session
Planchers à la minute et minimums de concurrence
Tarifs
Au compteur, jamais par abonnement.
Vous payez exactement ce que vous envoyez. Le même solde prépayé couvre les cinq modèles Tapra, facturés en USD ou en TND.
Tarif de référence
0.300 TND / min
Une seule WebSocket qui révise la transcription pendant que vous parlez, puis fige chaque tour après une pause. Aucune infrastructure inactive à payer.
Envoyez les sous-protocoles tapra-realtime et tapra-auth.<API_KEY> à l’ouverture de la socket. Ne mettez jamais une clé dans la query string : elle finirait dans les logs serveur et les en-têtes referrer.
Quel format audio la socket attend-elle ?
Des trames PCM mono binaires en pcm_s16le à 16 kHz. C’est ce que produit déjà la capture micro de Tapra, donc pas d’étape de rééchantillonnage.
Que se passe-t-il si la connexion reste inactive ?
Envoyez {"type":"ping"} toutes les 15 secondes si vous n’envoyez pas d’audio. Après une pause d’environ 800 ms, le serveur émet utterance et continue d’écouter. Environ 10 secondes de silence arrêtent la session (final avec la raison idle_stop) pour libérer la place. Passez idle_stop=0 pour désactiver ce comportement. Quand vous avez fini, envoyez {"type":"stop"} pour la transcription finale et le coût.