SDKsRéférence SDK

Référence SDK

Exports publics (barrel src/index.ts)

Composants : TranscriptionButton, TranscriptionProvider.

Hooks : useTranscription, useStreamingV2, useTranscribeLive.

Constantes : STREAMING_LIVE_PATH, AUDIO_NORMALIZATION_CONFIG, EPHIA_TRANSCRIBE_INFO_URL.

Types : TranscriptionButtonProps, TranscriptionButtonTheme, TranscriptionButtonVariant, TranscriptionButtonSize, TranscriptionButtonCustomColors, TranscriptionContextValue, ChunkData, TranscriptionState, StreamingStats, RecorderPhase, TranscriptionErrorCode, MicrophonePermissionState, VadSettings, StreamingWarning, StreamingV2Config, TranscribeLiveConfig, AudioNormalizationConfig, StreamingProtocol, TranscribeGroqLogEntry, SessionConfidenceWordRow.

TranscriptionButtonProps (détail)

PropTypeRequisDéfautDescription
tokenstringOuiClé API Ephia. Sans token, bouton désactivé.
endUserIdstringNonIdentifiant utilisateur final (recommandé, sera obligatoire).
projectIdstringNonRattachement projet.
streamingUrlstringNonautoURL WebSocket complète.
streamingUrlBasestringNonlocalhost→ws://localhost:8765 ; sinon wss://platform-api.ephia.appOrigine WS sans chemin.
audioProcessorUrlstringNon'/audio-processor.js'URL du worklet audio.
promptPresetIdstringNonprompt_preset_id en query.
vadPresetIdstringNonvad_preset_id en query.
reformatPresetIdstringNonreformat_preset_id en query.
model'default' | 'vox'Non'default'Modèle final médical.
interimStreamingbooleanNonfalseinterim_streaming=true/false.
finalReformatbooleanNontruefinal_reformat=true/false (compat).
preserveIncomingAfterStopbooleanNonfalseConserve les events après stopRecording().
theme'light' | 'dark'Non'dark'Thème visuel.
variant'minimal' | 'standard'Non'minimal'standard = icône + barre de volume.
size'S' | 'M' | 'L'Non'M'Échelle du bouton.
logoSrcstringNon'/ephia_logo_light.svg'Logo (SVG inline si contient ephia_logo).
colors{ primary: string; secondary: string }NonCouleurs custom CSS (inversion auto en light).
onStateChange(state: TranscriptionState) => voidNonCallback changement d’état.

useStreamingV2(config)

Pour construire votre propre interface (sans TranscriptionButton), passez un objet StreamingV2Config :

ChampObligatoireDescription
urlOuiURL du endpoint streaming (le hook y ajoute token, session_id si besoin, et les entrées de vadSettings).
tokenOuiClé API ; sans token à la connexion → token_missing.
audioProcessorUrlNonWorklet (défaut : /audio-processor.js).
currentSessionNumNonNuméro de session côté client (propagé dans ChunkData.session_num).
customPromptNonSi défini au moment de l’ouverture : envoi JSON { type: 'set_prompt', custom_prompt } après l’ouverture du WS.
vadSettingsNonObjet dont chaque paire clé/valeur est ajoutée à la query string.
endUserIdNonIdentifiant utilisateur final (transmis en query end_user_id).
projectIdNonIdentifiant projet (transmis en query project_id).
protocolNon'streaming_legacy' (défaut) ou 'transcribe_v1'.
userJwtNonJWT utilisateur (playground + org_id).
orgIdNonID organisation.
recordingOriginNon'playground' | 'platform' | 'sdk' (auto-détecté si absent).
preserveIncomingAfterStopNonGarde les events après arrêt jusqu’à final_sync.
burstStartMs / cursorPositionMsNonPosition curseur pour reprise (protocol transcribe_v1).
nextSentenceIndex / nextSegmentIndexNonIndex phrase VAD (protocol transcribe_v1).

Note : le hook crée un AudioContext avec sampleRate: 16000. Le type StreamingV2Config peut déclarer d’autres champs ; pour interimStreaming sans TranscriptionButton, reportez les paramètres attendus dans la query de url (comme le fait le bouton pour interim_streaming / final_reformat).

Le retour du hook expose les mêmes champs utiles qu’un TranscriptionState : chunks, phase, isArming, isRecording, isProcessing, isConnected, volume, speechProb, isSpeech, erreurs, streamingWarning, debugMessages, sessionId, lastSpeechStartTimestamp, startRecording, stopRecording, clear, connect, prepareAudio, prepareTransport, stats.

Phases (RecorderPhase)

PhaseSens
idleRepos.
preparing_audioInitialisation micro + worklet.
connecting_wsOuverture WebSocket.
armingArmement après action utilisateur.
readyPipeline prêt ; premier envoi audio en cours ou imminent.
recordingStreaming audio actif.
stoppingFin de parole côté client.
finalizingAttente finalisation serveur (final_sync).
errorErreur.

ChunkData (aperçu)

  • id, text, status (interim | final), isMedicalCorrection, seq
  • Optionnel : timestamp_ms, duration_ms
  • session_num : index de session côté client

StreamingStats (aperçu)

  • framesCaptured, framesSent, framesSkipped, batchesSent, keepalivesSent, bytesSavedByBatching

Protocole WebSocket (aperçu)

Entrées (JSON) gérées par le SDK : session_info, speech_start, transcript_interim, transcript_final, session_reformat_final, warning, final_sync, pong.

Sorties : trames binaires PCM 16 bits ; JSON end_of_speech, ack_finish (réponse à final_sync), ping, éventuellement set_prompt si customPrompt est défini.

Normalisation audio

AUDIO_NORMALIZATION_CONFIG est exporté par le paquet ; la normalisation de crête est appliquée sur le Float32Array entrant dans le hook avant conversion en PCM 16 bits.