Parole vers texte en streaming

Tapra-Voice-Realtime

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.

  • 0.300 TND / min
  • PCM 16 kHz
  • VAD + détection de fin

WSS /v1/realtime/stream

Le client envoie

open → 100 ms PCM frames → {"type":"stop"}

Événements du serveur

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.

Intégrer

Le contrat, en un seul endroit.

Identifiant du modèle
tapra-voice-v1-realtime
Endpoint
WSS /v1/realtime/stream?language=ar-AR
Client vers serveur
Trames PCM mono binaires, pcm_s16le, 16 kHz
Serveur vers client
Événements ready, partial, utterance, final, error
Protocoles
tapra-realtime, tapra-auth.<API_KEY>
VAD / fin de tour
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-RealtimeAlternative générique
Temps de décodage d’un partielMé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 reposZéro — seul l’audio diffusé est facturéCapacité GPU réservée facturée même en silence
Alternance en plein fluxDarija, français et anglais sur une seule socketUne seule langue par session
Authentification navigateurSous-protocoles WebSocket, clé jamais dans l’URLJetons en query string qui finissent dans les logs et les referrers
Cohérence avec le mode fichiersMême famille que tapra-voice-v1, même style de transcriptionUn modèle streaming séparé, avec d’autres conventions
Coût0.300 TND / min (≈ $0.100), mesuré par sessionPlanchers à 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.

Tarif
$0.100 par minute d’audio
En dinars
0.300 TND par minute d’audio
Équivalent horaire
$6.00 par heure
Unité mesurée
audio_ms (durée audio exacte)
Facturation minimale
Aucune — pas de frais de session inactive

Questions

Ce que les développeurs demandent d’abord.

Comment s’authentifier depuis un navigateur ?

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.