VoiceThere 0.3.0
October 21, 2026 · release
@voicethere/agent 0.10.0 · @voicethere/cli 0.16.9 · @voicethere/client 0.11.9
VoiceThere 0.3.0 is the third production release of the hosted platform. The biggest change is under the hood: VoiceThere speech now runs on its own servers, and that makes replies faster and transcripts more accurate when many calls run at once. On top of that, callers can switch language in the middle of a call, calls survive short network drops, and the dashboard shows what happened in every deploy and every turn.
Dashboard: app.voicethere.io
Speech on its own servers
VoiceThere speech-to-text and text-to-speech no longer run inside your agent's worker node. They run on dedicated speech servers that scale with the number of calls, so a busy agent no longer slows down the transcript, and speech capacity grows as calls come in.
We ran the same test against the previous release and this one: 30 callers starting at once and talking for ten minutes.
- A reply now starts a median of 194 ms after the caller's speech is transcribed, down from 1,202 ms. The slowest 5% of replies start within 420 ms instead of 1,897 ms.
- Every call completed: 30 of 30, against 25 of 30 before.
- The speech recognizer no longer gives up on a turn (0 of 1,141 turns, against 5 of 731) and no longer drops words (0, against 56).
- Counting spelling variants like "to" and "two" as the same word, the error rate on our test phrases fell from 3.2% to 1.7%.
- Calls are ready sooner: a session was ready a median of 4.7 seconds after the request, down from 55 seconds, and the slowest 5% within 13.5 seconds instead of 65.
More calls per worker. Each agent worker node now handles 15 concurrent voice sessions with VoiceThere speech-to-text and text-to-speech, up from 10. That is 45 concurrent voice sessions on Advanced (was 30) and 120 on Ultimate (was 80). A project picks up the new limit on its next deploy.
Published latency. Under heavy load, with many calls running at once on VoiceThere speech, a reply starts a median of 1,766 ms after the caller stops talking, and time to first audio is a median of 130 ms. About 1,500 ms of the first number is the end-of-speech wait you configure, not compute. The benchmarks page also covers ElevenLabs, Cartesia, Groq, OpenAI and Fish Audio, with the method and the commands to reproduce it.
Built-in speech is now called voicethere everywhere: SDK, API, dashboard, CLI and docs. The old ids local-sherpa and cluster-sherpa still work when you set voice settings through the API or CLI 0.16.9.
More: Speech latency benchmarks · VoiceThere speech · Configure the end-of-turn wait
Switch language in the middle of a call
A caller can now change language mid-call and your agent follows, on the same connection. Turn on automatic switching with languageId.autoSwitch.enabled. After the caller stops talking, VoiceThere identifies the spoken language, starts the speech models for the new language, holds the caller's words and replays them into the new recognizer, so nothing is misheard. Your agent receives the transcript in the new language and answers in it.
If the new language takes a moment to start, the caller hears a short ready message (built-in texts for English, German, Spanish, French, Italian, Portuguese, Dutch, Polish and Russian). A slow start is retried once, and a language that still cannot start is reported to your agent as language_unavailable instead of being transcribed as the old language. Your agent can also switch on its own with setVoiceLanguage. Automatic switching needs VoiceThere speech for both speech-to-text and text-to-speech. A full switch, where both the recognizer and the voice change, works for English, German, Spanish, French, Russian and Chinese.
More: Language switching
Calls that survive network drops
A call now rides out a network drop of about 10 seconds with the default 15 second reconnect window, and about 25 seconds if you raise the window to 30. Before, a drop of roughly 5 seconds ended the call. The conversation continues on the same session, and a call that never comes back is billed up to the point it was lost. The window is the project setting connection.reconnectWindowSec (15 to 30 seconds), and the full behavior needs @voicethere/client 0.11.9.
The voice runtime also got fixes that callers notice without knowing why:
- The agent keeps listening, and can be interrupted, while a transcript is slow.
- A short first word like "Hi" or "OK" is no longer dropped, and built-in speech-to-text no longer repeats the first word of an utterance ("okay okay").
- Mixed audio in voice+data and positional sessions no longer drops or repeats 20 ms chunks when a caller's network is uneven, and a call no longer hangs on "connecting" after one lost handshake packet.
More: Connection drops and the reconnect window · Advanced voice settings
Deploys you can read
Every deploy now has a timeline: requested, started, new version ready, new calls switched, previous version finishing its calls, and what a force deploy ended. Open the Deployments tab, or run voicethere deployments list and voicethere deployments show. The list shows who requested each deploy, and events are kept for 90 days.
A failed deploy now says whose problem it is. If your agent throws while loading, the deploy fails as AGENT_START_FAILED and the previous version keeps serving (before, the broken version went live and every call failed). If the failure is on our side, the dashboard offers an Open a ticket email with the ids support needs.
Force rollouts now do what the name says: calls on older versions end within 15 seconds of the new version being ready, with end reason force_rollout.
More: Deployment history · Rollout modes · Why a deploy failed
A redesigned dashboard
The dashboard has a new layout: sidebar navigation, a project header with live status, a "Get this project live" checklist on new projects, and a Settings tab that holds runner, voice, billing and environment settings. Press ⌘K to jump anywhere.
Each session has a timeline that puts the conversation, logs, system events and errors in one list. Every caller and agent row shows the turn details: for the caller, speech-to-text vendor and model, language, speech length and why the turn ended; for the agent, voice, characters, time to first audio and played time. Each row also shows an estimated credit cost.
The new Metrics area (Overview, Sessions, Voice, Agent) has zoomable charts for response time, finalize delay and abandoned turns, and the project Usage page shows characters, credits and sessions for each voice. The create-project list is built from the installed @voicethere/agent, so new templates appear without a platform release.
More: Dashboard guide · Turn details · Project metrics · Voice usage per project · Agent templates
More voices and better speech
Fish Audio joins the cloud vendors, with Drama 3 for text-to-speech and transcribe-1 for speech-to-text. Bring your own Fish key:
voicethere projects voice set --stt-provider fishaudio --tts-provider fishaudio --stt-model transcribe-1 --tts-model drama-3
Fish speech-to-text sends no partial transcripts, so barge-in uses voice activity detection unless the project sets vad.bargeIn.requireSttPartial.
Repeated agent replies (greetings, "one moment please") now play from memory, with a project toggle to turn that off. Replies that start with a lowercase word after a period used to be read as one sentence and started about 150 ms late; the new tts.sentenceCase setting (default auto) fixes that without touching your text. The docs also explain how the end of a turn is decided, with a tuning table, and how to control pauses and pronunciation with Piper voices.
More: Advanced voice settings · Fish Audio · Piper pauses and pronunciation
Billing
Built-in speech is billed per use. Speech-to-text costs 5 credits per minute of audio. Text-to-speech costs 5, 15 or 100 credits per 1,000 characters for low, medium and high quality voices. Medium is the default for voices without a quality label, and high quality voices, including the Chinese voice, cost more.
Cloud vendor legs create no speech credit row. A session that uses a cloud vendor for one leg and VoiceThere speech for the other pays only for the VoiceThere leg, and the meter follows a vendor switch in the middle of a call. To see the split, open the project Usage page: its Voice usage section lists each voice with its quality tier and the characters it spoke.
More: Speech pricing
Packages
@voicethere/agent 0.10.0, @voicethere/cli 0.16.9 and @voicethere/client 0.11.9 are on npm. The agent exposes sttVendor and ttsVendor with provider: "voicethere", and setVoiceLanguage and prepareVoiceLanguage take one request shape for every vendor. The agent can stop storing turns for one session while it collects a PIN or card number (disableConversationHistory), and @voicethere/client can embed a widget from the chat key alone.
More: npm packages · Conversation history · Embed widget
Try it
npm install -g @voicethere/cli@latest
npm install @voicethere/agent@latest @voicethere/client@latest
voicethere login
voicethere deploy --wait
voicethere deployments list
Then open a session in the dashboard and look at the turn details on its timeline.
Upgrade notes
- Requests that were silently wrong now fail.
setVoiceLanguageandprepareVoiceLanguagereject conflicting or misplaced fields with a namedreason(conflicting_fields,scope_mismatch,unsupported_field) and amessagethat says what to change. The top-level shape still works. - Provider values change. API responses return
voicetherewhere they used to returnlocal-sherpa. If you compare provider strings, accept both. CLI 0.16.8 and older reject--stt-provider local-sherpaonce the catalog listsvoicethere; update to 0.16.9. - Force deploys end live calls. Callers get a non-recoverable
session_error(WEBRTC_CONNECTION_CLOSED). Use Drain when calls should finish. - Event ordering. Speech events for the next utterance can arrive before the previous final, so pair
user_speaking_startanduser_speaking_endbyutteranceId. - Agent transcript timing. Agent rows in the conversation history are written when the reply finishes, so the live tail shows agent text up to one reply later than before.
Thanks to everyone who sent traces and load-test reports this month. The next release is about building interactive agent experiences, with an LLM integration template and a conversation builder for people who would rather not write code.