Saisie vocale
Statut : En production depuis la Phase 62 (2026-06-05). whisper.cpp auto-hébergé sur Contabo — aucune dépendance à OpenAI, aucun audio ne quitte votre serveur.
Arc OS prend en charge deux couches de saisie vocale dans le composer de chat :
| Couche | Nécessite | Fonctionne sur |
|---|---|---|
| L1 — Web Speech API | Chrome ou Edge (Chromium) | Tous les plans Arc |
| L2 — whisper auto-hébergé | Tout navigateur (MediaRecorder WebM/WAV) | Arc Standard Cloud, On-premise |
Les deux couches alimentent la même zone de texte du composer et sont transparentes pour le worker IA.
Utiliser la voix dans le chat
- Ouvrez le workspace de n'importe quel projet et placez le focus dans le composer de chat.
- Cliquez sur le bouton microphone (en bas à gauche du composer) ou appuyez sur Ctrl+Shift+V (fonctionne sur toute disposition de clavier — le raccourci correspond à la touche physique V, pas au caractère de la disposition).
- Parlez. Une animation de forme d'onde + une bordure orange indiquent l'enregistrement.
- Cliquez à nouveau sur le bouton micro (ou appuyez sur le raccourci) pour arrêter.
- Le texte transcrit apparaît dans le composer — modifiez-le si nécessaire, puis envoyez.
Mode continu : L1 continue d'écouter jusqu'à ce que vous arrêtiez ; L2 enregistre un seul clip et l'envoie pour transcription.
L1 — Web Speech API (Chrome/Edge)
Utilise l'API de reconnaissance vocale intégrée au navigateur. Fonctionne instantanément, sans aller-retour serveur.
Locale : définie automatiquement depuis votre préférence de langue Arc. Codes BCP-47 pris en charge : uk-UA, en-US, de-DE, es-ES, fr-FR, pl-PL, ru-RU, pt-BR.
Permissions : le navigateur demande l'accès au microphone à la première utilisation. Si vous l'avez bloqué par accident, allez dans Site settings → Microphone → Allow pour arc-os.co. L'en-tête Permissions-Policy sur arc-os.co utilise microphone=(self) — l'accès same-origin est autorisé tandis que les intégrations cross-origin sont verrouillées.
Limitations :
- Nécessite Chrome ou Edge (basés sur Chromium). Firefox et Safari basculent automatiquement vers L2.
- La qualité de transcription dépend des serveurs de Google (appelés par le navigateur, pas par Arc OS).
L2 — whisper.cpp auto-hébergé
Arc OS exécute un service persistant arc-whisper.service sur Contabo avec le modèle ggml-base (142 Mo) préchargé. Quand le navigateur ne prend pas en charge la Web Speech API, le composer bascule automatiquement vers cette couche :
- Le navigateur enregistre un clip WebM via
MediaRecorder. - À l'arrêt, le clip est envoyé en
POSTà/api/crm/voice/transcribe(multipart, max 25 Mo). - Le serveur le transmet au whisper-server local sur
127.0.0.1:19214— les octets audio ne quittent jamais Contabo. - Le texte transcrit revient et est inséré dans le composer.
Latence : ~3,4 s pour un clip de 11 secondes (modèle chaud, 3,1× temps réel sur la machine EPYC 6 vCPU actuelle).
Concurrence : le whisper-server dispose d'un sémaphore à 2 slots. Si les deux slots sont occupés, l'API renvoie 429 (« server busy ») et l'UI affiche un toast — réessayez dans quelques secondes.
Quota journalier
Chaque utilisateur dispose d'une limite souple de 60 min/jour pour les transcriptions L2. Le serveur estime la durée du clip à partir de la taille de l'upload (hypothèse codec voix ~32 kbps, précision ±30 %). Quand la limite est atteinte :
- L'API renvoie
429avec{ "error": "Daily voice quota reached (60 min/day)", "used": <seconds>, "cap": 3600 } - Le bouton micro est désactivé pour le reste de la journée
- Le quota se réinitialise à minuit UTC
L1 (Web Speech API) n'est pas soumis à cette limite — il utilise le service propre au navigateur.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| Bouton micro grisé | Quota journalier atteint | Attendez minuit UTC |
| « Microphone access blocked » | Le navigateur a bloqué le micro | Site settings → Microphone → Allow pour arc-os.co |
| L1 ne fonctionne pas dans Firefox | Firefox ne prend pas en charge la Web Speech API | Bascule automatiquement vers L2 |
| 429 « server busy » | Deux autres utilisateurs transcrivent | Réessayez après ~5 s |
| Qualité de transcription médiocre | Bruit de fond / modèle base L2 | Parlez distinctement ; la transcription Pro (modèle plus grand) est prévue pour une phase future |
| Ctrl+Shift+V ne fait rien | Le focus n'est pas dans le composer | Cliquez d'abord dans la zone de texte du composer |
Références
shared/routes/voice.ts— handler de l'endpoint (Phase 62.4, #373)shared/migrations/051_voice_usage.ts— table de quotavoice_usage_logfrontend/src/crm/pages/workspace/Composer.jsx— composant MicButtonarc-whisper.servicesur Contabo — config du démon whisper.cpp- Endpoint API :
POST /api/crm/voice/transcribe