Voice: dictation and reading aloud
In the chat, members can dictate a question instead of typing it, and listen to an answer instead of reading it. Both are off by default. An administrator turns them on for the whole workspace under Settings → Defaults → Voice in the chat.
No recording is kept: dictation audio is sent to the transcription model and then dropped; the audio of an answer read aloud is produced on demand and never stored.
What members see
- Microphone button in the chat input: one click starts recording, a second one stops it. The transcript is appended to what is already typed; review it, then send it. The browser asks for microphone access the first time.
- "Read aloud" button under each answer, next to "Copy". One click starts reading, a second one stops it. Only one answer plays at a time.
- Automatic reading (when the administrator turns it on): each new answer is read as soon as it is complete. Opening an old conversation reads nothing by itself.
Formatting is removed before reading: headings, bold, lists, links (only the link text is read), images, [1] citations and code blocks are not spoken. A very long answer is cut at the end of a sentence, at the model's limit (4,000 characters at most).
Setting up
1. Add the models
Under Settings → Model Management:
| Use | Model type | Providers |
|---|---|---|
| Dictation | Speech (ASR) | OpenAI (whisper-1, gpt-4o-transcribe…), ElevenLabs (scribe_v1), any OpenAI-compatible server, and the other ASR providers in the catalog |
| Reading aloud | Text to speech (TTS) | OpenAI (gpt-4o-mini-tts, tts-1, tts-1-hd), ElevenLabs (eleven_multilingual_v2, eleven_flash_v2_5, eleven_turbo_v2_5), any OpenAI-compatible server (/v1/audio/speech: Kokoro-FastAPI, openedai-speech, LocalAI…) |
The Default voice field of a text-to-speech model sets the voice used when the workspace picks none: an OpenAI voice name (alloy, nova, coral…), or the id of a voice from the ElevenLabs voice library. ElevenLabs has no default voice: without an id, neither the connection test nor reading works.
The Test connection button of a text-to-speech model reads "Bonjour." and checks that audio comes back.
2. Pick the workspace's models
Under Settings → Defaults, the Default speech recognition model and Default text-to-speech model rows set which models voice uses. When none is chosen, the usual rule applies: the deployment default, otherwise the first active model of the type.
3. Turn voice on
Still under Defaults, group Voice in the chat:
| Setting | Effect |
|---|---|
| Dictation | Shows the microphone button |
| Dictation language | Helps transcription (fr, en…); "Automatic detection" if members speak several languages |
| Read aloud | Shows the "Read aloud" button |
| Automatic reading | Reads each new completed answer |
| Voice | Overrides the model's default voice for the whole workspace |
A button stays hidden while its feature is off or no model of its type is available.
Who is speaking: speaker separation
With an ElevenLabs speech recognition model (scribe_v1), the transcript of an audio file imported into a knowledge base, or attached in the chat, says who is speaking:
[00:04] Intervenant 1 : Bonjour, on fait le point sur le chantier ?
[00:09] Intervenant 2 : Oui, la livraison est prévue lundi.Each line starts with its time in the recording. Speakers are numbered in order of appearance ("Intervenant" is the French label written into the transcript). Each line stays linked to its place in the recording, and a long turn is split into one-minute parts. Other providers give the text without speaker names. Chat dictation is not affected.
Limits
- Dictation recording: 10 MB at most, several minutes of speech.
- Text read at once: the model's limit (4,096 characters for OpenAI, 10,000 for ElevenLabs Multilingual v2), capped at 4,000.
- Dictation and reading aloud are not offered in assistants embedded in a website.
API
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/voice/status | What the chat may offer: dictation, read_aloud, auto_read, language, max_audio_bytes |
POST | /api/v1/voice/transcriptions | Multipart form, field audio; answers {text} |
POST | /api/v1/voice/speech | {text}; answers the audio (usually audio/mpeg). Header X-Speech-Truncated: true when the text was cut |
POST | /api/v1/initialization/tts/check | Connection test of a text-to-speech model (administrators) |
The settings are read and written with the workspace defaults (GET / PUT /api/v1/tenants/kv/default-settings): tts_model_id and the voice object (dictation, read_aloud, auto_read, voice_name, language).